🫣

【学習記録】Sadserverやってみた 【easy編】

2025/01/19に公開

所感

知ってるか知ってないかやね。
コーディング面接とかで出てきそう。それを”知らない”で落とすのはもったいない.
mediam編もやってみたい。設問は時期によっていろいろ変わるみたい

学んだこと

・いろんな技を使おう
grep(中身) と find(ファイル名)
nano スクリプト書く
A | B Aを実行してBを実行。

デデン! https://sadservers.com/scenarios  easyは15問

1、"Saint John" ロギングしてるやつあるけど、もう要らん。 (プログラムの特定&停止)

lsof だけ覚えればおk
ps -r プロセスが開いているファイルを表示する
lsof  参考 プロセスが開いているファイルを表示する

lsof |grep bad.log 
lsof: このコマンドは "List Open Files" の略で、システム上で現在開かれているファイルをすべてリストアップします13。
|: これはパイプと呼ばれ、左側のコマンドの出力を右側のコマンドの入力として渡します。
grep bad.log: grepコマンドは、入力された文字列からパターンにマッチする行を表示します4。ここでは "bad.log" という文字列を含む行を探します。

fuser cf ローカルホストのリソースを使用中のプロセスを検索し、表示、強制終了することのできるコマンド「Fileを使っているUSERを調べることができる」が由来
kill [オプション] プロセスID cf

2、"Saskatoon" いっちゃんアクセスが来るIPどれ。 (特定&書き出し)

awk '{print $1}' access.log|sort|uniq -c|sort -r|head -20

awk '{print $1}' access.log: アクセスログファイルの各行から最初のフィールド(通常はIPアドレス)を抽出します1.
sort: 抽出されたIPアドレスをアルファベット順にソートします1.
uniq -c: 連続する重複行を1つにまとめ、その出現回数を行の先頭に表示します14.
sort -r: 結果を逆順(降順)にソートします。これにより、出現回数が多い順に並べ替えられます3.
head -20: 結果の上位20行を表示します

echo "1.2.3.4" > /home/admin/highestip.txt
書き出し

3、"The Command Line Murders" 探偵ごっこ。 (特定) 割愛

推理小説、instructions呼んで、hint見て回答
hintはターミナルに残るので、全部8開いておk まとめて開くコマンド

tail -n +1 hint

あんまり勉強にならんかったかな。コマンドで推理小説やらなくておk

4、"Taipei" ポート80を開ける為にポートノッキングして。ターミナル上でスクリプトを書く

nmap -p- localhost localhostの全ポート(1-65535)に対してTCPポートスキャンを実行
ポートノッキングとは?
→ 特定のポートを解放するポート的な? 今回で言うとポート80を開ける為のポート(7002)

nano find_port.sh find_port.shって名前のスクリプト書くよ → vimみたいな感じ

#!/bin/bash

for port in $(seq 1 65535); do
  knock localhost $port
  if curl -s localhost &>/dev/null; then
    echo "Success! The correct port is: $port"
    exit 0
  fi
done

nanoの場合、Ctrl+X を押し、Y を押してEnterキーを押して終了(保存して終了)

./find_port.sh これでスクリプト実行。これで開いてるポート番号がわかる
knock localhost <見つかったポート番号> ポートノッキングする
curl localhost

5、"Resumable Server" チュートリアル

特になし 
1日3個までしか開けないのに、これもカウントするんかい😡

6、"Lhasa" 平均を出す

結構簡単だったほぼ自力で解けた
ここ
awk 集計コマンド 統計にも使われるみたいここ

7、"Bucharest" アプリとpostgreデータベースが繋がらない なぜ?

8、 "Bilbao" kubernetesのpodが立ち上がらない なぜ?

kubernetesとは?立ち上げには何が必要なの?そもそもこれがわかってないと難しい
その上でkubectlコマンド

↓このコマンドでなんでスタートしないのかのエラーメッセージが出る。んで、各個撃破。

kubectl describe pod

エラー2個あります(似てるけどちょっと違う)
エラー1の解決方法→ラベルを足して今のpodを消す
エラー2の解決方法→manifest.ymlのメモリ上限を削除or変更する ※ちゃんと”0”って書くこと
んでdockerも再起動
(解決後、もう一回kubectl describe podやってみ。podがnormalizedになってる)

9、 "Apia" 全く同じファイルが複数、でもうち一つに一言追加されてる それは何?

課金

10、 "Gitega" golangでテストあるけど実行できん なぜ?

課金

11、 "Minneapolis" CSVを分割して

こんなコマンド知らなかった

man split
split -d -n 10 data.csv data-
head -1 data.csv > header.txt | for i in {0..9}; do cat header.txt data-0$i > data-0$i.csv; done

12、 "Saint Paul" CSVを統合して

そりゃあ、ファイル分割コマンドがあれば、統合コマンドもあるさ

cat polldayregistrations_*.csv > concat.csv

awk 'FNR==1 && NR!=1 {next} {print}' polldayregistrations_*.csv > all.csv

13、 "Bata" スパイが残した暗号は何?

find grep 違い

find /proc/sys -type f -exec grep -El '^secret:' {} 2>/dev/null \; 
find /proc/sys -type f -print0 | xargs -0 grep -El '^secret:' 2>/dev/null

14、 "Geneva" SSL証明書の有効期限が切れてる。新しいの作ろ。

  ls -la
  cat /etc/nginx/sites-available/default

  openssl x509 -in /etc/nginx/ssl/nginx.crt -text -noout |head

  sudo mv /etc/nginx/ssl/nginx.crt /etc/nginx/ssl/nginx.crt.old , sudo mv /etc/nginx/ssl/nginx.key /etc/nginx/ssl/nginx.key.old
  sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -subj "/CN=localhost/O=Acme/OU=IT Department/L=Geneva/ST=Geneva/C=CH"
  sudo systemctl restart nginx

15、 "Minneapolis" チュートリアル

Linux Server Review Scenario Guide

参考

各設問の解説

Discussion