ログファイルの中から「ERROR」という特定の文字が含まれる行だけを絞り込んで表示したい時に使うコマンドはどれですか?
解説
正解はgrep(グレップ)です。ファイルの中身から特定のキーワード(文字列)を検索し、一致した行だけを抽出して画面に表示する強力なコマンドです。findは「ファイル名や場所」を検索するコマンドであり、ファイルの中身までは調べないため不正解です。catはファイルの中身をすべてそのまま表示してしまうため、膨大なログから特定の文字を探す用途には向きません。lsはディレクトリ内にあるファイルの一覧を表示するコマンドです。「ファイルを探す」findと「中身を探す」grepLinuxを学び始めたばかりの人がよく混同するのが、grepとfindの使い分けです。普段使っているパソコンの機能で例えると、findは「どこに保存したか忘れたファイルを見つけるための検索窓」であり、grepは「ブラウザやエディタでCtrl+Fキーを押して、開いているページ内の特定の単語を見つける機能」に相当します。実務で「ログからエラーの原因を調べておいて」と頼まれたら、真っ先に使うのがこのgrepコマンドです。パイプ(|)と組み合わせて真価を発揮する現場のプロは、grepを単体で使うよりもパイプ(|)という仕組みと組み合わせて使うことが圧倒的に多いです。パイプとは、左側のコマンドの実行結果を、そのまま右側のコマンドに引き渡すバトンのような機能です。例えば、現在進行形で書き込まれ続けているログをリアルタイムで監視するtailコマンドと組み合わせて、tail -f /var/log/nginx/error.log | grep 'CRITICAL'のように書きます。こうすることで、「リアルタイムに流れる大量のログの中から、深刻なエラー(CRITICAL)が出た瞬間だけをキャッチして画面に出す」といった素早い調査が可能になります。一つひとつのシンプルなコマンドをレゴブロックのように繋ぎ合わせて、自分好みの複雑な処理を作るのがLinux最大の強みです。