2016-07-03 3 views
3

昨年、すべてのApacheログを調べ、特定のPHPページ(foobar.php)が外部IPアドレスからアクセスされたかどうかを調べる必要があります。Linuxサーバで正規表現を使用して "find"を使用する

したがって、すべてのLAN IP(192.168.x.x)からの訪問を除外し、foobar.phpを含むApache .logとlog.gzファイルのすべての行を見つける必要があります。

grepコマンドを実行すると検索できますか?

+1

あなたはこれまでに何を試していますか? –

+0

私は、検索された行は2つの改行の間になければならないことを理解しています。foobar.phpを含んでいて、ローカルアドレスを含んでいないはずです。find -type f -exec grep -regex "[\/"¥?n¥?(*。* foobar¥.php *)(?!。* 192¥.168¥。*)¥/ r¥/ n】" – user164863

+1

ログファイルの行を追加すると良いでしょう。質問に。 – Shafizadeh

答えて

2

:@EdMortonはコメントで指摘したように、awkは私たちが使用するためのより良いツールかもしれません動作するはずです:

zgrep -v '^192\.168\.' access.log* | grep '/foobar\.php' 
+0

興味深いことに、最初に否定的なgrepを実行すると、私は直観的なことがまずfoobarのgrepになると思っていました。 50行にfoobarが含まれ、50行に500行のファイルがあり、50行にはIPが含まれています.1行で1000行、2行目で950行(つまり1950行が検索されます)それを逆にした場合、2番目のgrepは50行だけを検索します(つまり、合計1050行が検索されます)。 –

+0

@EdMortonこのようにすることのポイントは、行頭にアンカーされた '^ 192 \ .168 \ .'にマッチすることができます。あなたの周りの別の方法は 'access.log.3.gz'と同じくらい簡単かもしれないし、そうでないかもしれないファイル名(最初の' grep'によって作成された)をスキップする必要があります。 _shrug_ –

1

これらの2つのコマンドは、すべての非圧縮と圧縮されたApacheのアクセスログに/mypage.phpを検索する必要があります

grep '/mypage\.php' access.log access.log.[0-9] | grep -v '192\.168\.[0-9.]\+'  
zcat access.log*.gz | grep '/mypage\.php' | grep -v '192\.168\.[0-9.]\+' 

grep -v192\.168\.[0-9.]*のための正規表現マッチを否定。 zcatは、gzip圧縮ファイルの場合はcatです。

編集:あなたのログは、共通ログ形式(CLF)、このようなものであると仮定すると、

awk '/\/mypage\.php/ && !/192\.168\.[0-9.]+/' access.log access.log.[0-9]  
zcat access.log*.gz | awk '/\/mypage\.php/ && !/192\.168\.[0-9.]+/' 
+1

大きなポイント;これを編集で追加しました。ありがとう! :)はい、私は '+'を意味しました。 – Will

+0

あなたのアイデアをありがとう、ありがとう、私はこの2つが好きですが、それはちょうど小さいので、私は最初の答えを受け入れました。ありがとうございました。 – user164863

+0

恐ろしいですが、問題ありません。私はあなたが受け入れた答えも好きです。私は、zgrepが非gzip形式のファイルで動作していることに気付かなかった! – Will

2

を(未テスト)このようなものは、それを行う必要があります。

find dir_where_logs_are -type f \(-name '*.log' -o -name '*.log.gz' \) -print | 
while IFS= read -r file 
do 
    case $file in 
     *.gz) zgrep 'mypage\.php' "$file" ;; 
     *) grep 'mypage\.php' "$file" ;; 
    esac 
done | 
grep -E -v '192\.168\.[0-9]+\.[0-9]+' 

上記はファイル名に改行がないことを前提としています。

+0

あなたのアイデアをありがとう、ありがとう、私はこの2つが好きです、しかし、私は最初の答えを受け入れましたが、それはちょうど小さいので。ありがとうございました。 – user164863

関連する問題