Unix tabanlı işletim sistemi kullanıp nimetlerinden faydalanmayan çok insan görüyorum. Özellikle araştırmacı olup windows'a yahut macos'un arayüzüne mahkum olanlar için hızlıca unix felsefesinden bahsederek nasıl işlerinizi daha etkili bir şekilde halledebileceğinizi anlatmaya çalışacağım.

Unix Felsefesi

Unix felsefesi formal bir felsefe değildir. Tecrübeyle geliştirilmiş bir felsefedir. Kusursuz uygulama nasıl yapılır diye bir şey söylemez ya da bir uygulamayı nasıl yapmanız gerektiğiyle ilgilenmez. Unix felsefesi tüm sistemi oluşturan parçalara odaklanır ve bütünleşme üzerine fikirler yürütür.

Unix felsefesinin temelleri şöyledir¹:

Bir uygulama sadece tek bir şeyi iyi yapmalıdır. Bir iş için yeni bir uygulama yapmak, eski uygulamaya özellik ekleyip karmaşıklaştırmaktan daha iyidir.

Bir uygulamanın vereceği çıktı, diğer bir uygulama için girdi verisi olarak kullanılabilmelidir. Çıktıyı gereksiz detay bilgileri ile kirletmeyin. (Detay bilgi dönmesi gerekebilen uygulamalar için -v parametresi ile verbose mod desteği ekleyerek uygulamanın arzu edilirse detaylı çalışmasını sağlayabilirsiniz. Ya da başka bir parametre ile.)

Bir uygulama interaktif girdi beklememelidir. Girdilerini parametre ile ve/veya stdin (başka bir program çıktısı) üzerinden alabilmelidir.

Pipeline

Temel unix felsefesini oluşturan kuralların işleyebilmesi için bilinmesi gereken en önemli şey “Pipe”(|) işaretinin yaptığı iştir. Çünkü bir programın başka bir programdan girdi alarak ilerleyebilmesinin, yani birleştirilebilir olmasının yöntemidir. Türkçe klavyeler için alt işareti ile beraber - işaretine basarak ulaşabilirsiniz. Tam olarak yaptığı iş, solundaki program ne dönerse bunu al sağdaki arkadaşın girdisi olarak kullan.

En basit uygulamalardan birisi ls ile bir örnek yapmak için wc uygulamasını kullanabilirsiniz. ls bulunduğunuz klasördeki veya verdiğiniz klasördeki dosya ve klasörleri listeler, wc ise verilen girdide kelime sayma işlemi yapmanızı sağlar.

ls /usr/bin/|wc -l

Yukarıdaki örnek benim bilgisayarımdaki /usr/bin klasöründe 2369 adet dosya olduğunu söyleyebiliyor. ls e parametre olarak verdiğim klasör her satıra bir dosya-klasör çıktısı olacak şekilde bir metin üretiyor. wc ise -l parametresi ile satırların sayısını istediğimi söylüyor. Sonuçta bana klasörde kaç dosya olduğunu söyleyen bir uygulama elde etmiş oluyorum. İki programın da yapmak için planlanmadığı bir program çıktısı oluştu.

Birisi dosya-klasör gösteren, diğeri ise verdiğin metinde sayma yaparım diyen iki programı birleştirerek, istediğin klasördeki dosya-klasör sayımı yapmamı sağlayan bir program programlayabilmiş oluyorum.

Unix felsefesinin en temelindeki fikir budur.

Mantıksal işlemler

Terminal üzerinde mantıksal işlem yapabilmenize imkan sağlayabilen oparatörler mevcut. AND ve OR işlemler yapmak istediğiniz zaman && ve || operatörlerini kullanabilirsiniz. Yan yana iki uygulama çalıştırmak istiyorsanız ve birbirlerinden bağımsız hareket etsin isterseniz de ; operatörünü kullanabilirsiniz.

Örneğin: cd /missing/dir && ls komutunu çalıştırırsanız ilk komut çalışmayacağı için ikinci komut es geçilecektir. Ancak cd /missing/dir || ls dediğinizde soldaki komut çalışmasa bile ls komutu çalışacaktır.

MAN

Tabi ki unix tabanlı işletim sistemlerinde bu kadar küçük parçalardan oluşan yüzlerce-binlerce küçük uygulama bulunmaktadır. Hepsinin nasıl çalıştığını bilmeniz mümkün değil. Bu yüzden man adında bir uygulama daha mevcut. Geliştirilen uygulamalar için hazırlanmış yardım dökümanlarını görüntülemek için kullanabilirsiniz.

