Ana sayfa » Linux’ta Yaygın Olarak Kullanılan Filtreleme Komutları
Linux

Linux’ta Yaygın Olarak Kullanılan Filtreleme Komutları

Linux’ta Filtreleme Komutları

Bir önceki yazımda linux’ta man page kavramının ne olduğuna ve nasıl kullanıldığına değinmiştim. Bugünkü yazımda ise sizlere sistem yöneticileri tarafından bir hayli kullanılan ve gerçekten çok faydalı olduğuna inandığım filtreleme komutlarından bahsedeceğim. Peki bu filtrelemeden ne kast ediyorum? Aslında kast ettiğim şey şu; bazen bir komut yazarız ve o komutun bazı öğeleri alıp değerlendirmesini istemeyiz veya bazı öğeleri alıp sadece onları değerlendirmesini isteyebiliriz. İşte bu ve buna benzer görevler için linux’ta birçok komut var ve bizlerde bugün bu komutların içinden en yaygın olanlarını örnekler ile göreceğiz. Biliyorum bu tanımlama sizin için yeterli doygunlukta olmayabilir, lakin örneklere geçtiğimizde tam olarak neden bahsetmek istediğimi anlayacaksınız. Lafı daha fazla uzatmadan ilk komutumuz olan cut ile konumuza giriş yapalım.

Cut Komutu

Elimizde bir text dosyası olduğunu varsayılım ve bu text dosyasının ben sadece her satırının 7. kelimesini alıp ekrana basmak istiyorum. İşte bu işlemi yapabilmek için cut komutunu kullanacağız. Aşağıdaki örneği ve ekran çıktısını inceleyelim.

cut -d: -f7 /etc/passwd

cut -d: -f7 /etc/passwd //Kullandığımız komut
//Çıktılar
/bin/bash
/usr/bin/nologin
/usr/bin/nologin
/usr/bin/nologin
/usr/bin/nologin
/usr/bin/nologin
/usr/bin/nologin
/usr/bin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/false
/sbin/nologin
/bin/nologin
/usr/bin/nologin
/usr/bin/nologin
/usr/bin/nologin
/bin/false
/bin/false
/sbin/nologin
/bin/bash
/bin/false
/usr/bin/nologin
/bin/bash
/bin/bash
/bin/false
/sbin/nologin

Yukarıda ekran çıktısı verilen komutun parametlerini incelediğimiz vakit “-d” parametresi ile seperator yani ayırıcıyı belirtmiş oluyoruz. Yani bu örnekte her bir satırı “:karakterine göre ayır diyoruz. Diğer parametremiz olan “-f” ile de, ayrılmış olan kelimelerden hangisinin alınacağını seçiyoruz. Bunu kafanızda şöyle canlandırabilirsiniz. Programlama dillerinde bir array oluşturduğunuzu düşünün. Hatta bu array yani dizimiz [1,2,3,4,5,6,”/usr/bin/nologin/”] olsun. Bu diziden hangi elemanın seçileceğimiz -f parametresi ile seçiyoruz. Yukarıda yaptığımız işlemi kafanızda otutturabilmeniz için bu örneği hatırlayabilirsiniz. Eğer elinizde olan metni boşluklara göre ayırmak istiyorsanız aşağıdaki komutu kullanabilirsiniz.

cut -d” ” -f7 <dosya adı>

Sort Komutu

Bir sonraki komutunuz ise sort komutudur. Adında da anlaşılacağı üzere bu komut vasıtası ile linux’ta sıralama işlemleri yapabiliyoruz. Mesela elimizde bir text dosyası bulunsun ve bu text dosyasının her bir satırı alfabe sırasına göre yeniden sıralansın. İşte bu isteğimizi sort komutu vasıtası ile yerine getiriyoruz. Örneğe geçmeden önce sort komutunun parametrelerine kısaca bir göz atalım.

sort commands

