次のコマンドがあります。
maldet -b --scan-all /home?/?/public_?
なぜ私たちに疑問符が必要なのか、特に2つのパスの間に単一の疑問符が必要なのかはわかりませんでしたman maldet
。
-a, --すべてのパスを検索
パス内のすべてのファイルをスキャンします(デフォルト:/home、ワイルドカード:?)例:maldet -a /home/?/public_html
私の質問:
?
なぜと/home?
の間に追加の値を追加するのですかpublic_?
?
/home?
この質問の別のバージョンは次のとおりです。 "との組み合わせが" public_?
underのすべてのインスタンスを見つける場合、なぜそれらの間に追加の値が必要なのですか? " "。public_
/home
?
答え1
scan
Maldetが最終的に呼び出すコマンドのソースを追跡することはできませんが、Maldetは与えられたパスをコマンドにそのまま渡すので、これらのパスはワイルドカード自体としてさらに処理されると仮定しますscan
。?
この例では、ワイルドカードの想定される目標は、次のパスを収集することです。
/home/user1/public_html
/home/user2/public_ftp
しかし:
/home/public_html
...つまり、/home
または/public_html
間にパス要素が必要です/public_anything
。
maldet
ただし、次の形式のパスがあるように、コマンドのワイルドカードパスをエスケープするか、引用符で囲む必要があります。/home/(single-character)/public_(single-character)
/home/a/public_a
?
これにより、シェルは Maldet ワイルドカードコードを渡すのではなく、そのパス(または一致するパス)に展開されます。単一の文字パスが存在しない限り、引用符なしのパスによって誤って「幸運」が得られる可能性があります。これは、一致するパス(シェルで検証)がない場合は、?
-を含む文字列がMaldetコマンドに渡されるためです。一致するパスがある場合、シェルはそのパス?
に拡張され、Maldetは(あなたの)ワイルドカードを見ることができません。