私はこのコマンドを理解しようとしています。
find /home/ -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null
私はそれが「ホーム」ディレクトリのすべてのディレクトリを調べ、すべてのstderrメッセージをファイルにリダイレクトすることを知っています(これを抑制するため)。しかし、特に中間部分については混乱しています。
\( -perm -0002 -a ! -perm -1000 \)
スラッシュとはどういう意味ですか?私は! -perm -1000
、これらの権限を持たないディレクトリの検索が、これらの権限を持つディレクトリの検索を意味すると仮定します-perm -0002
。しかし、私は644形式(たとえば)の権限だけを見ることに慣れています。なぜ数字は4つですか?また、ロゴは何に使用されますか-a
?
答え1
では、-type d \( -perm -0002 -a ! -perm -1000 \)
最初にスラッシュはシェルの括弧を超えているため、シェルから特殊演算子として解釈されるのではなく、引数として渡されることがあります。 (明確な理由で同じ例を望んでいます。>
)'('
"("
find
(
)
括弧は条件をグループ化-a
し、そして接続会社。これは-type d
、明示的に連結せずにここで使用されているwithおよび括弧で囲まれた式と同様に、連続条件の暗黙的なデフォルト値でもあります-a
。この式はと全く同じです-type d -perm -0002 ! -perm -1000
。実際には括弧だけが必要です。または接続会社-o
。
-type d
明らかにファイルを見つけることを意味します。-perm -NNNN
みんな許可ビットを設定しますNNNN
。または、この場合、ディレクトリに0002
「他の人のために書く」権限セット()があり、固定ビットが設定されていません(1000
)(不正のため)。ここの組み合わせは次のように書くこともできそうです-perm -o+w ! -perm -o+t
。権限文字列の前のダッシュに注意してください。ダッシュがなければ意味が異なります。たとえば、参照してください。Linux 検索マニュアルページ、「(expr)」、「-perm モード」を探します。
ディレクトリへの書き込み権限がある場合は、そのディレクトリ内でファイルを作成、削除、および名前を変更でき、固定ビットを使用すると、他のユーザーが所有するファイルが削除または名前変更されるのを防ぎます。完全な式は、誰でもファイルを削除したり名前を変更したりできるディレクトリを探します。
答え2
内部に手動以下を見つけることができます:
Operators
Operators join together the other items within the expression.
They include for example -o (meaning logical OR) and -a
(meaning logical AND). Where an operator is missing, -a is
assumed.
したがって、文字通りの\( -perm -0002 -a ! -perm -1000 \)
意味は次のようになります。 perm = 1000の代わりにperm = 0002
perm = 0002 は、他の人が書くことができることを意味します。
perm=1000 は固定ビットがセットされたことを意味します。
したがって、この式は書き込み可能で固定ビットが設定されていない他のファイルを検索します。
ディレクトリの検索は-type d
d
ディレクトリを介して行われるため、ルックアップディレクトリタイプのオブジェクトを検索します。
検索マニュアルには-perm
いくつかの形式があります。
-perm 0002
この正確な権限設定を持つすべてのファイルと一致します。-perm -0002
正しいビットが設定されているすべてのファイルと一致します。つまり0772
、1752
組み合わせに関係なく他の人がファイルを書き込める場合を意味します。
答え3
-a
:論理ANDです(-o
ORに使用可能)。\(
、\)
:角かっこはシェルで特別な意味を持つので、スラッシュを使用してエスケープします。- 4桁の権限は、、、
sticky bit
とsetuid
関連があります。setgid