Basit Terminal Kullanımı 2
Kısa bir aradan sonra serimize kaldığımız yerden devam ediyoruz. Bir önceki yazımızda basit olarak terminal kullanımından bahsetmiştik. Terminal kullanarak bilgisayarınızda, özellikle dosya sisteminizde yapabileceğiniz çeşitli aksiyonları göstermiştik. Başlangıçta benzer aksiyonları arayüz üzerinden yapabildiğimiz için bu komutlar size basit ve kullanışsız gelebilir. Bu bölümde ise oldukça basit olan bu komutları birleştirerek daha güçlü betikler hazırlayacağız.
Çalışma ortamının hazırlanması#
Öncelikle bu bölümdeki komutları deneyebilmeniz için bir laboratuvar ortamı yaratmanız gerekiyor. Bunun için bilgisayarımda ~/shell-data/texts
isminde bir klasör oluşturdum, ardından bu klasörde içerisinde farklı sayıda satır bulunan 10 adet dosya oluşturdum.
Bu çalışmadaki hedefimiz, çeşitli komutlar kullanarak bu klasörün içerisindeki en az ve en çok satıra sahip dosyaları bulabilmek.
wc (word count)#
Problemimizi çözmemiz için ilk ihtiyacımız olan komut, bir dosyanın içerisinde kaç adet satır, kelime ve karakter olduğunu söyleyen wc
komutudur.
wc file-1.txt
Yukardaki örnekte gördüğünüz gibi wc
komutuna file-1.txt
dosyasını parametre olarak geçtiğimizde, o dosya içerisinde sırasıyla satır, kelime ve karakter sayısını gösteriyor.
Bizim problemimiz için ise sadece satır sayısı yeterli olacak. Bu durumda -l
parametresini kullanarak sadece satır sayısını alabiliriz. Kullanabileceğiniz diğer argümanları görmek isterseniz her zaman man
komutunu kullanabilirsiniz.
* (wildcard)#
Bir önceki bölümde sadece file-1.txt
dosyasının satır sayısını elde etmiştik, ancak bizim tüm dosyaların satır sayılarına ihtiyacımız var. Bu durumda *
operatörünü kullanabiliriz.
wc -l *.txt
Gördüğünüz gibi uzantısı txt olan tüm dosyaların içerisindeki satır sayılarını listeleyebiliyoruz.
sort#
Bizim ihtiyacımız olan dosya en az ve en çok satıra sahip olan dosyalar olduğu için elimizde satır sayıları bulunan bu çıktıyı bir şekilde sıralamamız gerekiyor. Bu noktada bir diğer komutumuz olan sort
komutumuz devreye giriyor. Problemimizden bağımsız olarak öncelikle sort
komutunun nasıl çalıştığına bakalım.
Elimizde içerisinde 1’den 10’a kadar sayıların rastgele bulunduğu bir dosya olduğunu düşünelim.
Bu dosyayı sort
komutuna verdiğinizde aşağıdaki gibi bir çıktı ile karşılaşıyoruz.
sort ./sort-example
Gördüğünüz gibi sıralamayı yapıyor ancak satırları alfanümerik olarak değerlendirdiği için bazı hatalar oluşuyor. Bu satırları nümerik olarak değerlendirmesi için -n
argümanını kullanabilirsiniz.
pipe#
Elimizde dosyaların satır sayılarını gösteren ve bazı verileri sıralamamızı sağlayan iki adet komut bulunuyor. Yapmamız gereken ise ilk komutumuzdan elde ettiğimiz sonuçları ikinci komutumuza girdi olarak aktarmak. İşte bu noktada komut satırını inanılmaz güçlü kılan pipe (|) operatörünü görüyoruz.
Aslında şu ana kadar gördüğümüz tüm komutlar birer uygulama ve bu uygulamaları geliştirenler, geliştirme esnasında bazı standartlara ve kurallara sadık kaldılar. Bu sayede görevleri çok basit ve sade olan bu uygulamalar daha karmaşık problemlerin çözümü için bir araya gelerek uyum içerisinde çalışabiliyor.
Kendi problemimize dönecek olursak, wc
komutundan aldığımız çıktıyı, sort
komutuna girdi olarak aşağıdaki gibi gönderebiliriz.
wc -l *.txt | sort -n
head ve tail#
Problemi çözmeye oldukça yaklaştık. Öncelikle en az satıra sahip dosyanın adını çıkarmaya çalışalım bu durumda en üstteki satır bize bu sonucu verecektir. Bir önceki komuttan çıkan sonucun en üst satırını almak için head
komutunu kullanabiliriz.
wc -l *.txt | sort -n | head -n 1
Gördüğünüz gibi problemimizin bir kısmını çözdük.
En çok satıra sahip olan dosyayı bulmak için de sondan 2. satırı dikkate almalıyız. Bu durumda da tail
komutunu kullanabiliriz.
wc -l *.txt | sort -n | tail -n 2
Ancak bu durumda tüm satırların toplamının gösterildiği son satırdan kurtulamadık, tekrardan head komutunu kullanarak sadece ilk satırı alabiliriz.
wc -l *.txt | sort -n | tail -n 2 | head -n 1
#