「ログファイルを探したいけど、どのディレクトリにあるかわからない」
Linuxを使い始めた頃、ファイルを探すたびにディレクトリを手作業でたどっていた方は多いはずです。Windows ならエクスプローラーで視覚的に探せますが、コマンドラインでは「どこにあるか」を自分で調べる必要があります。そこで役立つのが
find コマンドです。この記事では、20年以上Linuxサーバーを運用してきた立場から、
find コマンドの基本的な使い方を、Windows/IT未経験者にもわかるように解説します。名前で探す・種類で探す・日時で探す、といった場面別の使い方から、よくあるエラーの対処法まで一通り押さえます。この記事のポイント
・find コマンドは「どのディレクトリ以下を」「どんな条件で」探すかを指定する
・名前検索は -name、ファイル種類は -type、更新日時は -mtime で絞り込む
・「Permission denied」は一般ユーザーでは正常。エラーを読み飛ばすには 2>/dev/null を使う
・-exec オプションを使えば、見つけたファイルにそのままコマンドを実行できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
find コマンドとは何か?
find は、指定したディレクトリの中を再帰的に(サブディレクトリを含めて全て)検索するコマンドです。「ファイル名がわかっている」「拡張子が .log のファイルをまとめて探したい」「3日以内に更新されたファイルだけ確認したい」など、様々な条件で絞り込めるのが特徴です。Windowsの「エクスプローラーの検索ボックス」に相当する機能ですが、コマンドラインで使うため、検索結果を他のコマンドにパイプで渡したり、見つかったファイルに一括操作したりと、応用範囲が格段に広がります。
1. 基本的な構文
find の基本形はシンプルです。# 基本構文 find 検索開始ディレクトリ 検索条件 # 例: /home以下を全て表示(条件なし) $ find /home /home/tomohiro /home/tomohiro/.bashrc /home/tomohiro/.bash_history /home/tomohiro/projects /home/tomohiro/projects/server-setup.sh
2. 「.」「/」「~」の意味
find の第一引数によく出てくる記号の意味です。| 記号 | 意味 | 使用例 |
|---|---|---|
| . | カレントディレクトリ(今いる場所) | find . -name "*.sh" |
| / | システムルート(全ディレクトリが対象) | find / -name "httpd.conf" |
| ~ | ホームディレクトリ | find ~ -name "*.txt" |
| /var/log | 絶対パスで検索開始点を指定 | find /var/log -name "*.log" |
/(ルート)から探すと、全てのディレクトリが対象になるので時間がかかります。なるべく検索範囲を絞る(/var/log や ~ など)のが実務のコツです。名前でファイルを探す(-name オプション)
最もよく使う検索条件が-name です。ファイル名や拡張子で絞り込みます。1. 完全一致で探す
# "httpd.conf" というファイルを / 以下から探す $ find / -name "httpd.conf" /etc/httpd/conf/httpd.conf # カレントディレクトリ以下で "server.py" を探す $ find . -name "server.py" ./projects/web/server.py
2. ワイルドカードで拡張子検索
「*.log」のように*(ゼロ個以上の任意の文字)を使ったワイルドカード検索が非常に便利です。# /var/log 以下の .log ファイルを全て探す $ find /var/log -name "*.log" /var/log/messages /var/log/secure /var/log/maillog /var/log/httpd/access_log # ホームディレクトリ以下の .sh ファイルを全て探す $ find ~ -name "*.sh" /home/tomohiro/scripts/backup.sh /home/tomohiro/scripts/deploy.sh
3. 大文字小文字を区別しない検索(-iname)
-name は大文字小文字を区別します。区別せずに検索したい場合は -iname を使います。# README, Readme, readme いずれもヒットする $ find . -iname "readme*" ./README.md ./docs/Readme.txt
ファイルの種類で絞り込む(-type オプション)
-type を使うと、ファイルなのかディレクトリなのかで絞り込めます。1. -type の主な値
| 値 | 意味 | 使用例 |
|---|---|---|
| f | 通常ファイル | find . -type f -name "*.txt" |
| d | ディレクトリ | find /var -type d -name "log*" |
| l | シンボリックリンク | find /usr/bin -type l |
2. ファイルのみ・ディレクトリのみを検索する
# カレントディレクトリ以下の .conf ファイル(通常ファイルのみ) $ find /etc -type f -name "*.conf" /etc/httpd/conf/httpd.conf /etc/sysctl.conf /etc/nsswitch.conf # "backup" という名前のディレクトリだけを探す $ find / -type d -name "backup" /var/backup /home/tomohiro/backup
-type f を付けることで、ディレクトリと同じ名前のファイルも混在する場合に正確に絞り込めます。更新日時で絞り込む(-mtime オプション)
トラブル対応時に「最近変更されたファイルだけ確認したい」という場面は頻繁にあります。-mtime が便利です。1. -mtime の読み方
-mtime n は「n日前に更新されたファイル」を指します。+ と - の使い方に注意が必要です。| やりたいこと | コマンド例 |
|---|---|
| 24時間以内に更新されたファイルを検索 | find . -mtime 0 |
| 3日以内に更新されたファイルを検索(マイナスは「以内」) | find /etc -mtime -3 |
| 7日より前に更新されたファイルを検索(プラスは「より前」) | find /var/log -mtime +7 |
2. 実際の使用例
# /etc 以下で3日以内に更新されたファイルを確認(設定変更の追跡) $ find /etc -type f -mtime -3 /etc/httpd/conf/httpd.conf /etc/hosts # /var/log 以下で7日より前のログファイルを一覧表示 $ find /var/log -type f -mtime +7 /var/log/messages-20260421 /var/log/secure-20260421
find /etc -mtime -1 で昨日以降の変更ファイルを洗い出すのは、現場でよく使うパターンです。ファイルサイズで絞り込む(-size オプション)
ディスクを圧迫している大きなファイルを探したいときは-size が役立ちます。1. -size の単位と書き方
# 100MBより大きいファイルを / 以下から探す $ find / -type f -size +100M /var/log/messages /home/tomohiro/backup/archive.tar.gz # 0バイトの空ファイルを探す $ find /tmp -type f -size 0 /tmp/empty.log
c(バイト)、k(キロバイト)、M(メガバイト)、G(ギガバイト)が使えます。ディスクがあふれそうな時の原因ファイル特定に重宝します。見つけたファイルにコマンドを実行する(-exec オプション)
find の真価は、検索結果に対してそのままコマンドを実行できる点にあります。-exec オプションがその機能を担います。1. -exec の構文
find 検索ディレクトリ 検索条件 -exec 実行コマンド {} \;
{} は「find が見つけたファイル1件」を表すプレースホルダです。末尾の \; はコマンドの終わりを示します。2. 実際の使用例
# カレントディレクトリ以下の .sh ファイルに実行権限を付与 $ find . -type f -name "*.sh" -exec chmod +x {} \; # 30日以上前の .log ファイルを削除(削除前に確認したい場合は -print を先に使う) $ find /var/log -type f -name "*.log" -mtime +30 -exec rm {} \; # 見つかったファイルの詳細情報(ls -la)を表示 $ find /etc -type f -name "*.conf" -exec ls -la {} \; -rw-r--r-- 1 root root 12054 4月 15 09:22 /etc/httpd/conf/httpd.conf -rw-r--r-- 1 root root 2381 4月 10 14:05 /etc/sysctl.conf
-exec rm は削除操作なので、実行前に必ず -print や ls で対象ファイルを確認してください。間違ったファイルを消すと取り返しがつきません。よくあるエラーと対処法
1. 「Permission denied」が大量に出る時の対処法
$ find / -name "httpd.conf" find: '/proc/1234': Permission denied find: '/root': Permission denied /etc/httpd/conf/httpd.conf
/(ルート)や /root などを検索すると、権限のないディレクトリで「Permission denied」が表示されます。これは正常な動作ですが、大量に出ると見づらいです。エラーメッセージだけを除外するには以下を使います。# エラーメッセージを捨てて検索結果だけ表示 $ find / -name "httpd.conf" 2>/dev/null /etc/httpd/conf/httpd.conf
2>/dev/null は「標準エラー(エラーメッセージ)を /dev/null(ゴミ箱)に捨てる」という意味です。検索結果(標準出力)はそのまま画面に表示されます。2. 「No such file or directory」が出た時の対処法
$ find /var/www -name "index.html" find: '/var/www': No such file or directory
ls でパスが正しいか確認してください。# ディレクトリが本当に存在するか確認 $ ls /var/ backups cache lib local lock log mail opt run spool tmp
3. ワイルドカードが効かない時の対処法
* を引用符で囲まない場合、シェルが先にワイルドカードを展開してしまい、意図しない動作になることがあります。# NG: シェルが *.log を展開してしまう場合がある $ find /var/log -name *.log # OK: クォートで囲んで find に渡す $ find /var/log -name "*.log"
-name の引数は必ずクォートで囲む習慣をつけてください。本記事のまとめ
find コマンドは「どこを探すか」「何を探すか」の2つを組み合わせるだけで、ほとんどの検索ニーズに対応できます。まずは名前検索と種類検索の基本形を覚えてください。| やりたいこと | コマンド例 |
|---|---|
| 名前でファイルを探す | find /etc -name "httpd.conf" |
| 拡張子でまとめて探す | find /var/log -name "*.log" |
| ファイルのみを対象に探す | find . -type f -name "*.sh" |
| 最近更新されたファイルを探す | find /etc -type f -mtime -3 |
| 大きなファイルを探す | find / -type f -size +100M |
| エラーメッセージを除外して検索 | find / -name "httpd.conf" 2>/dev/null |
| 見つけたファイルに権限を付与 | find . -name "*.sh" -exec chmod +x {} \; |
find を使えるようになると、「あのファイルがどこにあるかわからない」という状態から卒業できます。次のステップとして、grep と組み合わせて「ファイルの中身まで検索する」方法も覚えると、ログ解析やトラブル調査のスピードが一気に上がります。次に読みたい関連記事(実務スキル習得フェーズ)
ファイル検索の基本がわかったら、次は実務で頻繁に使うコマンドの習得に進みましょう。以下の7テーマでは、本サイトで解説している実務スキルの入り口を紹介しています。・シェルスクリプト:シェルスクリプトカテゴリの記事一覧 — find と組み合わせたファイル一括処理スクリプトを書けるようになろう
・Linuxセキュリティ設定:セキュリティカテゴリの記事一覧 — パーミッション・SSH・ファイアウォールの基礎を固める
・サーバー構築ハンズオン:Linuxサーバー構築(Rocky Linux/RHEL9)カテゴリ — 現行OSで本番相当のサーバーを組む
・トラブルシューティング:Linuxトラブルシューティングカテゴリ — 「動かない」を自分で解決する力を養う
・ネットワーク診断・設定:ネットワークカテゴリの記事一覧 — ping・ss・nmcliで通信を確かめる
・ファイルシステム・ストレージ管理:ディスク操作カテゴリの記事一覧 — マウント・fstab・df/duを使いこなす
・現場コラム系:Linuxtipsカテゴリの記事一覧 — 20年以上の現場経験から生まれた実践Tips
また、本サイト運営者の宮崎は、15年間で3,100名以上にLinuxを教えてきた教育のプロです。無料メルマガでは、ブログには書かない現場のリアルな知見や、セミナー受講生限定のマニュアル情報を配信しています。Linux学習の挫折を防ぎたい方は、ぜひメルマガ登録もご検討ください。
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンド学習の先にある「サーバーをゼロから組み立てる力」を、初心者が迷わない順序で学べる一冊です。
無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxのアーカイブ・圧縮入門|tarコマンドでファイルをまとめる方法を初心者向けに解説
- 前のページへ:Linuxシェルスクリプト入門|初心者でも動かせる自動化の第一歩
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます