Cemre Acar
Bash Nedir ? Linux Bash Kullanımı

Bash Nedir ? Linux Bash Kullanımı

Bugün de Linux kullanıcıları için nispeten daha ileri bir seviye olabilecek Bash kavramından bahsedeceğim. Bash Nedir ? Bash Açılımı Nedir ? Linux Değişken Belirleme , Linux Takma Adlar(Alias) , Linux Pipe İşlemleri .. gibi uzayıp giden güzel bir liste. Daha önceki bir yazımda , Linux’a giriş niteliğinde Temel Linux Komutları isimli bir yazı yayımlamıştım, eğer okumadıysanız okumanızı tavsiye ederim. Gelelim konumuza.
Bash , UNIX için geliştirilmiş en önemli ve en fazla kullanılan kabukların başında gelir. GNU işletim sistemi için bir kabuk ya da başka bir değiş ile komut dili yorumlayıcısıdır. Bourne Again Shell sözcüklerinin baş harflerinden türetilmiştir.

Kabuk Değişkenleri

Bash , aynı zamanda yorumlanmış bir programlama dili olduğundan temel programlama yapıları da (Değişkenler , Döngüler vb.) mevcuttur. Bir değişken basitçe isimlendirilerek belirlenir ve tipi bulunmaz.

Örneğin :

degisken = “Cemre”

echo $degisken

Cemre

Takma Adlar (Alias)

Türkçeye takma ad olarak çevrilebilir. Alias kullanarak kendi komutlarımızı veya kısayollarımızı tanımlayabiliriz. Bir kısayol oluşturmadan önce istediğimiz isimde bir takma isim kullanılmış mı diye sorgulayalım.

type takmaisim

Herhangi bir tanımlama mevcut değilse alias komutu ile bunu oluşturalım.

Örneğin :

alias takmaisim = ‘cd ~ ’

Bu komut ile takmaisim komutunu verdiğimizde bizi home dizinine gönderecektir. Bu takma adı kaldırmak için de

unalias takmaisim

komutunu verebiliriz.



Pipe(Boru) İşlemleri

Pipe(Boru) , herhangi bir komutun çıktısını , bu çıktıyı işleyebilecek başka bir komuta göndermek için kullanılır. Pipe , ( | ) karakteri ile kullanılır. Bu karakter kendinden önce gelen komutların çıktısını , kendinden sonra gelen komuta gönderir.

Örneğin :
Herhangi bir dizinde tüm dosyaları detaylı bir şekilde listeleyelim ve bunu yazıcımızdan bastırmamızı sağlayan lpr komutuna gönderelim.

ls -l | lpr 

Burada ls -l komutunun ekranımıza bastıracağı tüm bilgiler lpr komutu ile yazıcımızdan çıkarılmıştır.

Yönlendirme

Pipe işlemlerinde komutun çıktısını başka bir komuta göndermiştik. Burada ise amaç verdiğimiz komutu bir dosyaya yönlendirmektir. Yine listeleme komutunu kullanacak olursak elimizde dosyalar.txt adlı bir text dosyası olduğunu düşünelim. Bu text dosyasına listelediğimiz dosyalarımızı aşağıdaki şekilde yönlendiririz. 

Örneğin :

ls -l > dosyalar.txt

bu komut listeleme komutumuzun çıktısını dosyalar.txt dosyamıza yazmış oldu.

cat dosyalar.txt

komutu ile hızlıca okuyabiliriz.
Peki ya hatalı bir komut verseydim ? Bu hatayı dosya içinde görebilecek miydim ?
Bunun için farklı bir komut vermem gerekiyor.

Örneğin :
Dizinimizde olmayan bir dosyayı listelemeye çalışalım.

ls /hatali 2> dosyalar.txt 

Bu komutta farklı olan “2>” bize standart hatayı, dosyalar.txt dosyamıza bastırmamızı sağladı.
Bu işi biraz daha renklendirecek olursak , verdiğimiz komut hatalı bir çıktı üretecekse hata.txt , standart bir çıktı üretecekse sonuç.txt dosyalarına yazılsın isteyelim. Dizinimizde ls komutunu kullanalım ve sonucu sonuc.txt ‘e yazdırdığını görelim. Bunun için aşağıdaki komutu çalıştırmamız yeterli olacak.

ls -l 2>hata.txt > sonuç.txt 

Görüyoruz ki çıktı sonuç.txt’e yazılmış durumda. Peki bir de aynı komutta hatalı bir işlem yapmayı deneyelim .

ls /olmayanklasör 2>hata.txt >sonuç.txt

