-perm -o=x をすべて見つけてください。 -perm /o=rw フォルダとフォルダのすべての親パスに「その他」に対する x 権限が必要ですか。

-perm -o=x をすべて見つけてください。 -perm /o=rw フォルダとフォルダのすべての親パスに「その他」に対する x 権限が必要ですか。

これはうまくいくかもしれませんが、sudo -u <user> test私のシステムにsudoコマンドはありません。

例えば

/a d......--x
/a/aa d......--x YES
/b d......---
/b/bb d......--x NO

root ユーザーを使用する場合、testコマンドを使用して「other」の権限を確認することはできません。私が見つけた関連質問:ファイルに対するユーザーの有効な権限のテスト

答え1

実行方法は次のとおりです。

find ./ ! -perm -o=x -prune -o \( -type d ! -perm /o=rw -perm -o=x -print \)
  • ! -perm -o=x -prune- 「他の」実行ビットがないディレクトリに移動しないでください。
  • かっこは実際には必要ではなく、明確にするために追加されました。それらがなければ、コマンドは同じように動作します。
  • -print最後に明示的な内容がない場合、findクリーンアップされたディレクトリも印刷されます(降順ではないディレクトリ、つまり「その他」実行ビットがないディレクトリ)。-print右側(クリーンアップ後)のディレクトリのみが印刷されることを明示的に保証します。

これで、このコマンドが最も確実なコマンドになります。しかし、論理的な縮小を実行してより短くする方法があります。

まず考えてみると、2番目の項目は必要ありません-perm -o=x。最初の項目が! -perm -o=x「True」(フォルダに実行ビットがないことを意味)と評価された場合、右側にも到達しません-o(論理的に最初の条件を確認した後、式全体が「True」と評価されるためです。)セクションに実行ビットがある場合にのみ、角かっこ内のセクション全体が評価されることを意味します。

最も重要なことは、-perm -o=xブラケット内の部品が重複して取り外し可能であることです。

find ./ ! -perm -o=x -prune -o \( -type d ! -perm /o=rw -print \)

-print今私が言ったように、最後が必要なのは、ジョブが-prune「True」を返し、クリーンアップされたディレクトリを印刷したくないからです。しかし!前に。を追加すると、「True」を元に戻すことができます。-pruneフォルダはまだ切り捨てられますが、結果は「False」なので印刷されません。

find ./ ! -perm -o=x ! -prune -o \( -type d ! -perm /o=rw -print \)

-printその後、最後のものはもう必要ありません。

find ./ ! -perm -o=x ! -prune -o \( -type d ! -perm /o=rw \)

先ほど述べたように、ブラケットを取り外すことができます。結果は次のとおりです。

最終短縮命令:

find ./ ! -perm -o=x ! -prune -o -type d ! -perm /o=rw

関連情報