Find komutu, Unix benzeri işletim sistemlerinde en önemli ve en sık kullanılan komut satırı yardımcı programlarından biri.
Find komutu, bağımsız değişkenlerle eşleşen dosyalar için belirtilen koşullara göre dosya ve dizinlerin listesini aramak ve bulmak için kullanılıyor.
Linux'da find komutu ile bir şey bulmak istediğimizde komut giriş şekli aşağıdaki gibi oluyor:
find nerede ne
Yani ilk olarak sisteme find diyerek bir şey bulmasını istediğimizi, ardından bunu nerede bulmasını istediğimizi son olarak da ne aradığımızı belirtiyoruz. Ancak çok sayıda farklı kullanım şekli ile sonuca ulaşılmasını mümkün kılıyor.
Birçok farklı komutta olduğu gibi "man" komutu ile birlikte find'ın nasıl kullanılacağına dair seçenekler görülebilir:
man find
Ayrıca wildcard (* işareti) kullanarak da kolay arama yapmak mümkün.
ÖRNEK:
Linux terminalinde touch komutu ile bulunduğunuz dizine iki dosya yaratın:
touch dosya1 dosya2
Touch komutunu kullanarak isimleri dosya1 ve dosya2 olan 2 adet dosya yaratmış olduk.
Bunu ls ya da ls -la komutları ile doğrulayabiliriz.
Ya da;
find dosya*
Yukarıdaki komutu kullandığımızda bulunduğumuz dizinde "dosya" adına sahip olan tüm dosyalar sıralanacaktır. Yani hem dosya1 hem dosya2 sonucu gelecektir.
find *1
Yukarıdaki komutu girmemiz durumunda ise yalnız dosya1 bulunacaktır.
Bulunduğumuz dizinde değil farklı bir dizinde arama yapmak istiyorsak ya da tüm işletim sisteminde arama yapılmasını istiyorsak find komutunun hemen ardından path yani arama yapılacak yolu belirtmemiz gerekir.
Find komutunun hemen ardından gelecek ilk bilgi yukarıda bahsetmiş olduğum gibi "nerede" sorusunun yanıtı olmalıdır. Böylece find hem dizinleri hem de alt dizinleri arayacaktır.
Eğer tüm işletim sistemi altında arama yapmasını istiyorsak komut:
find /
En faydalı iki flag: -type and -name
-type ile aramakta olduğumuz "şeyin"dosya mı yoksa dizin mi olduğunu belirtebiliriz. Dizin aradığımızı belirtmek için -type 'ın ardından d,ya da bir dosya arıyorsak bu durumda f kullanmamız gerekir.
Şimdiye kadar ki kısımda find komutuna nerede ve ne tip bir "şey" aradığımızı şu şekilde söyledik:
find / -type f (Tüm işletim sisteminde bir dosya ara) (Hala ne araması gerektiğini söylemedim!)
-name
flag ise aranacak bir ad veya patern belirtmek için kullanılır.
Wildcard (*) kullanımı
Burada aramakta olduğumuz dosya ya da dizinin tam adını yazabilir ya da wildcard kullanarak ismin sadece bir kısmını belirtebiliriz. Ayrıca yalnız belirli bir uzantıya sahip dosyaları aramak istiyorsak (örneğin sadece .sh ya da .xml olan dosyaları görmek istiyorsak) yine wildcard kullanmak gerekecektir.
Dikkat: Eğer wildcard kullanılıyorsa mutlaka tırnak içerisinde kullanılması gerekir.
Örneğin:
find / -type f -name "*.xml"
-name ve -iname farkı
Ayrıca -name yerine -iname kullanılması durumunda büyük/küçük harf ayrımı da ortadan kalkar (case insensitive olur).
Yani "Inex.sh" arıyorsak "inex.sh" şeklinde arama yaptığımızda da bu dosyayı bulur ancak -name kullanırsak bu case sensitive yani büyük/küçük harf duyarlı bir arama olacaktır.
ÖRNEKLER
/home dizini altında "user.txt" adındaki tüm dosyaları büyük/küçük harfe duyarlı olmayacak şekilde bulun
find /home -type f -iname user.txt
Adında "exploits" geçen tüm dizinleri bulun
find / -type d -name "*exploits"
Owner, Size ve Permissions
Bazı durumlarda sadece isim belirtmek de yeterli olmayacaktır. Dosyanın hangi kullanıcıya ait olduğunu (owner), ne büyüklükte olduğunu (size) veya hangi izinlere sahip olduğunu (permissions) da belirtmek isteyebiliriz.
Ayrıca özellikle log arama gibi durumlarda işe yarayabilecek farklı bir bilgi de aratabiliriz: dosya en son ne zaman değişmiş ya da dosyaya en son ne zaman erişilmiş.
Sıradan gidelim:
1. Owner
Eğer dosyanın hangi kullanıcıya ait olduğunu belirtmek istiyorsak -user flag kullanılır.
2. Size
Dosyanın büyüklüğü -size flag ile belirtilir.
Sayısal değerler -n, +n, ve n formatlarında belirtilir, n bir number yani sayı gösterir.
-n "n"den küçük olan değerler, +n "n"den büyük olan değerler ve n "n"ye eşit olan değerleri belirtmek için kullanılır.
-size flag ile dosyanın büyüklüğünü belirmek için ihtiyacımız olan diğer bir bilgi ise suffix (son ek)tir. Yani dosyanın byte mı, kilobyte mı megabyte mı olduğunu belirtmemiz gerekir.
c byte için kullanılan suffix, k kilobyte için kullanılan suffix, ve M megabyte için kullanılan suffixdir.
Yani eğer 50 byte'tan küçük dosyaları aramak istiyorsak kullanım -30c şeklinde olacaktır.
3. Permissions
Belirli dosyalara erişimin yalnız belirli kullanıcılar ile kısıtlanabildiğini biliyoruz.
-perm flag bu izinlerin belirtilmesi için kullanılır ve octal (örn. 777)ya da sembolik olarak belirtilebilir (örn. u=r).u user yani kullanıcı, g gruplar, o other users (kullanıcı ve gruplar dışında kalanlar) ve a "all" yani tümü için kullanılır. Varsayılan ayar a 'dır.
u=r mevcut kullanıcının okuma izni olan dosyaları belirtmektedir. a. find yalnızca buna tam olarak uyan sonuçları getirecektir. Aramayı biraz daha genişletmek istersek – ya da / öneklerini kullanabiliriz. – kullanılması sonucu en az belirlenen izinlere sahip dosyalar ile döndürür. / kullanılması sonucu ayarlanan izinlerden herhangi biriyle eşleşen dosyaları döndürür.
Time-related (Zaman ile ilgili) Aramalar
Find komutu ile yapabildiğimiz bu aramalar daha komplekstir ancak bazı durumlarda çok faydalı olabilir.
Time-related aramalar için kullanılan flag bir kelime ve bir ekten oluşur.
Kelimeler min (minutes) ve time (days) olarak kullanılır.
Ekler ise a (accessed),
m(modified) ve c(changed)'dir ve aşağıdaki anlamları taşır:
a (accessed): Dosyaya son erişilen zaman
m(modified): Dosyanın son düzenlendiği zaman
c(changed): Dosyanın durumunun son değiştirildiği zaman
Numerik değerler için -size flag ile aynı kurallar geçerlidir.
ÖRNEK:
Eğer bir dosyaya en son 30 dakikadan daha uzun zaman önce erişim sağlandığını belirtmek istiyorsak aşağıdaki şekilde belirtilecektir:
-amin +30
Eğer 7 gün içerisinde (7 günden önce) değişiklik yapıldığını belirtmek istiyorsak:
-mtime -7
DİKKAT: Bir dosyanın son 24 saat içinde değiştirildiğini belirtmek istediğinizde, -mtime 0 seçeneği kullanılır.)
Bilinmesi gereken önemli 2 konu daha var:
1. > yönlendirme operatörü find komutuyla kullanılabilir. Böylece arama sonuçları bir dosyaya kaydedebilir ve daha da önemlisi, çıktının daha
okunaklı olmasını sağlamak için olası hataların çıktıları bastırılabilir.
2. Ben hemen hemen her find ile yaptığım aramanın sonuna 2>/dev/null ekledim. Bu şekilde bazı durumlarda yüzlerce çıkabilen "Permission denied" hatasından kurtuldum. 2> /dev/null kullandığınızda karşınıza yalnız erişim izniniz bulunan dosyalar çıkar.
BÖLÜM SONU CANAVARI:
2. find / -type f -size 100c

Hiç yorum yok:
Yorum Gönder