Sunucu Yönetimi & Linux

    find ile Dosya ve Klasör Arama

    find komutuyla ölçüte göre dosya bulup üzerinde toplu işlem yapmanın ve disk temizliğinin pratik rehberi.

    12 dk okuma Güncellendi: 10 Temmuz 2026

    Bir sunucuda saatlerce süren bir sorunu çözerken çoğu zaman asıl mesele tek bir dosyayı bulmaktır: geçen ay birikmiş dev bir log, yanlış izinlerle yüklenmiş bir yapılandırma dosyası ya da diski dolduran ama nerede olduğu belli olmayan yedek arşivleri. Grafik arayüzü olmayan bir Linux sunucusunda bu dosyaları tek tek cd ve ls ile aramaya kalkarsanız akşamı bulursunuz. İşte find komutu tam da burada devreye girer; dosya sistemini yukarıdan aşağıya tarayıp isim, boyut, tarih, tür ve izin gibi ölçütlere uyanları saniyeler içinde önünüze getirir ve isterseniz bulduklarının üzerinde doğrudan işlem yapar.

    Bu rehberde find komutunu sıfırdan, gerçek sunucu senaryoları üzerinden ele alacağız. Önce komutun mantığını ve söz dizimini oturtacak, ardından isim, tür, boyut, tarih ve izin ölçütlerini tek tek örneklerle işleyeceğiz. Sonra bulunan dosyaların üzerinde -exec ve xargs ile toplu işlem yapmayı, eski logları güvenli biçimde silmeyi ve diski şişiren büyük dosyaları tespit etmeyi göstereceğiz. Silme işlemleri geri dönüşü olmayan sonuçlar doğurabildiği için, her adımda hangi dizinde ne aradığınızı kontrol etmenizi sağlayacak güvenli bir çalışma alışkanlığını da baştan sona vurgulayacağız.

    find Komutunun Mantığı ve Söz Dizimi#

    find komutunun söz dizimi ilk bakışta diğer komutlardan biraz farklıdır ve bu farkı kavramak, gerisini çok kolaylaştırır. Genel yapı şöyledir:

    find [aranacak_dizin] [ölçüt] [işlem]
    

    Yani önce nerede arayacağınızı, sonra hangi koşula uyanları bulacağınızı, en sonda da bulunanlarla ne yapacağınızı söylersiniz. En sade haliyle, bulunduğunuz dizin ve altındaki her şeyi listelemek için nokta yeterlidir:

    find .
    

    Buradaki nokta "içinde bulunduğum dizin" anlamına gelir. find /var/www derseniz aramayı yalnızca o dizinle sınırlarsınız; find / derseniz tüm dosya sistemini tararsınız ki bu büyük sunucularda uzun sürer ve gereksiz yük bindirir. Kapsamı her zaman mümkün olan en dar dizinle sınırlamak hem hızlı sonuç almanın hem de yanlışlıkla sistem dosyalarına dokunmamanın ilk kuralıdır.

    find özyinelemeli (recursive) çalışır: verdiğiniz dizinin altındaki tüm alt klasörlere kendiliğinden iner. Bu davranışı sınırlamak isterseniz -maxdepth ile kaç kademe derine ineceğini belirtebilirsiniz:

    # Sadece geçerli dizin, alt klasörlere inme
    find . -maxdepth 1 -name "*.conf"
    

    Ölçüt vermezseniz find bulduğu her şeyi listeler. Ölçütleri birbirine eklediğinizde ise aralarında varsayılan olarak "ve" (AND) mantığı çalışır; yani tüm koşullara birden uyan dosyalar gelir. Terminal komutlarının genel mantığına henüz aşina değilseniz, önce temel Linux komutları rehberimizle zemini sağlamlaştırmanızı öneririz.

    İsme Göre Arama: -name ve -iname#

    En sık kullanacağınız ölçüt, dosyayı adına göre bulmaktır. Bunun için -name seçeneğini kullanırsınız:

    find /var/www -name "wp-config.php"
    

    Bu komut /var/www altındaki tüm WordPress yapılandırma dosyalarını bulur. İsimde joker karakter kullanmak için * (herhangi bir karakter dizisi) ve ? (tek karakter) kalıplarından yararlanabilirsiniz. Ancak burada kritik bir ayrıntı var: joker içeren kalıbı mutlaka tırnak içine alın. Aksi halde kabuk (shell) yıldızı find'a ulaşmadan kendi genişletir ve komut beklenmedik biçimde çalışır.

    # Tüm .log uzantılı dosyalar
    find /var/log -name "*.log"
    
    # 2024 ile başlayan tüm yedek dosyaları
    find /backups -name "2024*"
    

    Büyük-küçük harf duyarlılığı Linux'ta her zaman geçerlidir; Rapor.PDF ile rapor.pdf farklı iki dosyadır. Harf duyarlılığını görmezden gelmek isterseniz -iname kullanın:

    # README, readme, ReadMe hepsini bulur
    find . -iname "readme*"
    

    Yol içinde arama yapmak isterseniz -path seçeneği işinizi görür; örneğin belirli bir alt klasördeki dosyaları hedeflemek için idealdir. Aramanın dışında bırakmak istediğiniz bir dizin varsa -not -path ile eleyebilirsiniz:

    # node_modules hariç tüm .js dosyaları
    find . -name "*.js" -not -path "*/node_modules/*"
    

    Türe ve Boyuta Göre Filtreleme: -type ve -size#

    Bazen aradığınız şey bir dosya değil, bir klasördür; ya da tam tersi. -type seçeneği sonucu türe göre daraltır. En çok kullanılan değerler şunlardır:

    DeğerAnlamı
    fNormal dosya
    dDizin (klasör)
    lSembolik bağ (symlink)
    sSoket
    pAdlandırılmış boru (pipe)

    Örneğin yalnızca boş klasörleri bulup listelemek için türü dizinle sınırlarsınız:

    # Boş dizinleri bul
    find /var/www -type d -empty
    
    # Sadece dosyaları listele, klasörleri atla
    find . -type f -name "*.php"
    

    Boyuta göre arama, disk dolduğunda hayat kurtaran ölçüttür. -size seçeneği ile bir eşik belirlersiniz. Birim harfleri şöyledir: c bayt, k kilobayt, M megabayt, G gigabayt. Sayının başına + koyarsanız "bundan büyük", - koyarsanız "bundan küçük", hiçbir işaret koymazsanız "tam olarak bu boyutta" anlamına gelir.

    # 100 MB'tan büyük dosyalar
    find / -type f -size +100M
    
    # 10 KB'tan küçük dosyalar
    find /tmp -type f -size -10k
    
    # Boyutu tam 0 olan (boş) dosyalar
    find . -type f -size 0
    

    Bu ölçütleri birleştirdiğinizde çok güçlü sorgular kurabilirsiniz. Örneğin bir web sunucusunda yüklenmiş, olağandışı biçimde büyük görselleri avlamak için tür, boyut ve isim ölçütlerini üst üste bindirebilirsiniz:

    find /var/www -type f -size +5M -iname "*.jpg"
    

    Tarihe ve İzne Göre Arama: -mtime ve -perm#

    Dosyaları son değiştirilme tarihine göre süzmek, hem eski verileri temizlerken hem de "bu dizinde son 24 saatte ne değişti" sorusunu yanıtlarken paha biçilmezdir. En çok kullanılan üç zaman ölçütü şunlardır:

    ÖlçütNeyi ölçer
    -mtimeİçeriğin son değiştirilme zamanı (gün)
    -mminİçeriğin son değiştirilme zamanı (dakika)
    -atimeSon erişim zamanı (gün)

    -mtime değerinde gün mantığı biraz kafa karıştırıcıdır: -mtime +7 "7 günden daha eski", -mtime -7 "son 7 gün içinde", -mtime 7 ise "tam 7 gün önce" değiştirilen dosyalar demektir.

    # 30 günden eski log dosyaları
    find /var/log -type f -name "*.log" -mtime +30
    
    # Son 1 saatte değişen dosyalar
    find /var/www -type f -mmin -60
    
    # Bugün değiştirilen tüm yapılandırma dosyaları
    find /etc -type f -name "*.conf" -mtime -1
    

    İzinlere göre arama, güvenlik denetimlerinin bel kemiğidir. -perm seçeneği belirli izin bitlerine sahip dosyaları bulur. Örneğin herkese yazma izni verilmiş (0777) dosyalar ciddi bir güvenlik açığıdır ve düzenli olarak taranmalıdır:

    # Tam olarak 777 izinli dosyalar
    find /var/www -type f -perm 0777
    
    # Herkese yazılabilir dosyalar (dünyaya açık yazma biti)
    find /var/www -type f -perm -o+w
    
    # SUID biti set edilmiş dosyalar (yetki yükseltme riski)
    find / -type f -perm -4000
    

    İzin bitlerinin ne anlama geldiğini ve doğru değerleri nasıl belirleyeceğinizi ayrıntılı olarak Linux dosya izinleri rehberimizde bulabilirsiniz. Web sunucularında sürekli karşılaşılan izin kaynaklı hataların çoğu, bu taramalarla erkenden yakalanabilir.

    Bulunanlar Üzerinde İşlem: -exec ve xargs#

    find'in asıl gücü, bulduğu dosyaları yalnızca listelemekle kalmayıp onların üzerinde doğrudan işlem yapabilmesidir. Bunun iki yolu vardır: -exec ve xargs.

    -exec ile bulunan her dosya için bir komut çalıştırırsınız. Komutun içinde {} bulunan dosyanın yerini tutar, sonundaki \; ise komutun bittiğini bildirir:

    # Bulunan her .tmp dosyasının ayrıntılı listesini göster
    find /tmp -type f -name "*.tmp" -exec ls -lh {} \;
    
    # Bulunan tüm dosyaların izinlerini 644 yap
    find /var/www -type f -exec chmod 644 {} \;
    

    -exec ... \; yazımı her dosya için komutu ayrı ayrı çalıştırır; bu, binlerce dosyada yavaş olabilir. Sonu \; yerine + ile bitirirseniz find mümkün olduğunca çok dosyayı tek bir komuta toplar ve iş çok daha hızlı biter:

    # Çok daha performanslı toplu izin düzeltme
    find /var/www -type f -exec chmod 644 {} +
    

    xargs ise aynı işi find'in çıktısını bir boru (pipe) ile alarak yapar. Özellikle dosya adlarında boşluk ya da özel karakter olabileceği için, find tarafında -print0 ve xargs tarafında -0 kullanmak en güvenli yöntemdir; bu ikili, dosya adlarını satır sonu yerine null karakterle ayırarak boşluklu adların komutu bölmesini engeller:

    # Boşluklu adlara dayanıklı toplu işlem
    find /var/www -type f -name "*.log" -print0 | xargs -0 rm -f
    

    Aşağıdaki tablo iki yaklaşımı özetler:

    Özellik-execxargs
    ÇalıştırmaDoğrudan find içindenBoru üzerinden
    Performans (+ / -0 ile)YüksekYüksek
    Boşluklu adlar+ ile güvenli-print0 | xargs -0 ile güvenli
    OkunabilirlikBasit işlerde netZincirleme işlerde esnek

    Pratik Senaryolar: Eski Logları Silme ve Büyük Dosyaları Bulma#

    Şimdi öğrendiklerimizi gerçek sunucu bakımında birleştirelim. En sık ihtiyaç duyulan işlerden biri, eski log dosyalarını temizleyerek diski rahatlatmaktır. Silme işlemine geçmeden önce mutlaka önce listeleyip ne sileceğinizi görün:

    # 1. Adım: önce SADECE listele, hiçbir şey silme
    find /var/log -type f -name "*.log" -mtime +30
    
    # 2. Adım: çıktıdan emin olduktan sonra sil
    find /var/log -type f -name "*.log" -mtime +30 -delete
    

    -delete seçeneği -exec rm yerine kullanılabilecek daha güvenli bir yoldur çünkü yalnızca find'in kendi bulduğu dosyalara etki eder ve ayrı bir kabuk süreci başlatmaz. Yine de silici bir komutu çalıştırmadan önce ölçütlerin doğru olduğundan emin olmak, en pahalı hataların önüne geçer.

    Diski dolduran büyük dosyaları bulmak için boyut ölçütünü, sonucu boyuta göre sıralayan bir zincirle birleştirebilirsiniz:

    # En büyük 20 dosyayı boyutlarıyla listele
    find / -type f -size +100M -exec du -h {} + 2>/dev/null | sort -rh | head -n 20
    

    Buradaki 2>/dev/null, erişim izniniz olmayan sistem dizinlerinden gelen hata mesajlarını gizler; böylece ekranınız temiz kalır. Bir sonraki tablo, günlük bakımda işinize yarayacak birkaç hazır kalıbı toplu halde sunuyor:

    # Yetim (sahibi silinmiş) dosyaları bul
    find /home -nouser
    
    # Belirli bir kullanıcıya ait dosyalar
    find /var/www -user www-data
    
    # Son 7 günde eklenmiş büyük dosyalar
    find /var/www -type f -size +50M -mtime -7
    
    # node_modules ve .git hariç kod dosyalarını say
    find . -type f -name "*.php" -not -path "*/node_modules/*" -not -path "*/.git/*" | wc -l
    

    Bu tür bakım rutinlerini elle çalıştırmak yerine bir kabuk betiğine yerleştirip zamanlanmış görev olarak da kurabilirsiniz. Kök erişimine sahip bir VDS sunucu üzerinde bu betikleri gönül rahatlığıyla test edebilir, düzenli temizlik ve denetim işlerini otomatikleştirebilirsiniz.

    Güvenli Kullanım ve Sık Yapılan Hatalar#

    find çok güçlü olduğu kadar, dikkatsiz kullanıldığında zarar verme kapasitesi de yüksek bir araçtır. Aşağıdaki alışkanlıkları edinirseniz baştan savma hatalardan kaçınırsınız.

    Silmeden önce mutlaka listeleyin. -delete ya da -exec rm içeren her komutu, önce bu bölümleri çıkararak çalıştırın ve çıktıyı gözle doğrulayın. Beklediğiniz dosyaların geldiğinden emin olmadan silici bir seçenek eklemeyin.

    Dizin kapsamını daraltın. find / ile başlayan silme komutları, en küçük bir ölçüt hatasında sistem dosyalarını hedefleyebilir. Aramanızı her zaman /var/log, /tmp ya da /var/www gibi somut bir dizinle sınırlayın; kök dizinden tarama yalnızca gerçekten gerektiğinde ve silme işlemi olmadan yapılmalıdır.

    Joker kalıpları tırnak içine alın. -name *.log yazarsanız kabuk yıldızı önce genişletir ve komut hatalı çalışır. Doğrusu her zaman -name "*.log" biçimindedir.

    Tehlikeli komut zincirlerinden kaçının. İnternette rastladığınız find ... -exec rm -rf {} \; gibi kalıpları anlamadan kopyalayıp yapıştırmayın. Özellikle rm -rf ile birleşen bir find, yanlış bir dizinde felaketle sonuçlanabilir.

    Son ve en önemli tavsiye: find'i disk temizliği için ne kadar ustalıkla kullanırsanız kullanın, hiçbir komut düzenli yedeklemenin yerini tutmaz. Yanlışlıkla silinen kritik bir dosyayı geri getirmenin tek güvenilir yolu, önceden alınmış bir yedektir. Sunucularınız için otomatik yedekleme çözümünü devreye almak ya da yönetimi tamamen bize bırakmak isterseniz sunucu yönetimi hizmetimiz bu tür bakım işlerini sizin adınıza güvenle yürütür.

    Sıkça Sorulan Sorular#

    find ile locate arasındaki fark nedir?#

    locate komutu, sistemin arka planda tuttuğu önceden hazırlanmış bir veritabanı üzerinden arama yapar; bu yüzden çok hızlıdır ama sonuçlar güncel olmayabilir, çünkü veritabanı belirli aralıklarla güncellenir. find ise her çalıştığında dosya sistemini gerçek zamanlı tarar; bu nedenle daha yavaştır ama daima güncel ve doğru sonuç verir. Ayrıca find boyut, tarih, izin ve tür gibi zengin ölçütler ve bulunan dosyalar üzerinde işlem yapma yeteneği sunarken, locate yalnızca isme göre arama yapar. Kısaca anlık ve ölçütlü aramalar için find, hızlı isim aramaları için locate uygundur.

    find neden çok yavaş çalışıyor?#

    En yaygın sebep, aramayı gereğinden geniş bir dizinden başlatmaktır. find / komutu tüm dosya sistemini kat kat tarar ve bu, milyonlarca dosyası olan bir sunucuda dakikalar sürebilir. Aramayı ihtiyacınız olan en dar dizinle sınırlayın, gerekirse -maxdepth ile derinliği kısıtlayın. Ayrıca -type f gibi ölçütleri baştan eklemek, find'in gereksiz nesneleri elemesine yardımcı olur. Ağ üzerinden bağlanmış (NFS gibi) dizinlerde de aramalar belirgin biçimde yavaşlar; mümkünse bu dizinleri kapsam dışında bırakın.

    -exec ve xargs arasında hangisini seçmeliyim?#

    İki yöntem de aynı işi yapar, seçim çoğunlukla alışkanlık ve senaryoya bağlıdır. Basit ve tek adımlı işlemlerde -exec ... {} + yazımı hem okunaklı hem de hızlıdır. Çok sayıda dosyayı bir borudan geçirip birden fazla komuta zincirlemek istediğinizde ya da paralel çalıştırma gibi ek yeteneklere ihtiyaç duyduğunuzda xargs daha esnektir. Dosya adlarında boşluk veya özel karakter olma ihtimaline karşı xargs kullanırken mutlaka find -print0 ve xargs -0 ikilisini tercih edin; bu, en sık gözden kaçan güvenlik ayrıntısıdır.

    Sildiğim dosyaları geri getirebilir miyim?#

    Terminaldeki silme işlemleri dosyayı çöp kutusuna taşımaz, kalıcı olarak kaldırır ve standart bir geri alma yolu yoktur. Bu yüzden -delete veya -exec rm içeren komutları çalıştırmadan önce mutlaka aynı komutu bu bölümler olmadan çalıştırıp ne sileceğinizi görün. Kritik bir dosyayı yanlışlıkla sildiğinizde tek güvenilir kurtarma yolu önceden alınmış bir yedektir; bu nedenle düzenli yedekleme almadan silme işlemleriyle uğraşmanızı önermiyoruz.

    find dosya içeriğinde arama yapabilir mi?#

    find dosyaların adında, boyutunda, tarihinde ve özniteliklerinde arama yapar; dosyanın içindeki metni aramaz. İçerik araması için grep komutu kullanılır. İkisini birleştirerek çok güçlü bir sonuç elde edebilirsiniz: önce find ile hedef dosyaları süzer, sonra bulunanları grep'e verirsiniz. Örneğin find /var/www -name "*.php" -exec grep -l "DB_PASSWORD" {} + komutu, yalnızca PHP dosyaları arasında içinde belirli bir metin geçenleri bulur. Bu ikili yaklaşım, hem dosya türünü hem de içeriğini aynı anda süzmenin en pratik yoludur.

    Belirli bir klasörü aramanın dışında nasıl tutarım?#

    Aramanın dışında bırakmak istediğiniz bir dizin varsa -not -path ölçütünü kullanabilirsiniz. Örneğin find . -name "*.log" -not -path "*/cache/*" komutu, cache klasörünün içindekiler hariç tüm log dosyalarını bulur. Birden fazla klasörü elemek için bu ifadeyi tekrarlayabilir, ya da daha karmaşık durumlarda -prune seçeneğiyle koca bir dizin ağacını taramanın dışında tutabilirsiniz. Özellikle node_modules, .git ve vendor gibi çok sayıda dosya barındıran klasörleri elemek, hem hızı artırır hem de çıktıyı sadeleştirir.

    Kapanış#

    find komutu, ilk bakışta biraz karışık görünen söz dizimini bir kez oturttuktan sonra, bir sistem yöneticisinin en çok başvurduğu araçlardan birine dönüşür. İsme, türe, boyuta, tarihe ve izne göre arama yapabilmek; sonra bulduklarınızın üzerinde -exec ve xargs ile toplu işlem yürütebilmek, disk temizliğinden güvenlik denetimine kadar pek çok işi dakikalar meselesine indirger. İşin özü sabırlı olmak ve silici komutları çalıştırmadan önce her zaman kapsamı daraltıp çıktıyı doğrulamaktır.

    Bu tekniklerin hepsini özgürce deneyebileceğiniz, kök erişimi tamamen size ait bir ortama ihtiyaç duyarsanız Clou.TR'nin yüksek performanslı VDS sunucu ve bulut sunucu seçenekleri tam size göre. Sunucu bakımını uzmanlara bırakmayı tercih edenler için ise sunucu yönetimi hizmetimiz, düzenli temizlik, yedekleme ve güvenlik denetimlerini sizin adınıza üstlenir. Öğrendiklerinizi bir sonraki adımda temel Linux komutları ve dosya izinleri rehberlerimizle pekiştirerek sunucunuza tam anlamıyla hakim olabilirsiniz.

    findDosyaLinux

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.