35
Konuya ait anahtar kelimeler : tr, find tr : "Çevirme, sıkıştırma ve silme" işlemlerini yapmaktadır. İlk verilen spesifik özellikleri ikinci verilen spesifik özellikeler ile değiştirerek bir çıktı sunmaktadır. Daha fazla bilgi için "man tr" sayfasına bakabilirsiniz. Örnek kullanımı: tr opsiyonlar [ilk özellikler] [ikinci özellikler] şeklinde olmaktadır. " [ilk özellikler]" kısmında belirtilen özellikleri, [ikinci özellikler]" kısmındaki özellikler ile değiştirir yada uygular. Mesela ilk kısım "küçük harfler" ifadesini belirtir ve ikinci kısımda da "büyük harfler" ifadesini kullanırsak bunun anlamı şudur, küçük harfleri büyük harfe dönüştür.
-cTamamlamak.
-dSilmek.
-sBirden fazla bulunan tekrarlı ifadeleri tek bir karakter ile değiştirmek. Bir nevi sıkıştırmak.
-tİkinci özellikler kısmında belirtilen uzunlukta, ilk kısımda belirtilen özellikleri kesme.
--helpYardım sayfası.
--versionVersiyon bilgileri.
Not : Eğer "-d" opsiyonu kullanılmaz ise belirtilen özelliklere uyan kısımlar silinmez, değiştirilir. Şimdi girdi olarak sunulan "www.linux.web.tr" ifadesini büyük harfe dönüştürelim.
[alax@alax script]$ echo "www.linux.web.tr" | tr [:lower:] [:upper:] WWW.LİNUX.WEB.TR [alax@alax script]$
Aynı işlemi farklı bir ifadeyle gerçekleştirelim.
[alax@alax script]$ echo "www.linux.web.tr" | tr a-z A-Z WWW.LİNUX.WEB.TR [alax@alax script]$
Şimdi "Murat Aydın 22165 Amerika." ifadesi içerisinden sadece sayısal olan ifadeyi çekelim.
[alax@alax script]$ echo "Murat Aydın 22165 Amerika." | tr -cd [:digit:] 22165 [alax@alax script]$
Yada sayısal ifadeyi silelim.
[alax@alax script]$ echo "Murat Aydın 22165 Amerika." | tr -d [:digit:] Murat Aydın Amerika. [alax@alax script]$
Tabi neyi silmeyi istiyorsanız onu ifade edecek kelime, karakter sınıflarını ifade etmeniz yeterlidir. Herhangi bir dosyadaki yazdırılamayan(ASCII karakterlei gibi) karakterleri silerek çekmek için,
[alax@alax script]$ tr -cd [:print:] < dosya_adi.txt [alax@alax script]$
şeklinde kullanım uygulayabiliriz. Böylece "dosya_adi.txt" adlı dosya içerisinde görüntülenemeyen karakterler silinmiş olur. "link" dosyası içerisindeki bütün satırları tek bir satır haline getirelim. Her satır sonunda "New line \n" karakterini barındırmaktadır, bunu zaten biliyoruz. Bu karakteri bir adet boşluk ile değiştirelim.
[alax@alax script]$ tr -s '\n' ' ' < link Korkma, sönmez bu şafaklarda yüzen al sancak; Sönmeden yurdumun üstünde tüten en son ocak. O benim milletimin yıldızıdır, parlayacak; O benimdir, o benim milletimindir ancak. Çatma, kurban olayım, çehreni ey nazlı hilâl! Kahraman ırkıma bir gül! Ne bu şiddet, bu celâl? Sana olmaz dökülen kanlarımız sonra helâl, Hakkıdır, Hakk'a tapan, milletimin istiklâl! [alax@alax script]$
Son olarak "ABCDEFG" ifadesini önce küçük harfe dönüştürelim ve ardından içerisinden "def" kısmını silelim.
[alax@alax script]$ echo "ABCDEFG" | tr [:upper:] [:lower:] | tr -d 'def' abcg [alax@alax script]$
Not: "tr" komutu ile uygulanan değişiklikler orjinal dosya üzerinde bir değişikliğe neden olmaz. Dosya içeriğini istediğimiz şekilde düzenleyerek elde etmemizi sağlamaya yarar. Daha sonra istersek değişiklikleri bir dosyaya yazabilir yada ekleyebiliriz.(>, >>) Find : Türkçe "Ara,bul" anlamına gelmektedir. Belirtilen yada içerisinde bulunan dizin içerisinde arama yapmak için kullanılır. Birçok parametre almaktadır. Biz birkaç parametresini göstereceğiz. Diğer kullanım bilgilerine "man find" sayfasından bakabilirsiniz.
-HSadece belirtilen dosya(lar) için bilgileri sunan sembolik linkleri takip et.
-PSembolik linkleri asla takip etme.
-LSembolik linkleri takip et.
-name "kelime""kelime" adını içeren dosya/klasörleri bul.
-iname "kelime""kelime" değeri için büyük-küçük harf duyarlılığı olmadan arama yap.
-typeİstenilen tipteki dosya/klasörleri ara.
-permBelirtilen dosya izinlerine sahip dosyaları bul.
-emptyBelirlenen dizin içerisindeki boş dosya/klasörleri bul.
-user "kullanıcı_adi""kullanıcı_adi" adlı kullanıcıya ait dosya/klasörleri ara.
-group "grup_adi""grup_adi" adlı gruba ait dosya/klasörleri ara.
-mtime "gün_sayisi"Son "gün_sayisi" gün içerisinde herhangi bir değişikliğe uğramış dosya/klasörleri ara.
-atime "gün_sayisi"Son "gün_sayisi" gün içerisinde kullanılmış, görüntülenmiş dosya/klasörleri ara.
-cmin "dakika_sayisi"Son "dakika_sayisi" dakika içerisinde herhangi bir değişikliğe uğramış dosya/klasörleri ara.
-amin "dakika_sayisi"Son "dakika_sayisi" dakika içerisinde kullanılmış olan dosya/klasörleri ara.
-size "boyutMB""boyutMB" boyutundaki dosya/klasörleri ara.
Yukarıda bazı parametreler verilmiştir. Daha birçok parametre bulunmaktadır. Şimdi bu parametreler ile örnekler yapalım. Çalışma dizini içerisinde "link" kelimesini içeren dosya/klasörleri arama,
[alax@alax script]$ find -name "link"
"home/klasör" içerisinde "link" kelimesini içeren dosya/klaörleri arama,
[alax@alax script]$ find /home/klasör -name "link"
Büyük küçük harf duyarlılığı olmadan arama,
[alax@alax script]$ find /home/klasör -iname "link"
"folder" adındaki "Klasörleri" arama(dosyaları değil.),
[alax@alax script]$ find -type d -name "folder"
"file" adındaki "Dosyaları" arama(klasörleri değil.),
[alax@alax script]$ find -type f -name "file"
"644" iznine sahip dosyaları arama,
[alax@alax script]$ find -type f -perm 644
"755" iznine sahip OLMAYAN dosyaları arama, bunun için olumsuzluk ifadesi olan ünlem işareti kullanılır,
[alax@alax script]$ find -type f ! -perm 755
Okunabilir dosyaları arama,
[alax@alax script]$ find / -perm /a=r
Yazılabilir dosyaları arama,
[alax@alax script]$ find / -perm /a=w
Sahibi tarafından çalıştırılabilr yazılabilir dosyaları arama,
[alax@alax script]$ find / -perm /u=x
Aranılan ve bulunan dosya/klasörler için herhangi bir komut uygulamak için "-exec" komutu kullanılır. Kullanımı: find opsiyonlar -exec komut {} \; şeklinde olmaktadır. Mesela "/klasör" dizininde bulunan ve erişim izinleri "755" olan dosyaların erişim izinlerini "644" yapmak için aşağıdaki komut kullanılabilir.
[alax@alax script]$ find /klasör -type f -perm 755 -print -exec chmod 644 {} \;
"/klasör" dizini içerisindeki boş dosyaları bulma,
[alax@alax script]$ find /klasör -type -f -empty
"/klasör" dizini içerisindeki boş klasörleri bulma,
[alax@alax script]$ find /klasör -type -d -empty
Gizli dosyaları bulma,
[alax@alax script]$ find /klasör -type f -name ".*"
"Ahmet" adlı kullanıcıya ait klasörleri bulma,
[alax@alax script]$ find -user Ahmet -type d
"users" adlı gruba ait dosyaları bulma,
[alax@alax script]$ find -group users -type f
50 gün içerisinde bir değişikliğe uğramış dosyaları bulma,
[alax@alax script]$ find -mtime 50 -type f
Not: Eğer sadece dosya yada sadece klasör araması yapılmayacak ise, o zaman herhangi bir tip belirtilmez. Herhangi bir "-type" değeri belirtilmez ise, bütün dosya/klasörler bulunur. Şimdi son 60 gün ile 90 gün arasında herhangi bir değişikliğe uğramış olan tüm dosya/klasörleri bulalım.
[alax@alax script]$ find -mtime +60 -mtime -90
Son bir saat(60 dakika) içerisinde kullanılmış olan dosyal/klasörleri bulma,
[alax@alax script]$ find -amin -60
Not :Diğer kullanımlar dahil olmak üzere, sayısal ifadelerin önündeki işaret eksi ise o süre içerisinde, artı ise o süre dışında anlamı sağlanmaktadır. Mesela "+50" demek sistem açıldğı andan 50 dakika sonrasında, "-50" demek ise sistemin açıldığı an ile ilk 50 dakika arasında,içerisinde anlamları sağlanır. Yukarıdaki 60 gün ile 90 gün arasındaki örneği incelerseniz daha net anlayacaksınızdır. Bir nevi, Matematiksel olarak kesişim kümesi mantığı. Tabi sadece bir değer olursa herhangi bir(1) kesişim sözkonusu olmaz. Bu anlattığımız artı ve eksi durumları bütün opsiyonlarda aynı anlama gelmektedir. Şimdi boyutları 100 MegaByte ile 250 MegaByte arasındaki bütün dosya/klasörleri bulalım.
[alax@alax script]$ find -size +100M -size -250M
Dosya boyutu 100 MegaByte'tan büyük olan dosyaları silelim.
[alax@alax script]$ find -size +100M -exec rm -f {} \;
Son olarak sonu ".txt" ile biten, 1 MegaByte'tan küçük ve herkes tarafından okunabilir dosyaları silelim.
[alax@alax script]$ find -name "*.txt" -size -1M -type f -perm /a=r -exec rm -f {} \;
Eğer bulunan dosya/klasörlerin isimlerini bir dosyaya yazmak isteseydik ">", yada olan bir dosyaya eklemek için ">>" komutunu, komut sonuna dosya adı ile beraber yazmamız gerekecekti. Eğer derslerimizi düzenli olarak takip ediyorsanız, bunları zaten biliyor olmalısınız. Lütfen pratik yapmayı unutmayınız.