sHuKKo.com Linux - Dosya Sistemleri Linux - Kabuk /Shell Linux - Komutlar Linux Komutlar - 2

 

Son guncelleme: 28 Kasim 2004 Pazar

Dosya Kaynak: Anonim - Linux Ders Notlari

Bu sayfadaki bilgiler link ve credit verilmek uzere istenildigi gibi kullanilabilir.

bilgi: shukko@shukko.com

 

 

Kabuk Nedir?

           

Kabuk sisteme logon olduktan sonra programların çalışmasını sağlayan, verilen komutlar sonucunda girdi ve çıktı işlemlerinin yönlendiren ve komutları, yazılan kod yada programarı yorumlayan yazılımdır.

 

sh        : Bourne Shell ilk Unix kabuğu.

csh       : C Shell  Berkeley Üniversitesi'nde geliştirilen csh'in C diline benzer bir programlama yapısı vardır

ksh       : Korn Shell sh uyumlu, birçok ek programlama özelliği içeren bir kabuk.

bash     : Bourne Again Shell Kullanım kolaylığı bakımından en çok rağbet gören bash, GNU tarafından kaynak kodu

  olarak dağıtılıyor. bash sh ve ksh uyumluluğunu korurken, özellikle etkileşimli kullanıma yönelik (komut

  tamamlama, gibi)

           

Çalışılan kabuğu öğrenmek için aşağıdaki komut uygulanabilir.

is8:/etc/apache2 # echo $SHELL

/bin/bash

 

            Kabuk programları /bin dizini içinde bulunur. Eğer istenirse kullanıcınıların sistem girdiklerindeki kabuk değiştirilebilir. Login Shell bölümüne sisteme girdikten sonra çalıştırılacak kabuğun adı ve yolu doğru olarak yazılmalıdır.

 

is8:/etc/apache2 # chsh kubilay

Changing login shell for kubilay.

Enter the new value, or press return for the default.

        Login Shell [/bin/ksh]: /bin/bash

Shell changed.

 

            Yönlendirme İşlemleri:

 

            Standart bir komutun ekran çıktısı bir dosya yada diğer bir komuta aktarılabilir. Örneğin “ls –l” komutunun çıktısı “>” işareti ile ve verilen isimdeki dosyanın içeriğine yazılır.

Örnek:

is8:~ # ls -l > liste

 

            Eğer uygulanan komutun hata mesajlarının bir dosyaya yada bir komuta yönlendirilmesi yapılacaksa “2>” ifadesi kullanılır. cat, more, vi yada less gibi programlarla oluşturulan dosyanın içine bakılabilir. 

Örnek:

is8:~ # gbk_yap 2> 31.08.2004_log

 

            Çalıştırılan uygulalardaki normal mesajların ve hata mesajları ayrı dosyalara yada aynı dosya içine yazılabilir. Aşağıdaki örnek komutta ilgili programın ürettiği hatalar 31.08.2004_hata_log dosyasına, komutun çalışması ile ekrana gelen mesajlar 31.08.2004_log dosyasına yazılır.

Örnek:

is8:~ # gbk_yap 2> 31.08.2004_hata_log > 31.08.2004_log

           

Uygulanan komutun standart ekran çıktısı ve hata mesajları tek bir dosyaya yazdırılabilir. Bu şekilde komutun çalışması sırasında hem normal hem de hata mesajları düzenli olarak kayıt edilebilir. Aşağıdaki komutta ilgili komutun tüm ekran çıktısı belirtilen dosya içine yazılır.

Örnek:

is8:~ # gbk_yap 2>&1 31.08.2004_log

 

            Ekranda uygulanan komutla ilgili hiç bir mesajın görüntülenmesi istenmiyorsa /dev/null olarak belirtilen yola kara delik diye tabir edilen konuma yönlendirilir. Aşağıdaki komuttaki 2>&1 ifadesi

Örnek:

