find コマンドで Permission denied が大量に出るときの抑制方法

  • URLをコピーしました!

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
  • これにより、権限のないファイルはスキップされます。

まとめ

  • findPermission denied が大量に出るのは、アクセス権のないディレクトリを探索しているため。
  • 対処法は以下の通り:
    • 2>/dev/null でエラーを捨てる
    • sudo で権限を昇格させる
    • 検索範囲を絞る
    • -readable オプションを活用する

検索の目的に応じて、最適な方法を選んで使い分けましょう。

目次