本文へスキップ
BecomeCoder

Linuxコマンドコース · 第6章 自動化とシェルスクリプト · レッスン35

実践 ― ログを grep・sed・パイプで処理する

ブラウザで完結

導入

コマンド編の総仕上げです。ここまでの道具(grepsedcutsortuniq・パイプ)を組み合わせて、生のログから知りたい情報を抜き出す ——現場のログ調査そのものを体験します。小さな道具をつなぐだけで、驚くほど多くのことができます。

説明

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

実際に動かしてみよう

下の端末にコマンドを打って Enter を押すと、その場で結果が返ります。本文で出てきたコマンドを実際に試しながら進めましょう(ファイルを消しても「最初からやり直す」で元に戻ります)。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。