grep・find
Linux で効率よく作業するには、目的の文字列やファイルを素早く探す力が重要です。
grep はファイル内容の検索、find はファイル名や条件による検索に使います。
grepで文字列を検索する
grep は、ファイル内から指定した文字列を含む行を表示します。
grep "error" app.log
大文字と小文字を区別せずに検索する場合は、-i を使います。
grep -i "error" app.log
行番号も表示したい場合は、-n を使います。
grep -n "timeout" app.log
特定の文字列を含まない行だけを表示する場合は、-v を使います。
grep -v "DEBUG" app.log
ログに多いデバッグ出力を除いて、警告やエラーだけ確認したい場面でよく使います。
マッチしたファイルの名前だけを表示したい場合は、-l を使います。
grep -r -l "TODO" ./src
ディレクトリ配下をgrepする
複数ファイルをまとめて検索する場合は、-r を使います。
grep -r "database" ./src
特定の拡張子だけを対象にしたい場合は、--include を組み合わせます。
grep -r --include="*.ts" "fetch" ./src
コードや設定ファイルを調べるときに便利です。
findでファイルを検索する
find は、ファイル名、種類、更新日時、サイズなどの条件でファイルを探します。
find . -name "*.log"
この例では、現在のディレクトリ以下から .log で終わるファイルを探します。
ディレクトリだけを探す場合は、-type d を指定します。
find . -type d -name "node_modules"
ファイルだけを探す場合は、-type f を指定します。
find . -type f -name "*.conf"
更新日時で検索する
最近変更されたファイルを探す場合は、-mtime や -mmin を使います。
find . -type f -mtime -1
find . -type f -mmin -60
障害調査や、直近で生成されたログを探すときに役立ちます。
grepとfindを組み合わせる
find で対象ファイルを絞り、grep で内容を検索することもできます。
find ./logs -type f -name "*.log" -exec grep -n "ERROR" {} \;
{} には find で見つかったファイル名が入り、\; は -exec の終わりを表します。
まとめ
grep はファイル内容を探すコマンド、find はファイルそのものを探すコマンドです。
ログ調査、コード調査、設定ファイル確認など、Linux 作業の多くはこの 2 つを使えるだけでかなり効率化できます。