Bomboş Linux Komutları — 1

Mahmut Gür
4 min readJan 19, 2021

Merhabalar, bu yazıyı yazmamdaki asıl amaç, Linux terminalindeki operatörleri, araçları ve bilumum kullanışlı şeyleri, direkt komutlar üzerinden anlatmaktır. Çünkü aşağıda yazacağım komutlar gereksiz ya da zararlı olmalarının yanında öğretici olabilecek şeyler de içermektedir. Bu yazı serisinde komutları detaylı bir şekilde inceleyeceğim. Bu şekilde komut içerisinde kullanılan araçların net bir şekilde anlaşılabilmesini amaçlıyorum.

ls; clear
Terminali açtık, yukarıdaki komutu girdik ve enter tuşuna bastık. Bir de ne görelim. Hiçbir şey olmamış. Şimdi biraz bu komutu inceleyelim, bakalım neden bir şey olmamış. Öncelikle komutun içerdiklerini inceleyelim.
ls: Bulunduğumuz dizindeki gizli olmayan dosya ve dizinleri listeler.
clear: Terminal ekranını temizler.
;: Öncesindeki komutu çalıştırır ve bir sonraki komuta geçer. Aslında bu kısımda değinmek istediğim nokta da bu.
Örneğin ls; clear yerine ls clear yazsaydık ls komutu listelemek için, bulunduğumuz dizinde clear adında bir şey arayacaktı. Eğer clear adında bir dosya ya da dizin arayacaktı ve bulamazsa hata verecekti. Araya ; koyduğumuzda ise ls komutunu çalıştırdıktan sonra clear komutunu çalıştırarak ekrana basılan şeyleri temizler. ls çalıştıktan sonra clear çalıştığı için biz hiçbir şey olmamış gibi görürüz ama aslında çoktan ls çalışmıştır ve ekran temizlenmiştir. Yani “;” operatörünün görevi, bir önceki komutu bitirmektir.

:(){ :|: & }; :
Bu komut tüm çalışmalarımızı kaydetmeden kesinlikle çalıştırmamamız gereken bir komuttur. Çünkü bu komutu verdikten sonra sistemimizin kilitlenmesi çok uzun sürmeyecektir. Peki neden?
Bu komutun en iyi açıklaması GORA filminde, Garavel tarafından (evet tarafından) yapıldı. Sende olanı sana koyucaz.
Aslında bu komut hepimizin bildiği meşhur fork bomb. Bu şekliyle anlaşılması biraz zor olasa da “:” yerine “bombos” yazarsak ve komutu tek satırda yazmazsak daha anlaşılabilir bir hal alıyor.

Çatal bombası

Yandaki görselde net bir şekilde görebileceğimiz gibi bizim fork(çatal) bombamız aslında bir recursive fonksiyon. Yani bu fonksiyon kendi kendini çağırıyor. Yukarıda GORA filminden alıntıladığım replik de buradan geliyor. Çünkü bu fonksiyon kendi kendini çağırıp, kendini kendine aktarıyor. Biliyorum, cümle biraz anlamsız oldu. Bu cümleyi anlamlandırabilmek adına değinmem gereken 3 konu var.

1- | (Pipe)
2- & (Ampersand)
3- Fonksiyon

1- | (Pipe)
Pipe, Linux dahilindeki en kullanışlı ve kullanması en keyifli araçlardan birisidir. Temel olarak yaptığı işlem pipedan önceki komutun çıktısını alır ve pipe sonrasındaki komuta aktarır. Pipe ismi çok manidardır. Çünkü gerçekten bir boru ne yapıyorsa pipe da onu yapar. Yani bir öncekinden bir sonrakine aktarımı sağlar.
Örneğin “cat textdosyasi.txt | head -n 10 | grep test” komutunu ele alalım. Komutun yaptığı işlem, textdosyasi.txt dosyasının ilk 10 satırında test kelimesini aratmaktır.

Pipe kullanımına örnek.

2- &
Ampersand işareti girilen komutun arka planda çalıştırılmasını sağlar. Hemen bir örnek ile açıklayalım.

& kullanımına örnek

Yukarıdaki görselde görüldüğü üzere terminale 12000 saniye beklemesi için komut girdim fakat 12000 saniye geçmeden terminalde yeni bir komut girebildim. Normalde tekrardan komut girebilmem için 12000 saniye geçmesi gerekirdi fakat “&” kullandığım için enter tuşuna bastığım anda yeni komut girebileceğim satır karşıma geldi. Aynı zamanda görebileceğimiz üzere bana bir pid verdi ve bu pid’yi prosesler arasında aradığımızda, arka planda çalışan sleep komutunu net bir şekilde görebiliyoruz.

3- Fonksiyon
Fonksiyonlar kod betikleridir. Bir fonksiyonun içerisine yazılan kodlar, o fonksiyon çağrılınca çalıştırılır. Bir örnek ile açıklayalım.

Fonksiyon örneği

Yukarıda görülebileceği üzere bir fonksiyon tanımladım ve içerisinde 3 adet echo komutu yazdım. Fonksiyonu çağırdığımda ise, fonksiyon içerisindeki komutların çalıştığını görebiliyoruz.

Şimdi gelelim çatal bombamızın sistemimizi neden kilitlediğine. Yazdığımız komutta “:” isminde bir fonksiyon tanımlıyoruz. Tanımladığımız fonksiyon, içerisinde kendisini çağırıyor. Ardından kendisini pipe ile kendisine aktarıyor ve bunu ampersand kullanarak arka plan prosesi olarak yapıyor ki bu işlemlerin tekrar edilebilmesi için öncekilerin bitmesi beklenmesin. “;” kullanılarak komut bitiriliyor ve “:” kullanılarak fonksiyonumuz çağrılıyor. Bu komutu girdiğimizde her başlatılan proses, iki proses daha başlatıyor ve başlayan prosesler de iki adet proses başlatıyor. Yani başlayan proseslerin sayısı karesi alınarak artıyor. Bu durum sistemdeki kaynakların tükenmesine ve nihai olarak sistemin donup kalmasına sebebiyet veriyor.

Okuduğunuz için teşekkür ederim.

Yazılarımın tamamı için https://pumburo.github.io/adresindeki blog ve projeler kısımlarını inceleyebilirsiniz.

--

--