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