is8:~ # gbk_yap 2>&1 /dev/null

 

            Yukarıdaki örneklerde komut çıktıları verilen dosyalara yönlendirilir. Dosya yoksa oluşturulur varse içeriği silinip uygulanan komutun çıktısı yazılır. “>>” ile komut çıktırsı belirtilen dosyanın sonuna eklenir.

 

            Komut çıktıları ekrana yada bir dosyaya yönlendirilebileceği gibi, bir dosya içindeki satırlar bir komuta “<” işareti ile yönlendirilebilir. Aşağıdaki komutta zope ifadesi büyük küçük harf ayrımına bakılmaksızın standart girdi yani /etc/passwd dosyasında aranır.

Örnek:

charlie:~ # grep -i zope < /etc/passwd

zope:x:64:2:Zope:/opt/zope:/bin/false

 

 

Boru (pipe) işlemleri:

            Komut çıktıları bir dosya yerine, bu komutun çıktısı üzerinde işlem yapacak diğer komuta yönlendirilebilir. Bu işlem “ “ boru işareti ile yapılır. Bu işaretle komutun çıktısı diğer komuta girdi olarak gönderilir.

Örnekler:

charlie:~ # cat veri.txt | lpr

            Yukarıdaki komut veri.txt dosyasının içeriğini tanımlı yazıcıya gönderir.

 

charlie:~ # who | wc -l

      5

            Yukarıdaki komutla bağlı kullanıcıların listesi alınır ve bu çıktı boru işlemi ile wc komutuna gönderilir. Gelen çıktıyının satırlarını wc komutu ve  –l parametresi ile belirtilerek sayılması sağlanır.

            Boru işlemine bir örnekle bakalım. Netstat komutu ile sistemdeki bağlantıları listeliyoruz.

charlie:~ # netstat -nat

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0      0 0.0.0.0:3050            0.0.0.0:*               LISTEN

tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN

tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN

tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN

tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN

tcp        0      0 192.168.1.7:3050        192.168.1.203:2560      ESTABLISHED

tcp        0      0 192.168.1.7:139         192.168.1.203:1394      ESTABLISHED

tcp        0      0 192.168.1.7:3050        192.168.1.203:2557      ESTABLISHED

tcp        0      0 192.168.100.7:3050      192.168.1.203:2582      ESTABLISHED

tcp        0      0 192.168.100.7:3050      192.168.1.203:2593      ESTABLISHED

tcp        0      0 :::80                   :::*                    LISTEN

tcp        0      0 :::53                   :::*                    LISTEN

tcp        0      0 :::22                   :::*                    LISTEN

tcp        0      0 192.168.100.7:22        192.168.1.203:4603      ESTABLISHED

 

            grep komutu ile sadece 3050 ifadesi geçen satırları seçiyoruz.

charlie:~ # netstat -nat | grep 3050

tcp        0      0 0.0.0.0:3050            0.0.0.0:*               LISTEN

tcp        0      0 192.168.1.7:3050        192.168.1.203:2560      ESTABLISHED

tcp        0      0 192.168.1.7:3050        192.168.1.203:2557      ESTABLISHED

tcp        0      0 192.168.100.7:3050      192.168.1.203:2582      ESTABLISHED

tcp        0      0 192.168.100.7:3050      192.168.1.203:2593      ESTABLISHED

http://www.bcnetweb.com/belgeler/lis/lis-3.html

 

            awk komutu ile ekrandaki listenin 5. sütununu seçiyoruz.

charlie:~ # netstat -nat | grep 3050 | awk '{print $5}'

0.0.0.0:*

192.168.1.203:2560

192.168.1.203:2557

192.168.1.203:2582

192.168.1.203:2593

 

            cut komutu ile awk ile aldığımız ifadelerin “:” noktadan önceki bölümünü alıyoruz.

charlie:~ # netstat -nat | grep 3050 | awk '{print $5}' | cut -d":" -f1

0.0.0.0

192.168.1.203

192.168.1.203

192.168.1.203

192.168.1.203

 

            uniq komutu ile de elde ettiğimiz satırlardan tekrarlayanladan sadece bir tanesinin alınmasını sağlıyoruz.

charlie:~ # netstat -nat | grep 3050 | awk '{print $5}' | cut -d":" -f1 | uniq

0.0.0.0

192.168.1.203

            wc komutu ile de bu satırları sayıyoruz.

