Fail2ban刑務所のファイル名を一致させようとしているので、正規表現やbashスクリプトではなく、ファイル名のグロビングのみを使用する必要があります。
私の_/var/log/Apache2
_ディレクトリには、次のファイルが含まれています。
_example.com.error.log
db.example.com.error.log
app1.example.com.error.log
app2.example.com.error.log
_
_.error.log
_で終わるすべてのファイルに一致するグロブを作成しようとしていますexcept _db.example.error.log
_-これは可能ですか?
私は!(db)*.error.log
を試しましたが、これは_db.example.com.error.log
_とまだ一致します。 !()
が文字に一致しないため、ファイル名の先頭から_*
_を一致させることができると思います。
注:新しいappX
ログファイルが追加されたときにグロブを拡張する必要がないので、現在既知の非DBファイル名のリストで@()
を使用できません。
(背景:任意のドメインのphpMyAdmin URLをリクエストするユーザーを禁止するフィルターを作成したいexcept db.example.com)
拡張ファイル名のグロビングパターン(bash
シェルオプションをアクティブにしたextglob
と、_ksh93
_でサポート)
_!(db*).error.log
_
db
で始まるものはすべて無視されます。
もう少し詳しく言うと:
_!(db.example.com).error.log
_
これにより、現在のディレクトリにある、_db.example.com
_で始まる名前は無視されます。
!(db.example.com)
パターンは、文字列_*
_と一致しない「特別な_db.example.com
_」のように機能します。
あなたのパターン、
_!(db)*.error.log
_
db
で始まる名前は除外しますが、その後にany文字列を許可します。これには明らかにdb
が含まれます。
上記と同じように、!(db)
は「_*
_」のように動作しますが、正確な文字列db
とは一致しないため、パターン_**.error.log
_が残ります- いわば(最初の_*
_は「特別」です)。