grepコマンドは、ファイルや出力の中から 指定した文字列を含む行を探す ための、Linux運用で最も使うコマンドの一つです。ログ調査の主役なので、基本と頻出オプションを実例でまとめます。
基本の使い方
grep "検索文字列" ファイル名
grep "error" /var/log/syslog # syslogから error を含む行を抽出
よく使うオプション
grep -i "error" app.log # 大文字小文字を無視(Error/ERRORも)
grep -n "error" app.log # 行番号も表示
grep -r "TODO" ./src # ディレクトリを再帰的に検索
grep -v "debug" app.log # 一致しない行を表示(除外)
grep -c "error" app.log # 一致した行数をカウント
grep -A 3 "error" app.log # 一致行の後3行も表示
grep -B 3 "error" app.log # 一致行の前3行も表示
grep -C 3 "error" app.log # 前後3行も表示
-A/-B/-C(前後の文脈表示)は、エラーの前後で何が起きたかを見るのに重宝します。
パイプと組み合わせる
grepの真価は、他のコマンドの出力を絞り込むときに出ます。
ps aux | grep nginx # nginxのプロセスだけ抽出
ss -tuln | grep 443 # 443番の待ち受けだけ
journalctl -u app | grep -i error # サービスのエラーだけ
正規表現で柔軟に検索
grep -E "error|warn" app.log # error か warn(-Eで拡張正規表現)
grep -E "^2026-08-15" app.log # 行頭が日付
grep -E "[0-9]{3}\.[0-9]+" app.log # IPっぽいパターン
^ は行頭、$ は行末、| はor、[0-9] は数字。よく使う記号だけ覚えれば十分戦えます。
実務での定番
- 障害時に、時刻とエラーを絞る:
grep "10:30" app.log | grep -i error - 特定IPの通信を追う:
grep "192.168.1.10" access.log - 設定の該当行を探す:
grep -n "listen" nginx.conf
まとめ
grepは「行を絞り込む」基本コマンド。-i(大小無視)、-n(行番号)、-r(再帰)、-v(除外)、-A/-B/-C(前後表示)を押さえ、パイプと正規表現を組み合わせれば、ログ調査が劇的に速くなります。まずはこの実例を手元で試すのがおすすめです。