新Linux入門|findコマンドを理解しよう!リアルタイムでファイルを検索する方法

Linuxでは、日々大量のファイルが作成・更新されます。
「特定のファイルがどこにあるのか分からない…」そんな時に頼りになるのが findコマンド です。

 locate コマンドのようにデータベースを使わず、実際のファイルシステムをリアルタイムに探索して検索するのが find の特徴です。
その分、検索速度は少し遅くなりますが、最新のファイル状況を反映した正確な検索が可能です。

ここでは、 find コマンドの使い方をわかりやすく解説します。

🔍 findコマンドとは?

find コマンドは、指定したディレクトリツリーを再帰的にたどりながら、
 ファイル名・サイズ・所有者・更新日など、さまざまな条件に一致するファイルやディレクトリを検索するコマンドです。

📘 コマンド書式

find [検索開始ディレクトリ] [検索条件] [アクション]

💬 たとえば、ホームディレクトリ以下から "example.txt" を探したい場合は:

[suzuki@AlmaLinux ~]$ find ~ -name "example.txt"

⚙️ findコマンドの主なオプション一覧

オプション説明
-nameファイル名が指定したパターンと一致するものを検索。ワイルドカード(*、?)も使用可能。
-typeファイルの種類を指定して検索(f:通常ファイル、d:ディレクトリ、l:シンボリックリンクなど)。
-sizeサイズ指定で検索。例:10k(10KB)、+1G(1GB以上)など。
-user指定した所有者のファイルを検索。
-group指定したグループに属するファイルを検索。
-mtime最終更新からの日数で検索。例:-1(24時間以内)、+7(7日より前)。
-exec検索結果に対して任意のコマンドを実行。
-perm指定したアクセス権を持つファイルを検索(例:664 → rw-rw-r--)。
-maxdepth検索の深さを制限。指定した階層までしか探索しない。

💡 ヒント

  • 「-」の後に数字を付けると「それより新しい」、
  • 「+」の後に数字を付けると「それより古い」という意味になります。
    たとえば -mtime -1 は「24時間以内に更新されたファイル」です。

📂 使い方の実例と出力解説

① ホームディレクトリ以下で "example.txt" を検索

[suzuki@AlmaLinux ~]$ find ~ -name "example.txt"
/home/suzuki/Documents/example.txt

💬 ホームディレクトリ以下を再帰的に探索し、ファイル名が "example.txt" のものを見つけます。

② /var/log 以下でサイズが1GB以上のファイルを検索

[root@AlmaLinux ~]# find /var/log -size +1G
/var/log/secure.1
/var/log/messages.2

💬 大きなログファイルの調査や、ディスク容量の確認に役立ちます。

③ /tmp 以下で今日更新されたファイルを検索

[root@AlmaLinux ~]# find /tmp -mtime -0
/tmp/session-abc123
/tmp/cache.tmp

💬 -mtime -0 は「今日(24時間以内)に更新されたファイル」を意味します。
メンテナンス作業時に「今日生成されたファイル」を確認したいときに便利です。

④ /etc 以下で所有者が root のファイルを検索

[root@AlmaLinux ~]# find /etc -user root
/etc
/etc/mtab
/etc/fstab
/etc/crypttab
/etc/lvm
/etc/lvm/devices
(省略)

💬 -user root で root が所有する設定ファイルを一覧表示。
システム管理者が権限関連を確認する際に使用します。

⑤ 検索結果に対してコマンドを実行

[root@AlmaLinux ~]# find /var/log -name "*.log" -exec ls -lh {} \;
-rw-------. 1 root root 587K 11月 20 14:17 /var/log/audit/audit.log
-rw-------. 1 root root 90 11月 20 14:13 /var/log/sssd/sssd_kcm.log
-rw-r--r--. 1 root root 18K 11月 20 14:12 /var/log/tuned/tuned.log
(省略)

💬 -exec を使うと、検索結果それぞれに対してコマンドを実行できます。
{} は検索結果を表し、\; でコマンドを終了します。

⑥ 検索の深さを制限

[suzuki@AlmaLinux ~]$ find /home/suzuki -maxdepth 1 -type f
/home/suzuki/readme.txt
/home/suzuki/test.sh

💬 -maxdepth 1 を指定すると、カレントディレクトリ直下だけを検索します。
深い階層まで調べたくないときに便利です。

⚖️ locateコマンドとの違いを整理

比較項目findlocate
検索方法実際のディスクをリアルタイムで探索事前に作成されたデータベースを参照
検索速度やや遅い(正確)非常に速い(ただし古い情報の可能性あり)
最新性常に最新の情報データベース更新まで反映されない
権限どのディレクトリでも実行可(権限があれば)一般ユーザーでも可能(範囲制限あり)

💬 「正確に探したいなら find」「素早くざっくり探したいなら locate」
この使い分けを覚えておくと便利です。

✅ まとめ

  • find は リアルタイムでファイルを探索できる強力な検索コマンド。
  • ファイル名・サイズ・権限・所有者・更新日など、柔軟に条件を指定可能。
  • -exec オプションを使えば、検索したファイルに対して処理を自動化できる。
  • locate との違いを理解し、用途に応じて使い分けることが大切。

💬 「ファイルが見つからない!」と困ったときは、find があなたの頼れる味方です。
確実で精度の高いファイル検索を行いましょう。