導入
コマンド編の総仕上げです。ここまでの道具(grep・sed・cut・sort・uniq・パイプ)を組み合わせて、生のログから知りたい情報を抜き出す ——現場のログ調査そのものを体験します。小さな道具をつなぐだけで、驚くほど多くのことができます。
説明
logs/access.log は、1行が「IP メソッド パス ステータス」で並んだアクセスログです。まず全体を眺めます。
cat logs/access.log
「エラー(403)の行だけ見たい」なら grep で絞ります。
grep 403 logs/access.log
「どの IP からのアクセスが多いか」を知りたい——ここでパイプの出番です。先頭列(IP)を取り出し → 並べ替え → 重複を数える をつなぎます。
flowchart LR
A["cat access.log"] --> B["cut -d ' ' -f 1<br/>(IP列)"] --> C["sort<br/>(そろえる)"] --> D["uniq -c<br/>(数える)"] --> E["sort -rn<br/>(多い順)"]
cat logs/access.log | cut -d ' ' -f 1 | sort | uniq -c | sort -rn
sed で表示を整えることもできます。たとえばステータスだけを目立たせる、パスの余計な部分を削る、といった整形です。
grep 404 logs/access.log | sed 's/GET //'
「絞る(grep)→ 取り出す(cut)→ 集計する(sort・uniq)→ 整える(sed)」。この流れは、ログに限らずあらゆるテキスト処理の基本形です。1つの巨大なツールではなく、小さな道具をパイプでつなぐ——これが Linux の思想です。
やってみよう
grep 403 logs/access.log で 403 の行だけを取り出し、cat logs/access.log | cut -d ' ' -f 1 | sort | uniq -c | sort -rn で「IPごとのアクセス回数を多い順」に集計してみましょう。grep 404 logs/access.log | sed 's/GET //' で、絞ったうえに整形まで一気通貫でできることを体感してください。
演習
logs/access.log から、ステータス 403 を含む行だけを取り出してください。
ヒント1を見る
「含む行を探す」のは grep 文字列 ファイル です。
ヒント2を見る
grep 403 logs/access.log