Yukarıdaki görselde sort komutunun en çok kullanılan parametreleri ve açıklamaları yanında verilmiştir. Tabiki parametreler yukarıda gösterilen kadar değil elbette. Diğer parametreleri ve açıklamaları öğrenmek için sort komutunun manuel pagesini okumanızı tavsiye ederim. Aşağıdaki komutu inceleyelim.

sort /etc/group

sort /etc/group //Kullandığımız komut
//Çıktılar
adm:x:4:
arpwatch:x:125:
audio:x:29:pulse
backup:x:34:
beef-xss:x:136:
bin:x:2:
bluetooth:x:124:
cdrom:x:24:
couchdb:x:128:
crontab:x:107:
daemon:x:1:
Debian-exim:x:111:
Debian-snmp:x:116:
dialout:x:20:
dip:x:30:
disk:x:6:
dradis:x:135:
epmd:x:110:
fax:x:21:
floppy:x:25:
games:x:60:
gnats:x:41: //Bir alt satırdaki noktalar atlama yapıldığını göstermektedir.
.
.
.
users:x:100:
utmp:x:43:
uucp:x:10:
uuidd:x:113:
vboxsf:x:137:
video:x:44:
voice:x:22:
www-data:x:33

Yukarıdaki komutumuzu incelemeden önce çıktımızın nasıl şekillendiğine dikkat etmenizi istiyorum. Eğer her bir satırın baş harfine bakarsanız, çıktımızın alfabe sırasına göre sıralandığını göreceksiniz. İşe birazcık renk katmak için aşağıdaki komutu incelemenizi istiyorum.

sort -t: -k4,4 /etc/group

sort -t: -k4,4 /etc/group //Kullandığımız komut
//Çıktılar
adm:x:4:
arpwatch:x:125:
backup:x:34:
beef-xss:x:136:
bin:x:2:
bluetooth:x:124:
cdrom:x:24:
couchdb:x:128:
crontab:x:107: //Bir alt satırdaki noktalar atlama yapıldığını göstermektedir.
.
.
.
users:x:100:
utmp:x:43:
uucp:x:10:
uuidd:x:113:
vboxsf:x:137:
video:x:44:
voice:x:22:
www-data:x:33:
ssl-cert:x:118:postgres
audio:x:29:pulse

Bu çıktıyı incelediğiniz vakit ilk çıktımıza nazaran sanki bir değişiklik yok gibi görmüş olabilirsiniz. Lakin arada önemli bir fark var. Fark ise şu; şimdi kullandığımız “-t” parametresi ile çıktımızı “:” karakterine göre ayırdık. Daha sonra “-k4,4” parametresini kullanarak “her bir satırın 4. kelimesini ele alarak sıralama” yapmasını söyledik. Dikkat ederseniz 23. ve 24. satırlarda 4. kolondaki kelimelerin alfabe sırasına göre sıralandığı göreceksiniz. Ayrıca üstteki diğer satırların ise 4. satırları boş olduğu için 1. kolona göre sıralama yapmıştır. Sort ile ilgili daha birçok komut ve varyasyon var. Bunları kendiniz de deneyerek öğrenebilirsiniz. Son olarak aşağıdaki komutu da inceleyelim ve bir diğer komutumuza geçelim.

sort -t: -k3,3 -n /etc/group

sort -t: -k3,3 -n /etc/group //Kullandığımız komut
//Çıktılar
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
.
.
.
lightdm:x:133:
kpadmins:x:134:
dradis:x:135:
beef-xss:x:136:
vboxsf:x:137:
inetsim:x:999:
nogroup:x:65534:

Yukarıdaki komutu incelediğimiz vakit ise “-n” ve “-k3,3″ parametrelerinden dolayı 3. kolondaki sayılar küçükten büyüğe doğru sıralanmışlardır.

Uniq Komutu

