Linuxで find
コマンドを使ってファイル検索をしていると、以下のように Permission denied
が大量に表示されてしまうことがあります。
find / -name test.txt
find: ‘/root’: Permission denied
find: ‘/var/log/audit’: Permission denied
...
検索結果がエラーで埋もれてしまい、本当に欲しい結果が見つけにくい状況です。
ここでは、Permission denied
を抑制・回避する方法を解説します。
目次
原因
find
は指定したディレクトリ以下を再帰的に探索するため、一般ユーザーでは権限がないディレクトリにもアクセスを試みます。- その結果として、
Permission denied
が標準エラー出力に出力されます。
解決方法
1. 標準エラー出力を捨てる
一番シンプルな方法は、2>/dev/null
を使ってエラーメッセージを無視する方法です。
find / -name "test.txt" 2>/dev/null
2>
は標準エラー出力のリダイレクトを意味します。/dev/null
に捨てることで、不要なエラーメッセージが表示されなくなります。
2. 権限があるユーザーで実行する(sudo)
root 権限が必要なディレクトリを検索したい場合は sudo
を付けます。
sudo find / -name "test.txt"
- root 権限で実行するため、
Permission denied
が大幅に減ります。 - ただし セキュリティ上のリスクがあるので、安易に全検索するのは避けましょう。
3. アクセス可能なディレクトリだけ検索する
検索対象を /home
や /etc
など権限がある範囲に限定すれば、エラーは抑制できます。
find /home /etc -name "test.txt" 2>/dev/null
- 探したいファイルの所在がある程度わかっている場合は、この方法が効率的です。
4. -readable
オプションを使う
GNU findutils では、ユーザーが読み取れるファイルだけを対象にする -readable
オプションが使えます。
find / -readable -name "test.txt" 2>/dev/null
- これにより、権限のないファイルはスキップされます。
まとめ
find
でPermission denied
が大量に出るのは、アクセス権のないディレクトリを探索しているため。- 対処法は以下の通り:
2>/dev/null
でエラーを捨てるsudo
で権限を昇格させる- 検索範囲を絞る
-readable
オプションを活用する
検索の目的に応じて、最適な方法を選んで使い分けましょう。