Linux find Komutu Kullanımı İle Dosya ve Dizin Arama
5 min read

Linux find Komutu Kullanımı İle Dosya ve Dizin Arama

Linux find komutu ile dosyalar ve dizinler üzerinde çok detaylı seçeneklerle hızlı bir arama yapabilirsiniz.
Linux find Komutu Kullanımı İle Dosya ve Dizin Arama
Photo by Jametlene Reskp / Unsplash

find komutu, Linux sistem yöneticilerinin cephaneliğindeki en güçlü araçlardan biridir. Kullanıcı tarafından verilen bir ifadeye dayalı olarak bir dizin hiyerarşisinde dosya ve dizinleri arar ve eşleşen her dosya üzerinde kullanıcı tarafından belirlenen eylemi gerçekleştirebilir.

Dosyaları ve dizinleri izinlerine, türlerine, tarihlerine, sahipliklerine, boyutlarına ve daha fazlasına göre aramak için find komutunu kullanabilirsiniz. Ayrıca grep veya sed gibi diğer araçlarla da birleştirilebilir.

1. find Komutu Syntax

find komutunun genel syntax'ı aşağıdaki gibidir:

find [options] [path...] [expression]
  • options özniteliği, sembolik bağların, hata ayıklama seçeneklerinin ve optimizasyon yöntemlerinin işlenmesini kontrol eder.
  • path... özniteliği, find'in dosyaları arayacağı başlangıç ​​dizinini veya dizinlerini tanımlar.
  • expression özniteliği, seçeneklerden, arama kalıplarından ve operatörlerle ayrılmış eylemlerden oluşur.

Bir dizindeki dosyaları aramak için find komutunu çağıran kullanıcının o dizinde okuma izinlerine sahip olması gerekir.

Aşağıdaki örneğe bir göz atalım:

find -L /var/www -name "*.js"
  • -L seçeneği (options), find komutuna sembolik linkleri de bulmasını söyler.
  • /var/www (path…) aranacak dizini belirtir.
  • -name "*.js" (expression), .js (JavaScript dosyaları) ile biten dosyaları aramayı söyler.

2. Dosya İsimleriyle Arama Yapmak

Dosyaları adına göre bulmak, muhtemelen find komutunun en yaygın kullanımıdır. Bir dosyayı adıyla bulmak için -name seçeneğini ve ardından aradığınız dosyanın adını kullanın.

Örneğin, /home/linuxize dizininde document.pdf adlı bir dosyayı aramak için aşağıdaki komutu kullanırsınız:

find /home/linuxize -type f -name document.pdf

Büyük/küçük harfe duyarsız bir arama yapmak için -name seçeneğini -iname ile değiştirin:

find /home/linuxize -type f -iname document.pdf

Yukarıdaki komut “Document.pdf”, “DOCUMENT.pdf” ..vb. ile eşleşecektir.

3. Dosya Uzantılarıyla Arama Yapmak

Dosyaları uzantıya göre aramak, dosyaları ada göre aramakla aynıdır. Örneğin, /var/log/nginx dizininde .log.gz ile biten tüm dosyaları bulmak için şunu yazarsınız:

find /var/log/nginx -type f -name '*.log.gz'

Eğer aradığınız kelime içinde gerçekten * işareti olması gerekiyorsa escape karakterleri ile \* shell'in bu karakteri yorumlamamasını söyleyebilirsiniz.

Ayrıca, *.log.gz regex'iyle eşleşmeyen tüm dosyaları bulmak için -not seçeneğini kullanabilirsiniz. Örneğin, *.log.gz ile bitmeyen tüm dosyaları bulmak için şunları kullanırsınız:

find /var/log/nginx -type f -not -name '*.log.gz'

4. Dosya Tipleriyle Arama Yapmak

Bazen normal dosyalar, dizinler veya sembolik bağlantılar gibi belirli dosya türlerini aramanız gerekebilir. Linux'ta her şey bir dosyadır.

Dosyaları türlerine göre aramak için -type seçeneğini ve dosya türünü belirtmek için aşağıdaki tanımlayıcılardan birini kullanın:

  • f: normal dosya
  • d: dizin
  • l: sembolik bağ
  • c: karakter cihazları
  • b: block cihazları
  • p: adlandırılmış pipe (FIFO)
  • s: socket

Örneğin, geçerli çalışma dizinindeki tüm dizinleri bulmak için şunları kullanırsınız:

find . -type d

Genel bir örnek olarak, chmod komutunu kullanarak web sitesi dosya izinlerini teker teker 644 ve dizin izinlerini 755 olarak değiştirmek -exec komutuyla mümkün olacaktır:

find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;

5. Dosya Boyutlarıyla Arama Yapmak

Dosya boyutuna göre dosyaları bulmak için, boyut ölçütleriyle birlikte -size parametresini kullanabiliriz. Dosya boyutunu belirtmek için aşağıdaki ekleri kullanabilirsiniz:

  • b: 512-byte blocks (default)
  • c: bytes
  • w: two-byte words
  • k: Kilobytes
  • M: Megabytes
  • G: Gigabytes

