Linux で「ファイル」や「文字列」を探す際に頻出するコマンド群には、find / locate / grep などがあります。
単に “検索” と言っても、何を探すか(ファイル名・内容・属性・タイムスタンプ など)によって使うべきコマンドが変わります。
本記事では、検索コマンドの使い方、違い、実務でのよくある使い分けまで丁寧に解説します。
📚Linux学習の全体像を知りたい方へ
本記事はLinux学習の一部内容です。初心者から現場レベルまでの学習順をまとめたロードマップはこちら。
▶ Linux学習ロードマップ完全版|初心者から現場レベルまでの勉強手順とコマンド体系まとめ
目次
検索コマンドの役割と基本概念
Linux では、検索対象によって使うべきツールが異なります。
- find:ファイル名・属性・タイムスタンプ・サイズなどで細かく検索
- locate:あらかじめ作成されたデータベースを元に高速検索
- grep:ファイル内容(中身)を検索
どれも “検索” ですが使い所が違うため、適切に使い分けることが効率的かつ高速な運用につながります。
find コマンド — ファイルを細かく検索
基本構文
find [条件] [アクション]
例:ファイル名で検索
find /var/log -name "*.log"
例:大文字/小文字を無視して検索
find /etc -iname "ssh*"
例:サイズ検索(100MB以上)
find /data -size +100M
例:更新日時検索(1日以内に変更されたもの)
find /home -mtime -1
find は条件が多岐に渡るため、特定の運用条件でピンポイント検索する際に最適です。


locate — 高速検索(データベース利用)
locate は内部的にあらかじめ作られたデータベース(通常は daily cron などで更新)を使って検索するため、非常に高速に結果を返します。
基本例
locate passwd
ただし、データベースの更新が最新でない場合があるため、直近追加したファイルを確実に検索したい場合は updatedb を実行してから使います。
データベース更新
sudo updatedb

grep — ファイル内の文字列を検索
基本例
grep "error" /var/log/syslog
再帰的にディレクトリ内を検索
grep -R "timeout" /var/log
色付きで強調表示
grep --color=auto "Failed" *.log
grep は、ファイル名ではなく中身(文字列)を検索するため、ログ解析や条件指定の輪郭把握に強力です。

実務での検索コマンドの使い分け
① ファイルを探したい(名前・属性ベース)
find が最適です。条件をカスタマイズすることで、サイズ/日付/名前/種類で絞り込みができます。
② 最新のファイルを高速に探したい
locate はデータベースを使うため、条件ベースではなく単語ベースで高速に探せます。
③ ファイルの中身を探したい
grep の出番です。正規表現を組み合わせることで高度なパターン検索も可能です。
④ パイプでつなげて一気に検索
find /var/log -name "*.log" -print0 | xargs -0 grep -i "fail"
find と grep の組み合わせで、ファイルと内容をセットで検索できます。
FAQ
Q1. find と locate の違いは?
find は対象ディレクトリを逐次走査して検索するためリアルタイムに正確ですが遅い場合があります。 locate はデータベースを使うため高速ですが、更新タイミングによって古い結果になることがあります。
Q2. grep だけでファイルを探せる?
grep は文字列検索なので、中身を探せますがファイル名検索はできません。ファイル名で探したい場合は find や locate を使います。
Q3. find で最近更新されたファイルだけ探すには?find /path -mtime -n で「n日前に変更されたファイル」を探せます。
まとめ:
Linux の検索系は、「ファイル(名前/属性)」と「中身(文字列)」で使い分ける必要があります。 ファイル名ベースは find/locate、内容ベースは grep と覚え、実務ではこれらを組み合わせることで強力な検索ツールになります。