charlie:~ # netstat -nat | grep 3050 | awk '{print $5}' | cut -d":" -f1 | uniq | wc -l

2

 

Arka Planda Komut Çalıştırma:

 

            Komutları arka planda çalıştırmak için komuttan sonra “&” işareti yazılır. Bu şekilde verilen komuttan sonra tekrar kalınan yerden çalışılmaya devam edilebilir.

            Ağağıdaki komutla yapılan işlem arka planda çalıitırılır. 2 rakamı bu şekilde arka planda diğer bir komuthn daha çalıştırıldığını ifade eder. BU sayı arka planda çalışan komutların sayısını ve sıra numarasını verir. Diğer rakam ise komutun PID ‘idir.

Örnek:

charlie:~ # gbak -b /home/mdc.gdb /home/mdc.gbk &

[2] 22540

 

            Arka planda çalıştırılan komutun yaptığı işlem bittiği zaman ekrana aşağıdaki bilgi mesajı çıkar. Bu mesajda komutun sıra numarası yani 2, Done ifadesi komutun baştıyla bittiğini belirtir. Ekranda verilen komutta görülebilir.

[2]+  Done                    gbak -b /home/mdc.gdb /home/mdc.gbk

 

            Bir komut nırmal olarak verilebilir. Ancak komutun yapacağı işlemin uzun sürmesi ve ya başka bir nedenden dolayı, diğer işlemlerin aksatman komut Ctrl +Z tuşu ile durudurulur. Bu şekilde yapılan işlem sonlandırılmaz. Aşağıda bu konuyla ilgili örneklere bakalım.

 

            Aşağıdaki komutla bir işlem başlatıyoruz.

charlie:~ # gbak -b /home/fis.gdb /home/fis.gbk

            Sonra işlemi Ctrl + Z tuş bileşenini kullanarak durduruyoruz. Ekrana bu durdulan işlemle ilgili mesaj çıkacaktır.

[1]+  Stopped                 gbak -b /home/fis.gdb /home/fis.gbk

            Daha sonra işlemi devam arka panda devam etmesini sağlamak için bg (background) komutunu uyguluyoruz. İlgili komutun arka planda çalışmaya başladığını belirten mesaj ekranda görünür.

charlie:~ # bg

[1]+ gbak -b /home/fis.gdb /home/fis.gbk &

            Eğer istersek uygulanan komutu arka plandan çıkarıp komut satırına getirmek için fg (foreground) komutunu kullanabiliriz. Aşağıda ilgili komutu çalışırken komut satırına tekrar getiriyoruz ve komutun yaptığı işlem bitince komut satırı ekranda görünütor.

charlie:~ # fg

gbak -b /home/fis.gdb /home/fis.gbk

charlie:~ #

 

jobs komutu kullanılarak arka planda çalışan komutlar görlebilir. Arkaplanda çalışan her kouta bir sıra numarası verilir. Bu sıra numarası bu komutlar üzerinde işlem yapılırken kullanılır. aşağıdaki örnekte jobs komutu ile arka planda çalışna komutların listesini alıyoruz.

is8:~ # jobs

[1]   Running                 cp /yedekler/01.09.2004/hrk.gdb /home/ &

[2]-  Running                 gbak -b /home/ihale.gdb /home/ihale.gbk &

[3]+  Running                 gbak -b /home/tnm.gdb /home/tnm.gbk &

           

fg komutu ile arka planda çalışan komutun sıra numarasını vererek komut satırına ilgili komutu getiriyoruz.

is8:~ # fg 1

cp /yedekler/01.09.2004/hrk.gdb /home/

 

Komutların peşpeşe çalıştırılması:

 

İki yada daha fazla komutun arasına  “;”  işareti konularak komutlar arda arda çalıştırılabilir. Önce yazılan komutun işlemi bitince sırası ile diğer komutlar çalıştırılır.

Aşağıdaki örnekte sleep ve cp komutu tek satırda verilmiştir. Önce sleep komutu çalışacak ve 10 sn beklemeyi sağlayacak, bu komutun işlemi bitince cp komutu devreye girecektir.

Örnek:

[root@alpay root]# sleep 10 ; cp /data/data.gdb /yedek