.htaccess
Apacheを含むブロックされたdeny from all
Webサーバー上のすべてのディレクトリを一覧表示しようとしています。ブロックリストを取得しましたが、次のように.htaccess
ディレクトリパスを抽出しようとすると、dirname
いくつかのエラーが発生します。
ファイルリスト
.htaccess
:find . -type f -name ".htaccess" ./.htaccess ./config/.htaccess ./files/.htaccess ./plugins/webservices/.htaccess ./plugins/webservices/scripts/.htaccess ./install/mysql/.htaccess ./scripts/.htaccess ./locales/.htaccess
ブロックされたファイルのリスト
.htaccess
:find . -type f -name ".htaccess" -exec sh -c "grep -Eli '^deny from all$' '{}'" \; ./config/.htaccess ./files/.htaccess ./plugins/webservices/scripts/.htaccess ./install/mysql/.htaccess ./scripts/.htaccess ./locales/.htaccess
間違いは間違いです。 2.と同じリストですが、含まれているディレクトリを取得するには、
xargs
とを使用します。dirname
find . -type f -name ".htaccess" -exec sh -c "grep -Eli '^deny from all$' '{}' | xargs dirname" \; dirname: missing operand Try dirname --help' for more information ./config ./files dirname: missing operand Try dirname --help' for more information ./plugins/webservices/scripts ./install/mysql ./scripts ./locales
リスト3のデバッグを試みる:2つのエラーがある2つの空行を見ることができます。
find . -type f -name ".htaccess" -exec sh -c "grep -Eli '^deny from all$' '{}' | xargs echo" \; ./config/.htaccess ./files/.htaccess ./plugins/webservices/scripts/.htaccess ./install/mysql/.htaccess ./scripts/.htaccess ./locales/.htaccess
これらの2つの空行は、対応するファイルが.htaccess
含まれていないため、無視される2つのファイルとはっきりと一致しますdeny from all
。リスト 3 と 4 では、これらの内容が表示されているが、2 では表示されない理由を理解できません。
ベストアンサー1
grepが一致しないときにxargsに何も渡さないので失敗します。
たとえば、
find
を受けて./.htaccess
電話してください-exec
。grep
ファイルのどの項目とも一致しないため、何も出力されません。xargs
dirname
パラメータなしで起動されたので、悪用されているdirname
と思ってヘルプメッセージを表示しました。
これを行う正しい方法は次のとおりです。
find . -type f -name .htaccess -exec grep -iq '^deny from all$' {} \; -printf '%h\n'