Uniq komutunun man page kısmına baktığımız zaman name kısmında “uniq – report or omit repeated lines” cümlesi yazar. Yani tekrar eden satırları bildir veya ihmal et. Adın da anlaşılacağı üzere uniq komutu, bir dosyanın içeriğinden emsalsiz satırlar elde etmemizi sağlar. Ayrıca “-u” parametresi yardımı ile de aranılan dosyanın içinde bir kere geçen satırları bulmamıza yarar. Bunun yanında hangi satırın kaç kere bulunduğu, birden fazla geçen satırların neler olduğu gibi çıktıları da rahatlıkla uniq komutu vasıtası ile öğrenebiliriz. Dikkat edilmesi gereken bir diğer konu ise şu; uniq komutunu kullanmadan önce mutlaka çıktının sort komutu ile sıralanmış olması gerekmektedir. Aksi halde sağlıklı sonuçlar elde edemezsiniz. Bu sebepten dolayı uniq ile sort komutları genelde hep beraber kullanılırlar. Aşağıdaki komutumuzu inceleyelim.

cut -d: -f7 /etc/passwd | sort | uniq

cut -d: -f7 /etc/passwd | sort | uniq //Kullandığımız komut
//Çıktılar
/bin/bash
/bin/false
/bin/nologin
/sbin/nologin
/usr/bin/nologin

Öncelikle burada /etc/passwd dosyasının içeriğini cut komutu ile parse ettik, daha sonra sort komutu ile alfabetik sıraya göre sıraladık, en son olarakda uniq komutu ile ekrandaki çıktıyı elde ettik. Şimdi uniq komutunun burada ne iş yaptığını anlamak için cut -d: -f7 /etc/passwd | sort komutunu yazmanızı ve çıktıyı incelemenizi istiyorum. Çıktıya baktığınız vakit /bin/bash satırından 4 adet, /usr/bin/nologin satırından ise 16 adet olduğunu göreceksiniz. İşte bunları 4 kere veya 16 kere değilde 1 kere çıktı olarak almamıza yarayan komutumuz uniq komutudur. Şimdi de uniq komutunun “-c” parametresini bir inceleyelim.

cut -d: -f7 /etc/passwd | sort | uniq -c

cut -d: -f7 /etc/passwd | sort | uniq -c //Kullandığımız komut
//Çıktılar
4 /bin/bash
5 /bin/false
1 /bin/nologin
6 /sbin/nologin
17 /usr/bin/nologin

Burada gördüğünüz gibi “-c” yani “count” parametresi ile bir dosyanın içinde hangi satırın kaç kere geçmiş bunu görebiliyoruz. Şimdi ise “-u” parametresini inceleyelim.

cut -d: -f7 /etc/passwd | sort | uniq -u

cut -d: -f7 /etc/passwd | sort | uniq -u
/bin/nologin

Çıktıdan da anlaşılacağı üzere “-u” parametresi ile unique yani bir kere geçen emsalsiz olan satırları çıktı olarak alabiliyoruz. Parametre kısmı daha da uzatılabilir. Lakin ben burada bırakmak istiyorum. Ayrıca “-d” parametresi ile de “-u” parametresinin tam tersi işlemini gerçekleştirebilirisiniz. Yani birden fazla geçen tüm satırları çıktı olarak alabilirsiniz. Burada uniq komutu satırlara göre işlem yapmaktadır. Daha sonra işlenecek olan grep komutu ile karıştırılmamalıdır. Çünkü grep komutu kelime ve kelime gruplarına göre text işaretleme işlemi yapmaktadır.

Wc Komutu

Basit olduğu kadar bir o kadar da etkili bir komuttur wc komutu. Açılımı “word count” şeklindedir. Yaptığı iş, bir dosyadaki satırları, kelimeleri ve karakterleri sayarak çıktı olarak ekrana veya istediğiniz yere verir. Bir örnek ile açıklayacak olursak;

wc /etc/passwd

wc /etc/passwd //Yazdığımız komut
//Çıktımız
33   54 1742 /etc/passwd

Burada 33 satır sayısını, 54 kelime sayısını, 1742 ise karakter sayısını göstermektedir.

Head ve Tail Komutları

