web-dev-qa-db-ja.com

特定のフォルダで書き込み権限のないすべてのファイルを見つけるにはどうすればよいですか?

書き込めないすべてのファイルを見つけるにはどうすればよいですか?

標準のアクセス許可とACLを考慮に入れればよいでしょう。

「簡単な」方法はありますか、それとも自分で権限を解析する必要がありますか?

7
Alex

試す

find . ! -writable

コマンドfileはファイルを一覧表示し、-writableは、書き込み権限があるものと!フィルターを反転します

あなたは付け加えられます -type fディレクトリやその他の「特別なファイル」を無視したい場合

18
Félicien

Linux以外のシステムおよびGNU findがないシステムでは、以下はfind . -type f ! -writableと同じ出力を提供する可能性がありますが、セカンダリグループは考慮されません。

myname=$( id -un )
mygroup=$( id -gn )

find . -type f '(' \
       '('   -user "$myname"                     ! -perm -u=w ')' -o \
       '(' ! -user "$myname"   -group "$mygroup" ! -perm -g=w ')' -o \
       '(' ! -user "$myname" ! -group "$mygroup" ! -perm -o=w ')' ')'

順番に4つのテスト:

  1. 通常のファイルですか?
  2. それは私が所有しているファイルですが、書き込み権限がありませんか?
  3. それは私が所有していないファイルですが、それは自分のグループに属していて、グループに書き込み権限がないのですか?
  4. それは私が所有しておらず、自分のグループに属していないファイルであり、一般的な(「その他の」)書き込み権限を持っていないのですか?

これの利点は、別のユーザーの名前とグループで代用できることです。これはGNU find-writableでできるとは思いません。


同じコマンドですが、ロジックがAND形式で記述されています。

find . -type f \
    ! '('   -user "$myname"                     -perm -u=w ')' \
    ! '(' ! -user "$myname"   -group "$mygroup" -perm -g=w ')' \
    ! '(' ! -user "$myname" ! -group "$mygroup" -perm -o=w ')'
2
Kusalananda