Şimdi de hata.txt’e yazılan standart hatayı görebiliriz. Burada değinmemiz gereken ufak bir nokta var. Standart çıktı ya da Standart hatayı yönlendirirken > işareti kullanıldığında o isme sahip bir dosyanız yoksa oluşturulur ve çıktı dosyaya yazılır. Dosya var ise , içeriği yok olur ve komutun çıktısı dosyanın yeni içeriği olarak yazılır. Yani kısacası var olan bilgileriniz kaybolur. Var olan dosyanın üstüne yeni bir komutun çıktısını eklemek istiyorsanız  >> işaretlerini kullanmalısınız.

Örneğin :

~ yazi = “Hello Bash”
~ echo $yazi >> sonuç.txt 

Şimdi cat komutu ile sonuç.txt dosyamızı görüntülediğimizde “Hello Bash” yazısının eklendiğini göreceksiniz.



Süreçler (Processes)

UNIX çok görevli(multitasking) bir işletim sistemidir. Türkçeye süreç ya da işlem olarak çevirebileceğimiz process’ler yürütülmekte olan bir programdır. Her process arka planda ya da kabuğun kontrolünde çalışabilir ve kendisine ait bir Process ID bulundurur (PID). Kabukta bir komut çalıştırdığımızda Parent Process (Üst işlem) bir Child Process (Alt işlem) oluşturur. Burada Linux İşletim Sistemleri ana konularından olan fork() ve wait() sistem çağrıları kullanılır. Bu teorik kısmı kafa karıştırmaması adına fazla uzatmıyorum.

Biz bu süreçleri kabukta görüntülemek için ps komutunu kullanabiliriz. Bu komut kullanıldığında PID, TTY, TIME ve CMD alanları gözükür.
PID, Process (sürec) ID ,
TIME, tüketilen CPU süresi ,
TTY, sürecin çalıştırıldığı terminal ,
CMD , komut satırından girilen programın ismini ifade eder.

Arka Planda İşlem

Her processin arka planda ya da kabuğun kontrolünde çalıştığını daha önce söylemiştim. Bir komutu arka planda çalıştırabilmek için, verdiğimiz komutun sonuna “&” işareti koyarız. Komutu bu karakter ile verdikten sonra tekrar kabuk ekranından devam edeceğiz.

Örneğin :

sleep 100 &

komutunu verdiğimizde içinde bulunduğumuz kabuk 100 saniye uykuya dalar ama biz başka bir kabukta işlemlerimize devam ederiz. Burada tekrar ps komutunu verirsek, çalışan iki process göreceğiz ve uyuttuğumuz process CMD altında sleep 100 yazısıyla yer alacak. 100 saniye dolduğunda kendiliğinden sonlanacaktır.
Peki sleep komutunu var olan kabukta verdik diyelim. Ben yanlışlıkla 1000 girdim çok uzun bir süre beklemede kalıcam ve onu beklemek istemiyorum. Bunun için Programı kesmem (interrupt) ya da sonlandırmam gerekiyor.



Programı Kesmek (Interrupt)

Bazen kabuk komut satırına yazılan bir program normalden de uzun sürebilir. Bu gibi durumlarda programı kesmek için Ctrl+Z tuş kombinasyonunu kullanabiliriz. Bu komut sürecin çalışmasına ara vermemize yarar , fakat program tamamen durmaz. Bu çalışmayı arka planda devam ettirmek için

bg

komutunu kullanabiliriz. Bir programı tamamen durdurmak için ise Ctrl+C kombinasyonunu kullanabiliriz.

Programı Sonlandırmak (Terminate)

Programları arka planda çalıştırmaktan , çalışmasını durdurmaktan ve tamamen kesmekten bahsettik. Burada ise programları sonlandırmaktan bahsedeceğim. Kill komutu ile bu işlemi gerçekleştirebiliriz. Bu işlemi yapabilmek için yalnızca Process'lerin PID ‘lerine ihtiyacımız var.

Örneğin :
ps komutunu verip PID’ini öğrendiğimiz bir process’imiz olsun.

Bu process’imizi aşağıdaki komut ile sonlandırabiliriz.

kill 8482 

Ancak eğer ki sonlandırmak istediğiniz program bu komuta tepki vermiyor ise aşağıda yer alan iki komuttan herhangi birini kullanabilirsiniz. (Bunun çeşitli sebepleri olabilir. Örneğin içinde bulunduğunuz kabuk sistem programı olduğu için yalnızca kill komutu ile sonlandıramayabilirsiniz.)

kill -KILL 8482

ya da

kill -9 8482 

Bu komuttan sonra programın sistemle ilişkisi tamamen kesilmiş olur. Ancak kill -9 ya da kill -KILL komutlarını özellikle sistem programlarında kullanmanız önerilmez , çok gerekli görülmedikçe kullanmamanızı tavsiye ederim.

Bu yazımda eksik ya da yetersiz gördüğünüz kısımları yorum olarak belirtebilirsiniz. Bir sonraki yazımda buluşmak üzere. Sağlıkla kalın.

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.