Linux’ta dosyaların içeriklerinin bazen hepsini çıktı olarak almak istemeyiz. Bize lazım olan kısım belki son 20 satırda veya ilk 10 satırda olabilir. Bu durumda şimdiye kadar öğrendiğimiz komutlar pek bir işe yaramayacaktır. Neyseki bu işlemleri head ve tail komutları vasıtasıyla çok rahat bir şekilde yapabiliriz. Örnekleri denemek açısından home klasörümün altında deneme adında bir dosya oluşturdum ve içine 1. satırdan 20. satıra kadar “n. satır” şeklinde yazılar yazdım. Şimdi bu dosyayı kullanarak head komutunu bir örnek ile inceleyelim.

head deneme

head deneme //Komutumuz
//Çıktılarımız
1. satır
2. satır
3. satır
4. satır
5. satır
6. satır
7. satır
8. satır
9. satır
10. satır

Çıktı da gördüğünüz gibi dosyamız da 20. satıra kadar yazı bulunmasına rağmen ilk 10 satırı çıktı olarak ekrana bastı. Bu head komutunun bizlere sağladığı bir özelliktir. Ayrıca head -5 deneme diyerek ilk 5 satırı da ekrana çıktı olarak basabilirdik.

tail deneme

tail deneme //Komutumuz
//Çıktılar
11. satır
12. satır
13. satır
14. satır
15. satır
16. satır
17. satır
18. satır
19. satır
20. satır

Burada ise gördüğünüz gibi son 10 satırı ekrana çıktı olarak bastık. Ayrıca aynı head komutunda da olduğu gibi “-5” gibi paramatre belirterek son “n. satırı” ekrana bas şeklinde belirtebiliriz. Son olarak tail komutunun “-f” parametresi ile bir dosyanın en son çıktılarını güncel bir şekilde takip edebiliriz. Bu parametre sistem yöneticileri tarafından bir hayli kullanılan bir parametredir. Mesela linux’ta log dosyaları sürekli olarak belli başlı dosyalara yazılır. Bu dosyaları aktif bir şekilde izlemek için “-f” parametresi kullanılabilir.

Grep Komutu

Bütün bu komutlar içerisinde belki de en önemlisi diyebiliriz grep komutu için. İsmi “g/regular-expression/p” kelimesinden gelmektedir. Bu komut ile belirli bir kelime veya kelime grubunun belirtilen dosya içinde olup olmadığını, kaç kere geçtiğini vb. çıktıları rahatlıkla alabiliriz. Örneklerin anlaşılır olması için home klasörüm altında 7 tane dosya oluşturdum ve bunların içine belli başlı şeyler yazdım. Şimdi aşağıdaki örnekleri inceleyelim.

grep -i pio deneme1

Ekran çıktısında gördüğünüz gibi “-i” parametresi ile belirtilmiş olan kelime “deneme1” dosyasında aranmış ve bulunduğu yerler kırmızıya yakın bir renkle çıktı olarak ekrana verilmiştir.

grep -v pio deneme1

grep -v command

Burada ise “-v” komutu yardımı ile “pio” kelimesi geçmeyen tüm satırları ekrana basmasını sağladık. Bu örnekte sadece kazım yazılı satırda “pio” kelimesinin geçmediğini rahatlıkla görebiliyoruz.

grep -c pio deneme*

Son göstereceğim “-c” parametresi ile de belirtilen “pio” kelimesinin deneme ile başlayan dosyaların içinde kaç defa geçtiğini rahatlıkla öğrenebiliriz.

Linux’ta kullanılan filtreleme komutları ile ilgili yazımı burada bitiriyorum. Umarım faydalı olmuştur, bir sonraki yazımda görüşmek üzere.

Yazar Hakkında

Hakan İlbiz

Siber güvenlik, linux, programlama ve network gibi bilgisayar bilimlerini kapsayan alanlarda yaptığı çalışmalardan edindiği tecrübeleri, kurucusu olduğu kodputer.com adlı web sitesinde okurlarına sunan ve bundan büyük bir haz duyan Sakarya Üniversitesi Bilgisayar Mühendisliği öğrencisi.

Yorum Ekle

Yorum Yazmak İçin Tıkla