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.

Screen Shot 2022-02-04 at 23.32.19.png

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

Screen Shot 2022-02-04 at 23.35.42.png

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.

Screen Shot 2022-02-04 at 23.39.32.png

* (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

Screen Shot 2022-02-04 at 23.43.29.png

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.

Screen Shot 2022-02-04 at 23.50.05.png

Bu dosyayı sort komutuna verdiğinizde aşağıdaki gibi bir çıktı ile karşılaşıyoruz.

sort ./sort-example

Screen Shot 2022-02-04 at 23.50.47.png

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.

Screen Shot 2022-02-04 at 23.53.55.png

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

Screen Shot 2022-02-05 at 00.12.14.png

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

Screen Shot 2022-02-05 at 00.40.28.png

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

Screen Shot 2022-02-05 at 00.44.18.png

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

Screen Shot 2022-02-05 at 00.45.54.png#