Konuyu Açan
#1
Find ile Dosya Envanteri
Birincil kullanımlar ve temel mantık
Tipik örnekler
find /var/log -type f -print
find / -type f -mtime -30 -printf "%p\t%TD %TT\n"
find / -type f -size +1M -size -100M -printf "%p\t%kKB\n"
find /var/log -type f -name "*.log" -print
find /home -path "/home/*/.cache" -prune -o -type f -size +1G -print
Performans ve güvenlik ipuçları
İleri düzey teknikler
Sonuç olarak, find ile dosya envanteri, ihtiyaca göre esnek ve güdümlü bir şekilde üretilir. İstersen farklı filtreleri bir araya getirerek kendi kurallarını içeren bir envanter şablonu oluşturalım; hangi kriterleri önceliklendiriyorsun?
Günlük sistem yönetiminde, sunucularda veya geliştirici makinelerinde dosya envanteri tutmak çoğu zaman temel bir ihtiyaçtır: hangi klasörde hangi dosyalar, hangi boyutta, son değiştirilme tarihi nedir? Bu tür bir envanteri çıkarmak için find komutunun esnek filtreleme gücü tam olarak iş görüyor. Aşağıda, farklı senaryolara göre pratik ve güvenilir bir yaklaşım zincirini paylaşıyorum; her adım, gerçek dünyadaki karşılaşılabilir durumları düşünerek tasarlandı.
Birincil kullanımlar ve temel mantık
- find komutu, bir dizin ağacını kökünden başlayarak tarar ve eşleşen dosya veya dizinleri yazdırır. Varsayılanda sadece adları verir; ancak -printf, -exec veya -ls gibi seçeneklerle çıktı içeriğini zenginleştirmek mümkün.
- Dosya envanterini çıkarmak için şu temel soruları yanıtlayan bir dizi filtre oluşturulur: dosya türü (regular, directory, symlink), boyut aralığı, son değiştirilme zamanı, sahiplik ve izinler, uzantılar veya ad kalıpları.
Tipik örnekler
- Belirli bir klasördeki tüm dosyaları, türüne bakılmaksızın listelemek:
find /var/log -type f -print
- Son 30 günde değiştirilmiş dosyalar:
find / -type f -mtime -30 -printf "%p\t%TD %TT\n"
- Büyüklüğüne göre filtreleme (ör. 1MB ile 100MB arasındaki dosyalar):
find / -type f -size +1M -size -100M -printf "%p\t%kKB\n"
- Belirli uzantıya sahip dosyalar (ör. .log):
find /var/log -type f -name "*.log" -print
- Büyük boyutlu dosyaların en az 1GB olanlarını tek bir liste halinde toparlamak ve sürüm kontrol dizinine özel dizinleri hariç tutmak:
find /home -path "/home/*/.cache" -prune -o -type f -size +1G -print
Performans ve güvenlik ipuçları
- Tarama hacmi büyük dosya sistemlerinde -prune kullanımıyla gereksiz alt ağaçları atlamak, tarama süresini önemli ölçüde azaltır.
- Yalnızca gerekli kök dizinini hedeflemek, izinler nedeniyle erişilemeyen dizinleri görmezden gelmek için önemlidir; örn. sudo kullanılmalıysa güvenli bir şekilde düşünülmelidir.
- -printf çıktısını özelleştirerek hem boyut hem sahiplik, izinler ve değiştirme tarihi gibi meta verileri tek satırda toplayın: "%p\t%kKB\t%u\t%G\t%TY-%TM-%TD %TH:%TM:%TS\n".
İleri düzey teknikler
- Çıktıyı CSV benzeri bir formata dönüştürmek: find / -type f -printf "%p,%s,%TY-%TM-%TD %TH:%TM:%TS\n" > envanter.csv
- Belirli bir kullanıcıya ait dosyaları toplamak: find / -type f -user alice -printf "%p\n"
- Çoklu kriter birleşimleri: ( -name ".conf" -o -name ".cfg" ) -and -mtime -90
Sonuç olarak, find ile dosya envanteri, ihtiyaca göre esnek ve güdümlü bir şekilde üretilir. İstersen farklı filtreleri bir araya getirerek kendi kurallarını içeren bir envanter şablonu oluşturalım; hangi kriterleri önceliklendiriyorsun?
