SadServers “Saskatoon”: counting IPs.

内容

SadServers 2問目の”Saskatoon”: counting IPs.を解きます

問題文

説明: Web サーバーのアクセス ログ ファイルは次の場所にあります。 /home/admin/access.log。 ファイルは HTTP リクエストごとに 1 行で構成され、各行の先頭にはリクエスト者の IP アドレスが含まれます。

このファイル内で最も多くのリクエストがあった IP アドレスを見つけます (同順位はなく、IP は一意です)。 ソリューションをファイルに書き込む /home/admin/highestip.txt。 たとえば、ソリューションが「1.2.3.4」の場合、次のようにできます。 echo "1.2.3.4" > /home/admin/highestip.txt

/home/admin/access.log ファイル内で一番多く発生しているIPアドレスを特定し、そのIPアドレスを/home/admin/highestip.txtファイルに書き込む

検証方法

テスト: IP アドレスの SHA1 チェックサム sha1sum /home/admin/highestip.txt6ef426c40652babc0d081d438b9f353709008e93(解決策を公開せずに検証するための単なる方法です。)

sha1sum /home/admin/highestip.txtを実行し6ef426c40652babc0d081d438b9f353709008e93と一致していることを確認する

解法

ファイルからIPアドレスを抜き出す

cat /home/admin/access.log | awk -F " " '{print $1}'

awkの-Fオプションで区切り文字を指定する方法 | ITを使っていこう

access.logの1列目に書き込まれているIPアドレスをすべて抽出する

IPアドレスの順番を並べ変える

cat /home/admin/access.log | awk -F " " '{print $1}' | sort

【 sort 】コマンド――テキストファイルを行単位で並べ替える:Linux基本コマンドTips

sortコマンドでIPアドレスの順番を並べかえる

IPアドレスのユニークな数を数える

cat /home/admin/access.log | awk -F " " '{print $1}' | sort | uniq -c

【 uniq 】コマンド――重複している行を削除する:Linux基本コマンドTips

uniq -c コマンドで各行の先頭に出現回数を出力する

※uniqコマンドは連続して重複している行を1行にまとめて表示するコマンドであるため、直前でsortの実行が必須

数の多い順に並べ替える

cat /home/admin/access.log | awk -F " " '{print $1}' | sort | uniq -c | sort -r

【 sort 】コマンド――テキストファイルを行単位で並べ替える:Linux基本コマンドTips

sort -r 逆順で並べ替える

一番上の行を表示する

cat /home/admin/access.log | awk -F " " '{print $1}' | sort | uniq -c | sort -r | head -1

【 head 】コマンド/【 tail 】コマンド――長いメッセージやテキストファイルの先頭だけ/末尾だけを表示する:Linux基本コマンドTips

head -1 1行目だけ表示する

確認結果をファイルに記入する

echo "66.249.73.135" > /home/admin/highestip.txt

検証用コマンドを実行する

sha1sum /home/admin/highestip.txt

私の解決策を確認してくださいをクリック

1行で回答するコマンド

ちなみにヒントを見ると、1行で回答する方法が書かれていました

cat /home/admin/access.log | awk -F " " '{print $1}' | sort | uniq -c | sort -r | head -1 | awk -F " " '{print $2}' > /home/admin/highestip.txt

コメント

タイトルとURLをコピーしました