2011-11-17 29 views
13

Belirli şüpheli kalıpları (SQL enjeksiyonları gibi) aramak için Apache günlük dosyasını ayrıştırmam gerekiyor. Apache grep büyük günlük dosyası

Mesela ben bu desen (ve diğerleri) için günlük dosyasını kontrol etmek için grep kullanıyorum id='%20or%201=1;

arıyorum ve bu günlükleri çok büyük çünkü

İşte uzun bir miktarda alır komuta:

grep 'id=' Apache.log | egrep "' or|'%20" 

Ben daha hızlı arama yapmak için kullanabilirsiniz ihtiyaç daha iyi veya daha hızlı bir yöntem veya komut var mı?

cevap

22

Yeni başlayanlar için, grep çıktınızı egrep ürününe aktarmanız gerekmez.

egrep "id='(or|%20)'" apache.log 

egrepgrep -E arayarak aynıdır çağrılması: sadece bunu yapabilirsiniz, böylece egrep, ayrıştırma grep 'ın normal ifadenin bir üst sağlar.

Bu size küçük bir performans artışı sağlayabilir. Düzenli ifadeler yerine sabit dizeleri arayabilirseniz, bu da yardımcı olabilir. Sen -F seçeneğiyle sabit dize aramaya grep söyleyebilir:

grep -F "id='%20or" apache.log 

Ama kullanarak sabit dizeleri size bir esneklik kaybeder.

+0

bu – aki

+0

denememe izin verin kodumdan 21 dakika daha az sürdü – aki

0

Veriden veri alırken çoğu zaman harcanır (CPU kullanımı azami değil). Ardından sorguyu optimize edemezsiniz. Ancak ilginç satırları ayrı bir dosyada günlüğe kaydetmeye çalışabilirsiniz.

0

grep -E "id=(' or|'%20)" apache.log mi arıyorsunuz?