Konuyu Açan
#1
find ile günlük filtreleme: pratik yaklaşım ve örnekler
Günlük dosyalarını hızlıca bulmak veya belirli koşullara göre listelemek, sistem yöneticileri ve geliştiriciler için sık karşılaşılan bir görevdir. Özellikle log dizinlerinde zamanla büyüyen dosyaları hariç tutmak veya sadece son 24 saat içinde değiştirilmiş dosyaları izlemek için find komutunun sunduğu esneklik önemlidir. Aşağıda işin ana hatlarını, somut örneklerle adım adım ele alıyorum.
Günlük filtresiyle ilgili pratik bir yaklaşım, amaca uygun filtreleri zincirleyip ortak bir komut akışı oluşturmaktır. Örneğin son 24 saat içinde değişen günlükleri incelemek ve çıktılarını başka bir işleme yönlendirmek şu şekilde olabilir:
Bu konu sizin için hangi senaryoda daha faydalı oldu? Özellikle güvenlik odaklı denetimler veya kapanış zamanlı arşiv süreçlerinde hangi kombinasyonları kullanıyorsunuz?
Günlük dosyalarını hızlıca bulmak veya belirli koşullara göre listelemek, sistem yöneticileri ve geliştiriciler için sık karşılaşılan bir görevdir. Özellikle log dizinlerinde zamanla büyüyen dosyaları hariç tutmak veya sadece son 24 saat içinde değiştirilmiş dosyaları izlemek için find komutunun sunduğu esneklik önemlidir. Aşağıda işin ana hatlarını, somut örneklerle adım adım ele alıyorum.
- Temel zaman bazlı filtreler: -mtime, -ctime, -atime
- -mtime n: Dosyanın son değiştirilme zamanı n gün önce şeklinde
- -mtime +n: n günden daha eski
- -mtime -n: son n gün içinde değişen
Bu filtreler günlükleri hedef alırken sıklıkla kullanılır. Örneğin son 1 gün içinde değiştirilmiş günlükleri bulmak için:
KOD1
find /var/log -type f -mtime -1 -print
- Dosya tipi ve isim tabanlı filtreler
- -type f sadece dosyalar
- -name '*.log' belirli uzantılı dosyalar
- -iname '*.log' büyük/küçük harfe duyarsız
Birleşik kullanım örneği:
KOD1
find /var/log -type f -iname '*.log' -mtime -2 -print
- Sınırlandırılmış aralık ve eşleşmeler
- -newer référence_file ile karşılaştırma
- -size +1M gibi boyut filtreleri
Logları boyutuna göre incelemek için:
KOD1
find /var/log -type f -name '*.log' -size +5M -mtime -7 -print
- İşlevsel işlemlerle birleşim
- -exec komutu ile bulunduğu yere özel işlem
Örneğin 7 gün önce oluşturulmuş log dosyalarını arayıp silmek (dikkatli kullanım):
KOD1
find /var/log -type f -name '*.log' -mtime +7 -exec rm -f {} \;
- Performans ve güvenlik ipuçları
- Köklü dosya yapılarında tarama maliyeti yüksek olabilir; gerekiyorsa -maxdepth ile derinliği sınırlayın
- Bazı sistemlerde kernel zamanları NTP ile senkronize udır; bu yüzden -mtime hesapları zaman dilimine bağlı olabilir
- Yetkiler nedeniyle bazı dizinler taranamayabilir; hata çıktısını bastırmak için 2>/dev/null ekleyebilirsiniz
Günlük filtresiyle ilgili pratik bir yaklaşım, amaca uygun filtreleri zincirleyip ortak bir komut akışı oluşturmaktır. Örneğin son 24 saat içinde değişen günlükleri incelemek ve çıktılarını başka bir işleme yönlendirmek şu şekilde olabilir:
KOD
1find /var/log -type f -mtime -1 -print0 | xargs -0 -I{} you-processor "{}"Bu konu sizin için hangi senaryoda daha faydalı oldu? Özellikle güvenlik odaklı denetimler veya kapanış zamanlı arşiv süreçlerinde hangi kombinasyonları kullanıyorsunuz?
