33
Konuya ait anahtar kelimeler : head, tail, more, less head : Türkçe "Baş, üst" anlamlarına gelmektedir. Girdi olarak sunulan verilerin üst kısımlarından belirtilen parametre ve değerlerde veri çekme işlemi yapar. Mesela 10 satırdan oluşan bir text dosyasından, yukarıdan itibaren 5 satırı çekme işlemi gibi işlemleri yapmada kullanılır. Kullanım şekli; head [opsiyonlar] [dosya] şeklinde olmaktadır.
-cVeri içerisinde yukarıdan itibaren kaç BYTE çekileceği.
-nVeri içerisinde yukarıdan itibaren kaç satır çekileceği. Kullanılması şart değil.
-qDosya başlık bilgilerini, dosya türü vb.. sakla. Varsayılan.
-vDosya başlık bilgilerini göster.
Şimdi içerisinde İstiklal Marşı'mızın ilk iki dörtlüğünün olduğu bir dosya üzerinde örnekler yapalım. Önceki derslerimizde "link" adında bu tarz bir dosya oluşturmuştuk. Çalışma dizinine girelim. "head -n 5 dosya_adi" ile "head -5 dosya_adi" aynı anlama gelmektedir. Şimdi aşağıdaki örnekeleri inceleyiniz. Yukarıdaki opsiyonları birer birer kullanalım.
[alax@alax script]$ head -4 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. [alax@alax script]$ head -n 4 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. [alax@alax script]$ head -c 98 link # İlk 98 byte ı çekiyoruz. Korkma, sönmez bu şafaklarda yüzen al sancak; Sönmeden yurdumun üstünde tüten en son ocak. [alax@alax script]$ head -v -c 98 link # Dosya başlık bilgisini de göster. ==> link <== Korkma, sönmez bu şafaklarda yüzen al sancak; Sönmeden yurdumun üstünde tüten en son ocak. [alax@alax script]$
tail : Türkçe "kuyruk, arka kısım" anlamına gelmektedir. "head" komutunun zıttı olarak alt taraftan veri çekme işlemi yapmaktadır. Parametre olarak fazladan bir kaç parametre daha alabilmektedir.
-cVeri içerisinde aşağıdan itibaren kaç BYTE çekileceği.
-nVeri içerisinde aşağıdan itibaren kaç satır çekileceği. Kullanılması şart değil.
-qDosya başlık bikgilerini, dosya türü vb.. sakla. Varsayılan.
-vDosya başlık bilgilerini göster.
-fDosya içeriğini canlı olarak göster, yani siz bir dosyayı tail ile Terminal ekranında açtınız diyelim ve diğer taraftan dosyaya eklemeler oluyor, eklemeleri Terminal ekranında canlı olarak görebilirsiniz. En güzel opsiyonlarından bir tanesi.
--retryEğer dosyaya erişim yok ise tekrardan dene, dosya yeni oluşturulmuş olabilir, kontrol et.
--versionVersiyon bilgilerini göster.
Şimdi "link" dosyası üzerinde bir kaç örnek yapalım.
[alax@alax script]$ tail -2 link Sana olmaz dökülen kanlarımız sonra helâl, Hakkıdır, Hakk'a tapan, milletimin istiklâl! [alax@alax script]$ tail -v -n 2 link ==> link <== Sana olmaz dökülen kanlarımız sonra helâl, Hakkıdır, Hakk'a tapan, milletimin istiklâl! [alax@alax script]$
Şimdi ikinci bir Terminal açınız ve çalışma dizini içerine giriniz ardından ilk Terminal ekranından "tail -f link" komutunu çalıştıralım, örneği iki Terminal ekranınıda görecek şekilde ekrana sığdırınız. İlk Terminal ile;
[alax@alax script]$ tail -f 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!
Şimdi ikinci Terminal ile "link" dosyasına "Mehmet Akif ERSOY" ismini ekleyelim, bu arada ilk Terminal ekranınıda görünüz.
[alax@alax script]$ echo "Mehmet Akif ERSOY" >> link [alax@alax script]$
Şu anda ilk Terminal ekranı aşağıdaki gibi görünecektir.
[alax@alax script]$ tail -f 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! Mehmet Akif ERSOY
"Ctrl+C" ile çıkış yapınız ve ikinci Terminal'i kapatabilirsiniz. "-f" parametresi bir nevi dosya içeriğini güncelleyerek yazdırmaktadır. Eğer açmayı istediğiniz dosya yok ise, yada henüz oluşturulmamış ise komut sonuna "--retry" komutunu ekleyerek sürekli, tekrar denemesini sağlayabilirsiniz. Not : "head" ve "tail" ile satır numaralarını + yada - ile belirterek de kullanabilirsiniz. Mesela "tail -n +2 dosya_adi" komutunun anlamı "Dosya içeriğini yukarıdan ikinci satırdan itibaren aşağı doğru çek.", yada "head -n -2 dosya_adi" komutunun anlamı, "Dosya içeriğini yukarıdan itibaren, aşağıdan iki satıra kadar çek." anlamlarına gelmektedir. Kendiniz örnek yaparak bu kullanımları daha iyi görebilirsiniz. more : Türkçe "daha, daha fazla" anlamlarına gelmektedir. Uzun bir dosyayı açmak istediğiniz zaman bütün yazılar birden önünüze açılır ve öününzde son satırların olduğu kısımları görürsünüz. Bu gibi durumlarda "more" kullanarak önce ekrana sığabilecek kadar veriyi ekrana yazdırıp daha sonra ENTER ile birer birer satır atlatma yapabilirsiniz. Örneğin çalışma dizini içerisindeki dosya/klasörleri "more" ile listeleyelim.
[alax@alax script]$ ls | more a_dosya.txt awkex awk.txt case_örnek.sh case_sayı.sh degisken.sh _dosya.txt echo_read.sh elif_örnek.sh elif_sayı.sh fonksiyon.sh for_asalsayı.sh for_dosya.sh for_grep.sh.save for_grep.sh.save.1 for_sayı.sh hata.txt if_büyükküçük.sh if_dosyakontrol.sh if_klasörkontrol.sh if_kullanıcı.sh if_örnek.sh kilitli --More--
Şimdi ENTER tuşuna basarak görünmeyen dosya/klasörleri birer birer görebilirsiniz. Herhangi bir satır numarasından itibaren veri çekme işlemi; more +satir_numarası dosya_adi şeklinde olmaktadır. Şimdi "link" dosyası içeriğini 3. satırdan başlayarak ekrana yazdıralım.
[alax@alax script]$ more +3 link 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]$
Belirli bir kelime ile başlayan satırı içeren kısımdan itibaren veri çekme işlemi; more +/"kelime" dosya_adi şeklinde olmaktadır. "link" dosyası içerisinde "Kahraman" kelimesi ile başlayan satırdan itibaren verileri çekelim.
[alax@alax script]$ more +/"Kahraman" link ...skipping Ç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]$
Yukarıdaki örnekte "Kahraman" kelimesi ile başlayan satırın bulunmadığı önceki kısımlar atlanıyor, önceki iki satır hariç. Eğer "Kahraman" kelimesi beşinci satırda bulunsa idi, o zaman üçüncü satır dahil ekrana yazdırılacaktı, geri kalan satırlar atlanacaktı. less : "less" komutu birçok parametre ve opsiyon alabilmektedir. Biz en sık kullanılan opsiyon ve parametreleri göstereceğiz. "less" komutu verileri geriye doğru ilerleterek işleme alır. Öyle ki, bir dosyayı açmaya çalıştığı zaman dosyanın tamamını açıp sonra işlemlere geçmez, herhangi bir text editör programı(mesela vi) dosyayı açaçağı zaman dosyanın hepsini yükledikten sonra açma işlemi yapar, fakat "less" komutu bunun aksine dosyayı tamamiyle ele almaz sadece istenilen, belirtilen kısımlarını işleme alır. Bu yüzden "less" diğer kelime işlemcilerden daha hızlıdır. Performans açısından daha iyidir. Kullanımı "Vi" programına benzemektedir. "more" ile kıyaslandığında "less" daha iyidir.
uSayfa yarı yukarı.
dSayfa yarı aşağı.
kBir satır yukarı.
jBir satır aşağı.
-iBüyük küçük harf duyarlılığı.
qÇıkış yap.
/ /kelime/ "kelime" yi ara, bul.
-p /kelime/"kelime" olan yerden dosyayı aç.
& /kelime/"kelime" nin olduğu satırları göster.
^f yada SpaceBir sayfa aşağı.
^bBir sayfa yukarı.
GSayfa sonuna git.
gSayfa başına git.
nKelime aramaya aynı yönde devam et.
NKelime aramaya aynı ters devam et.
-NSatır numaralarını göster.
-GAranılan kelimelerin renkli gösterilmesini aç/kapat.
Ve daha birçok "less" opsiyonu bulunmaktadır. En sık kullanılan bazı opsiyonlar bunlardır. Komutların kullanımı, "less dosya_adi" şeklinde dosya açıladıktan sonra da herhangi bir komut harfine tıklayarak kullanabilirsiniz. Mesela dosya açıldıktan sonra "q" harfine basarsanız çıkış yapar, "-N" ile satırları numaraları ile gösterir, "& /aranan_kelime" ile aradığınız kelimeleri satırları ile beraber bulur gösterir, "G" ile sayfa sonuna gider, "g" ile sayfa başına gider, "53g" ile 53. satıra gider vb.. Diğer bütün opsiyonları kendiniz deneyerek daha iyi görebilirsiniz. Sadece bir dosya açınız ve opsiyonları deneyin. Şimdi "link" dosyasını "Kahraman" kelimesinin olduğu satırdan itibaren yazdıralım.
[alax@alax script]$ cat link | less -Ip 'Kahraman' 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! ~ ~ ~ ~ (END) [alax@alax script]$
Şimdi "link" dosyasını satır numaraları ile açarak "gül" kelimesini arayalım. Opsiyonları dosyayı açtıktan sonra kullanabileceğiniz gibi dosyayı açarkende kullanabilirsiniz, böylece dosya ilk açılışını istediğiniz özellikler ile gerçekleştirir.
[alax@alax script]$ less -N link 1 Korkma, sönmez bu şafaklarda yüzen al sancak; 2 Sönmeden yurdumun üstünde tüten en son ocak. 3 O benim milletimin yıldızıdır, parlayacak; 4 O benimdir, o benim milletimindir ancak. 5 6 Çatma, kurban olayım, çehreni ey nazlı hilâl! 7 Kahraman ırkıma bir gül! Ne bu şiddet, bu celâl? 8 Sana olmaz dökülen kanlarımız sonra helâl, 9 Hakkıdır, Hakk'a tapan, milletimin istiklâl! link (END) # "/gül" yada "& /gül" yazıyoruz ve ENTER a basıyoruz. 7 Kahraman ırkıma bir gül! Ne bu şiddet, bu celâl? 8 Sana olmaz dökülen kanlarımız sonra helâl, 9 Hakkıdır, Hakk'a tapan, milletimin istiklâl! ~ ~ ~ ~ ~ ~ ~ ~ (END) # q ile çıkış yapıyoruz. [alax@alax script]$
"less" ile dosyalar üzerinde herhangi bir düzenleme yapamazsınız. "v" tuşuna basarsanız varsayılan olarak ayarlı olan text editör programınız ile dosya, düzenlenmek üzere açılacaktır. Daha fazla bilgi için "less" man sayfasına bakabilirsiniz. "man less".