書き込めないファイルをすべて見つける方法は?
標準権限とACLを考慮すると良いでしょう。
「簡単」な方法はありますか?または、権限を直接解析する必要がありますか?
答え1
努力する
find . ! -writable
このコマンドはfind
ファイルのリストを返し、書き込み-writable
権限を持つファイルのみをフィルタリングしてから!
フィルタを元に戻します。
-type f
ディレクトリやその他の「特殊ファイル」を無視するには、追加できます。
答え2
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つのテストを順番に実行します。
- 一般的なファイルですか?
- 私が所有しているが書き込み権限を持たないファイルですか?
- 私の所有ではありませんが、私のグループに属し、グループへの書き込み権限を持たないファイルですか?
- 私が所有していないファイルで、私のグループの一部ではなく、一般(「その他」)書き込み権限を持たないファイルですか?
これの利点は、他のユーザーの名前とグループを変更できることです。しかし、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 ')'