Linux’ta Dosya Arama: locate, wildcards ve find Komutu
Linux’ta çalışırken en sinir bozucu anlardan biri: “Dosya var ama nerede olduğunu bilmiyorum.” Linux’ta dosya ve dizin yönetimini…
Linux’ta Dosya Arama: locate, wildcards ve find Komutu
Linux’ta çalışırken en sinir bozucu anlardan biri: “Dosya var ama nerede olduğunu bilmiyorum.” Linux’ta dosya ve dizin yönetimini öğrenmiştik. Peki ya aradığımız dosyayı nasıl bulacağız?
Linux’ta dosya ararken kullandığımız araçlar aslında farklı stratejilerle çalışır. Kimi hız için önceden hazırlanmış bir veritabanına bakar, kimi tüm dosya sistemini tarar, kimi de sadece isim desenlerine odaklanır.
Bu yazıda üç temel konuyu sade bir şekilde inceleyeceğiz:
locate- wildcards (joker karakterler)
find

locate: Hızlı ama hafızaya bağımlı
locate komutu, dosya sistemini gerçek zamanlı taramaz. Bunun yerine daha önceden oluşturulmuş bir veritabanına(database) bakarak sonuç döner.
Bu yüzden çalışma mantığı biraz farklıdır: sistemin o anki durumunu değil, önceden kaydedilmiş bir fotoğrafını kullanır gibi düşünebilirsin. Veritabanında sadece dosyanın: adı ve yolu tutulur, içeriği değil.
Bu yaklaşımın doğal sonucu da şudur:
- Çok hızlı çalışır çünkü disk taramaz
- Ama her zaman %100 güncel olmayabilir
💡Sonuçlar veritabanının güncelliğine bağlıdır dolayısıyla yeni bir dosya oluşturduysanız ve
updatedbçalıştırılmadıysa, locate bunu bulamayabilir.
*updatedbile veritabanı oluşturulur ve güncellenir.Çoğu Linux sistemindeupdatedbotomatik olarak günlük olarak çalıştırılır.*
Wildcards
Dosya ararken her zaman tam ismi bilmeyebiliriz. İşte burada wildcards (joker karakterler) devreye giriyor.
Bu karakterler, dosya isimlerini “kalıplarla” eşleştirmeni sağlar. Yani tek tek isim yazmak yerine, bir desen(pattern) tanımlarsın.
✨ En temel wildcard’lar
Linux’ta en sık kullanılan birkaç joker karakter var:
**?* → tek bir karakteri temsil eder
Yani sadece bir harf/karakter boşluğu doldurur.
“burada tek bir karakter var ama ne olduğunu bilmiyorum”*
ls ba?.txt
“ba ile başlayan, devamında sadece tek bir karakter olan ve .txt ile biten dosyaları bul.”
Yani;
bat.txt,bag.txt, bar.txt gibi ifadeler olabilir.
Ama baba.txt gibi fazla karakter içeren dosyalar eşleşmez!
**** → sıfır veya daha fazla karakteri temsil eder
Dosya adının geri kalanını “esnek” hale getirir.
“buradan sonrası ne olursa olsun fark etmez”*
ls *.txt
a.txt, notes.txt ,very_long_name.txt gibi ifadelerin hepsi ile eşleşir.
**[set]* → belirtilen karakterlerden herhangi biriyle eşleşir
Örneğin sadece belirli harfleri kabul eder.
“sadece şu seçenekler olabilir”*
ls file[12].txt
Bu ifade: "file1 veya file2 olabilir, başka hiçbir şey olamaz" demektir.
file1.txt, file2.txt olabilir ama file3.txt olamaz!
Aralık belirterek de kullanabilirsin :
ls file[a-c].txt
Bu da a ile c arasındaki harfleri kabul eder:
filea.txt
fileb.txt
filec.txt
**[!set]* → belirtilen karakterler dışında kalanlarla eşleşir
Yani bir nevi “hariç tutma” mantığıyla çalışır.
“şunlar kesin olmasın”*
ls file[!12].txt "file1 ve file2 hariç tüm dosyaları göster." demektir.
file3.txt ✔
filea.txt ✔
file1.txt ❌
find: Dosya sisteminde derinlemesine arama
find komutu, Linux’ta dosya aramanın en güçlü araçlarından biridir. Çünkü locate gibi hazır bir veritabanına bakmak yerine, dosya sistemini gerçek zamanlı olarak tarar.
Bu da onu daha yavaş ama çok daha güvenilir yapar.
Mantığı oldukça basittir: Verdiğin bir noktadan başlar ve tüm alt dizinlere inerek uygun dosyaları bulur.
Peki, find komutu neden güçlü?
find sadece isim aramaz. Asıl gücü, dosyaları farklı kriterlere göre filtreleyebilmesinden gelir:
- Dosya adı
- Uzantı
- Boyut
- Değiştirilme zamanı
- İzinler
- Dosya türü
Bu yüzden sadece “dosya bulma aracı” değil, aynı zamanda sistem yönetimi aracı olarak da kullanılır.
find .
Buradaki . işareti oldukça önemli: “Bulunduğum dizinden başla ve aşağı doğru tüm klasörleri tara” demektir. Eğer . işareti yerine dizin ismi yazarsan o dizinden aşağıya doğru taramaya başlar.
Genel syntax aşağıdaki şekildedir;
find [başlangıç_dizini] [koşullar]
Burada koşul dediğimiz ifadeyi filtreleme seçenekleri gibi düşünebilirsiniz. Gelin, filtreleme seçeneklerinin bazılarını birlikte öğrenelim.
🔎 Dosya adına göre arama (-name)
Bazen dosyanın nerede olduğunu bilmezsin ama adını hatırlarsın.
İşte bu noktada -name en hızlı çözüm olur.
find . -name "*.log"
Bu komut: bulunduğun dizinden başlayarak tüm .log dosyalarını bulur.
🗂️Sadece dosya mı, klasör mü? (-type)
Linux’ta her şey dosya gibi görünür ama aslında farklı türler vardır. Bazen sadece klasörleri ya da sadece normal dosyaları görmek isteyebilirsin.
find . -type d
sadece dizinleri listeler(directory).
find . -type f
sadece normal dosyaları listeler(file).
📦Büyük dosyaları yakalamak (-size)
Disk dolduğunda genelde suçlu büyük dosyalardır. Bunları bulup işlem yapmak için -size parametresi kullanabiliriz.
find / -size +100M
Yukarıdaki örnekte 100 MB’tan büyük dosyalar bulunur. Farklı birimlerle de arama yapabilirsin(Gigabyte (G), Kilobyte (k), byte (c)).
🧠 Gerçek hayatta en çok kullanılan senaryolardan biri budur.
⏱️ Eski dosyaları temizlemek (-mtime)
Zaman bazlı filtreleme özellikle temizlik işlerinde hayat kurtarır.
find /var/log -mtime +7
7 günden eski dosyaları bulur.
🧠 Genelde log temizliği için kullanılır.
Tabii ki bu kullanımdan çok daha fazla imkan sunuyor;
find komutunda üç farklı zaman parametresi var:
**ctime** → inode bilgisi değiştiğinde (sahiplik, izinler, link sayısı gibi).**mtime** → dosyanın içeriği (verisi) değiştiğinde.**atime** → dosyaya erişildiğinde (okuma gibi).
Örneğin;
ctime 3→ tam 3 gün önce inode’u değişmiş dosyaları bulur.ctime -3→ son 3 gün içinde değişmiş dosyaları bulur.ctime +3→ 3 günden daha eski değişiklikleri bulur.
Benzeri şekilde dakikalık aramalar da yapılabilir:
**cmin, `mmin**,amin` .
💻 Bulduğun dosyalar üzerinde işlem yapmak: -exec
find sadece bulmakla kalmaz, bulduğu dosyalar üzerinde işlem de yapabilir.
Bunun için -exec kullanılır.
Örneğin .swp dosyalarını silmek:
find -name "*.swp" -exec rm {} \;
Burada mantık şöyledir:
finddosyaları bulur{}→ yer tutucudur. find ifadesinden dönen her dosya adı buraya yerleştirilirrm→ silme işlemini yapar\;→ Komutu ; veya \; ile sonlandırmak gerekir
Yani aslında: “Bulduğun her .swp dosyasını sil”.
find komutunun sınırları bu kadar da değil aynı anda birden fazla parametreyi birleştirebilir;
find . -name "*.swp" -size +100M -exec rm {} \;
“Mevcut dizinde ve alt dizinlerde, adı .swp ile biten VE boyutu 100 MB’tan büyük olan dosyaları bul ve sil”.
Ve ifadesinden anlaşıldığı üzere her iki, koşulu da sağlayan dosyalar üzerinde işlem yapılır. Find komutunda koşullar arasında varsayılan olarak “VE” ilişkisi vardır.
Artık Linux’ta dosya aramak göz korkutan bir şey olmaktan çıktı.
Bazen hızlıca sonuç almak için locate,
bazen esnek eşleşmeler için wildcards,
bazen de detaylı ve kesin sonuçlar için find kullanacağız.
Asıl mesele komutları ezberlemek değil, hangi durumda hangisini kullanacağını bilmek.Bir sonraki yazıda görüşmek üzere👋.
메타데이터
- post_id
- d776afafafda
- slug
- linuxta-dosya-arama-locate-wildcards-ve-find-komutu-d776afafafda
- url
- https://medium.com/@ebrarunaall/linuxta-dosya-arama-locate-wildcards-ve-find-komutu-d776afafafda
- canonical_url
- https://medium.com/@ebrarunaall/linuxta-dosya-arama-locate-wildcards-ve-find-komutu-d776afafafda
- author_url
- https://medium.com/@ebrarunaall
- status
- ok
- fetched_at
- 2026-06-23 06:34:20