Aşağıdaki komut, /tmp dizini içindeki tam olarak 1024 baytlık tüm dosyaları bulacaktır:

find /tmp -type f -size 1024c

find komutu ayrıca belirtilen boyuttan daha büyük veya daha küçük dosyaları aramanıza da olanak tanır.

Aşağıdaki örnekte, mevcut çalışma dizini içinde 1MB'den küçük tüm dosyaları arıyoruz. Boyut değerinden önceki - sembolüne dikkat edin:

find . -type f -size -1M

1MB'den büyük dosyaları aramak istiyorsanız, + sembolünü kullanmanız gerekir:

find . -type f -size +1M

Bir boyut aralığındaki dosyaları bile arayabilirsiniz. Aşağıdaki komut 1MB ile 2MB arasındaki tüm dosyaları bulacaktır:

find . -type f -size +1M -size 2M

6. Dosya Tarihleriyle Arama Yapmak

find komutu ayrıca son değişiklik, erişim veya değişiklik zamanına göre dosyaları arayabilir.

Boyuta göre arama yaparken olduğu gibi, "büyüktür" veya "küçüktür" için artı ve eksi simgelerini kullanın.

Diyelim ki birkaç gün önce samba yapılandırma dosyalarından birini değiştirdiniz ama hangisiydi unuttunuz. .conf ile biten ve son beş gün içinde değiştirilmiş /etc/samba/conf.d dizini altındaki tüm dosyaları kolayca filtreleyebilirsiniz:

find /etc/samba/conf.d -name "*.conf" -mtime 5

İşte -daystart seçeneğini kullanarak değişiklik tarihine göre dosyaları filtrelemenin başka bir örneği. Aşağıdaki komut, /home dizinindeki 30 gün öncesine kadar değiştirilen tüm dosyaları listeleyecektir:

find /home -mtime +30 -daystart

6. Dosya İzinleriyle Arama Yapmak

-perm seçeneği, dosya izinlerine göre dosyaları aramanıza izin verir.

Örneğin, /var/www/html dizini içinde tam olarak 775 izinli tüm dosyaları bulmak için şunları kullanırsınız:

find /var/www/html -perm 644

Sayısal modun önüne eksi - veya / koyabilirsiniz.

Eğik çizgi / kullanıldığında, en az bir kategori (kullanıcı, grup veya diğerleri) bir dosyanın eşleşmesi için en azından ilgili bitlere sahip olmalıdır.

Aşağıdaki örnek komutu göz önünde bulundurun:

find . -perm /444

Yukarıdaki komut, kullanıcı, grup veya diğerleri için ayarlanmış okuma izinlerine (4) sahip tüm dosyaları eşleştirecektir.

Önek olarak - kullanılıyorsa, dosyanın eşleşmesi için en azından belirtilen bitlerin ayarlanması gerekir. Aşağıdaki komut, sahibi ve grubu için okuma ve yazma izni olan ve diğer kullanıcılar tarafından okunabilen dosyaları arayacaktır:

find . -perm -664

6. Dosya Sahipleriyle Arama Yapmak

Belirli bir kullanıcıya veya gruba ait dosyaları bulmak için -user ve -group seçeneklerini kullanabilirsiniz.

Örneğin, linuxize kullanıcısının sahip olduğu tüm dosya ve dizinleri aramak için şunu çalıştırırsınız:

find / -user linuxize

İşte gerçek dünyadan bir örnek. Diyelim ki www-data kullanıcısının sahip olduğu tüm dosyaları bulmak ve eşleşen dosyaların sahipliğini www-data'dan nginx'e değiştirmek istiyorsunuz:

find / -user www-data -type f -exec chown nginx {} \;

7. Dosya Aramak ve Bulunan Dosyaları Silmek

Tüm eşleşen dosyaları silmek için, eşleşme ifadesinin sonuna -delete seçeneğini ekleyebilirsiniz.

Bu seçeneği yalnızca sonucun silmek istediğiniz dosyalarla eşleştiğinden emin olduğunuzda kullandığınızdan emin olun. -delete seçeneğini kullanmadan önce eşleşen dosyaları yazdırmak her zaman iyi bir fikirdir.

Örneğin, /var/log/ dizininden .temp ile biten tüm dosyaları silmek için şunları kullanırsınız:

find /var/log/ -name `*.temp` -delete
💡
-delete seçeneğini çok dikkatli kullanın. find komutu bir expression olarak değerlendirilir ve önce -delete seçeneğini eklerseniz komut belirttiğiniz başlangıç ​​noktalarının altındaki her şeyi siler.

Dizinler söz konusu olduğunda, find yalnızca rmdir gibi boş dizinleri silebilir.

8. Özet

Çeşitli seçenekler ve kriterler ile find komutunu nasıl kullanacağınızı gösterdik.

Bu makale, Linux sistemlerinizdeki dosyaları nasıl bulacağınız konusunda size temel bir anlayış sağlamak için yazıldı. Ayrıca find man sayfasını ziyaret edebilir ve find komutunun diğer tüm güçlü seçeneklerini okuyabilirsiniz.