Örnek olarak man ls yazıp çalıştırırsanız, size ls uygulaması hakkında tüm detayı verecektir. Hangi parametreyi alır, hangi işleri yapar, nasıl kullanılır gibi.

Eğer küçük bir hilekarsanız, “bu dökümanlar çok uzun, nasıl kullanıldığını bilsem yeter” derseniz diye tembel yazılımcıların oluşturduğu hile servislerini kullanabilirsiniz. Örnek olarak cheat.sh size yardımcı olabilir. Bunun için curl adındaki, internetten veri almanıza olanak sağlayan bir uygulamayı kullanabilirsiniz.

curl cheat.sh/ls komutunda olduğu gibi adres satırının sonuna öğrenmek istediğiniz uygulamanın adını koymanız yeterlidir. cheat.sh/ls adresine tarayıcınızdan da ulaşabilirsiniz.

$ curl cheat.sh/ # Displays everything in the target directory ls path/to/the/target/directory # Displays everything including hidden files ls -a # Displays all files, along with the size (with unit suffixes) and timestamp ls -lh # Display files, sorted by size ls -S # Display directories only ls -d */ # Display directories only, include hidden ls -d .*/ */

Nasıl kullanayım?

Bu noktaya kadar aslında öğrenmeniz gereken her şeyi öğrendiniz. /usr/bin ve /usr/local/bin klasörleri altındaki çoğu uygulamayı bu yöntemle istediğiniz amaçlar için kullanabilirsiniz.

Örneğin ben sunucumdaki anlık bağlantı sayısını görüntülemek için aşağıdaki gibi bir kod inşa edebilirim:

curl -s http://sunucu_ip/nginx_status|head -n 1|sed -e 's/Active connections: //g'

curl ile sunucumdan anlık veriyi çekiyorum, bana detaylı bir veri çıkartıyor.

Active connections: 300 server accepts handled requests 1544990299 1544990299 1308915160 Reading: 0 Writing: 2 Waiting: 286

Bu veri içerisinden ben head uygulaması ile sadece en üstteki satıra ihtiyacımı belirtiyorum. Buradan dönen sonucu da sed adlı kelime işlemci ile Active connections: yazan kısmı temizleyip sadece sayıya ulaşabiliyorum ki, 20 snyde bir çalışıp çıktısını bilgisayarımın bir köşesinde sürekli göreceğim için elimde sadece sayı olsun.

Araştırmacılar için çok fazla potansiyel sunan unix dünyası, işlerinizi çok hızlı bir şekilde yapmanızı sağlayacaktır. Her araştırma alanı için mevcut olan bir çok unix-felsefesini benimsemiş uygulama mevcut. Örneğin Zorro adındaki uygulama fasta formatında dna verileri için biyologların anlayacağı bir işlem yapıp sonucunu metin olarak dönüyor. Temel kuralları uyguladığı için zorro ile pipelining yaparak birleştirebileceğiniz diğer programlar işlerinizi daha kolay yapabilir hale geleceksiniz.

Buna benzer uygulamaları alanınıza göre zamanla öğrenerek, işlerinizi daha kolay halledebilir hale geleceksiniz.

Alan bağımsız

Tabi alanınızdan bağımsız olarak kurcalamanızı önereceğim bazı, her unix türevinde bulunan uygulamalar mevcut. Her uygulamada man için hazırlanmış dökümanlar olmayabiliyor. Ancak her uygulama -h parametresi ile çalıştırıldığında temel bir yardım dökümanı sunuyor.

cd klasör değiştirmenizi, ls dizin içeriği görüntülemenizi, pwd nerede olduğunuzu bilmenizi sağlar. mkdir , touch , cp , rm , mv , ln dosyalara ve klasörlere müdahale etmenizi sağlar. head , tail , less , more , cat dosyaların içeriklerini almanızı sağlar. curl , wget internetteki dosyalara erişmenize yardım eder.

uniq , sort , wc , diff , cmp , cut , sed metinlerle işlem yapmanızı sağlarken awk , grep ise metinler içerisinde desen aramanızı ve/veya işlem yapmanıza olanak sağlar.

/usr/bin ve /usr/local/bin klasörünüzü kurcalayarak diğer uygulamalar da ulaşabilirsiniz.

1: https://homepage.cs.uri.edu/~thenry/resources/unix_art/ch01s06.html

#unix #tr #bash #linux-101