Kabuk (Shell)

Eyl 06, 2013

Linux'un da içinde bulunduğu UNIX sistemlerinde komutları yorumlamak ve yönetmek için kullanılan programa kabuk (shell) denir. Kabuk,  bilgisayarın yönetimini uygulamalar ele almadan önce bilgisayarları çalıştırmak için kullanılan komutlarnı yazıldığı bir tür paneldir ve kabuk bütün Linux sistemlerde bulunması zorunlu olan birimdir.

Linux'ta farklı terminal benzetici (emulator) programları mevcuttur. Bunlardan bahsedilmesi gerekirse;

  • xterm: X Window sistemi için genel bir terminal benzetici programıdır. Menüleri bulunmaz.
  • gnome terminal: GNOME ile birlikte gelen varsayılan terminal benzetici programıdır. Xterm emülatörü ile ciddi benzerlikleri vardır. Renkli metin düzenleme ve pencerelerde fare komutlarının işlemesi bunlar arasında belli başlılarıdır. Bu benzerliğin yanında Gnome Terminal emülatörü Xterm'den daha fazla sistem kaynağı tüketir. Ayrıca Gnome Terminal emülatörü, metinlerin içine gizlenen URL'leri görünür haliyle kullanarak internet tarayıcısı ya da ftp sunucuna erişimi sağlar. 
  • konsole: KDE masaüstü ortamıyla gelen emülatör programıdır. 'konsole' ile çoklu dil metin kodlaması ve metni farklı renklerle görüntülenebilir.

Terminal penceresini açıldığında ekrana ilk gelen çıktı aşağıdaki gibidir.

kullanıcıadı@bilgisayaradı:~$

İlk olarak kullanıcı adı belirtilmiştir. @ (amphora)'dan sonra gelen kısım bilgisayar adını belirtir. ~ (tilde) işareti ise o anda bulunulan dizinin yerine kullanılmıştır. Örneğin; /usr adındaki dizinine geçilmiş olsaydı ~ yerine  /usr  yazılması gerekirdi.

root@bilgisayaradı:/usr #
 
En son karakter ise açılmış olan hesabın yetki seviyesini belirtir.
Varsayılan ayarlarla genel olarak $ (dolar) işareti tanımlı olarak gelecektir.

  • $ (dolar) işareti normal bir kullanıcı için varsayılan işarettir. Bir diğer adıyla sınırlı kullanıcı oturumunda bulunduğunu gösterir.
  • # (diyez), root kullanıcısı için varsayılan işarettir.

Buna karşın istenilen herhangi bir karakteri görüntülemek için istem değiştirilebilir.

Kullanılan Kabuk

Hangi kabuk içinde işlem yapıldığını öğrenmek için terminal penceresine;

# echo $SHELL

yazılır.

Kabuk komutları büyük küçük harfe duyarlı olduğundan bir komut çalıştırıldığında hata alınıyor ise meta karakterlere, boşluk bırakıp bırakılmadığına ve de komutların tam karşılığı olacak şekilde büyük küçük harfler olup olmadığına bakılmalıdır.

Yukarıdaki komutun çıktısına kendi sisteminden örnek verilmesi gerekirse;



Örnekte de görüldüğü üzere kullanılan kabuk bash kabuğudur.

UNIX için geliştirilen en önemli ve en çok kullanılan kabukların başında tcsh, bash (Bourne Again Shell) ve ksh (Korn Shell) gelir. Bash, Bourne Shell'in biraz daha geliştirilmiş sürümüdür. Tcsh ise C-shell üzerine eklenen yeniliklerle genişletilmiştir. Unix altında, bash kabuğu diğer benzerlerine nazaran daha fazla özelliğe ve işleve sahiptir. Linux işletim sistemi için de derlenen bash ise hem tcsh, hem de ksh'dan özellikler taşır.

Kullanılan ve kullanılmayan kabuklar olarak UNIX sistemlerde oldukça fazla miktarda kabuk mevcuttur. Fakat Bash kabuğu bunlar arasında en bilinen ve en yaygın olanıdır. Bazı kabuklar için gerekli açıklamalar aşağıda belirtilmiştir.

  • Bash Kabuğu:

Bash  kabuğu ilk UNIX sistemlerinde hem sh ve ksh kabukları, hem de bazı csh özellikleri için orjinal olarak geliştirilen özellikleri içerir. Çoğu LINUX sisteminde varsayılan kabuktu olarak ayarlanmıştır. Her kabuğun kendine özgü programlama dili yapısı vardır. Bash kabuğu ise güçlü programlama özellikleriyle karmaşık programların rahatça yazılmasına izin verir. Mantıksal operatörler, döngüler, değişkenler ve modern programlama dillerinde bulunan pek çok özellik bash kabuğunda da vardır ve işleyiş tarzları da neredeyse diğerleriyle aynıdır.
Bash çeşitli uyumluluk kiplerinde çalıştırılabilir, böylece farklı kabuklar gibi davranabilmektedir. Örneğin bir Bourne kabuğu (bash +B) veya bir POSIX uyumlu kabuk olarak davranabilir. Bu şekilde adı geçen kabuklardaki onlara özgü konfigürasyon dosyalarını okuyabilir, doğrudan bu kabuklar için yazılmış olan kabuk script lerini çalıştırabiliriz.Bash'in kullanıcıya zaman kazandıran en önemli özelliklerinden birisi de dosya isimlerini tamamlamasıdır.Komut satırında tamamlanmamış bir komut veya dosya ismi yazdıktan sonra TAB tuşuna basılırsa satır tamamlanacaktır. Eğer komut satırındaki karakter kümesiyle başlayan birden fazla komut varsa bir sinyal sesi duyulacak ve sizden yeteri kadar karakteri yazmanızı bekleyecektir.Bash, komut satırında iken satırın kolayca değiştirilebilmesini sağlar. Böylece komut çalıştırılmadan önce birkaç tuş darbesiyle üzerinde değişiklik yapılabilir. Klavye üzerindeki alt ve üst yön tuşları, daha önce yazdığınız komutları görmenizi ve arasında seçim yapmanızı sağlar. Sağ ve sol yön tuşları ile seçtiğiniz komutun üzerinde gidip, değişiklikler yapabilirsiniz.

Not: LINUX sistemlerde defalarca yazmanın zor olacağı karmaşık işlemleri çok hızlı gerçekleştirmek için döngüler ve case deyimleri gibi programlama yapılarını kullanarak komutlar bir dosyada bir araya getiribilir. İşte bu sebeple bir dosyada toplanan ve çalıştırılan komutları içeren programlara kabuk scriptleri denir.

Bash Kabuğunun Kullandığı Sistem Dosyaları:      

/bin/bash
/etc/profile
~/.bash_profile
~/.bashrc
~/.bash_logout
~/.inputrc

  • Tcsh Kabuğu:

Tcsh kabuğu açık kaynak kodu Berkeley UNIX sistemlerdeki csh kabuğunun gelişmiş halidir. Csh kabuğunun kullanıldığı tüm sistemlerde sorunsuzca kullanılabilir. Tcsh kabuğu  zsh kabuğu gibi görsel giriş kabuğu ve kabuk script komut işlemcisi olarak kullanılır. Ayrıca bu kabuk diğer birkaç kabukla benzer olarak komut düzenleme satırına, yazım denetim özelliğine, komut tamamlama özelliğine, geçmiş inceleme özelliğine ve görev kontrol arabirimine sahiptir. Bu sıralanan özellikler tcsh kabuğunu benzeri olan csh kabuğundan ayıran belli başlılarıdır. Ayrıca bu kabukla birlikte dahil edilen TENEX ve TOPS-20 işletim sistemlerinin özellikleri tcsh içindeki T'den sorumludur.

Tcsh Kabuğunun Kullandığı Sistem dosyaları:

/etc/csh.cshrc
/etc/csh.login
~/.tcshrc
~/.cshrc
~/.history
~/.login
~/.cshdirs
/etc/csh.logout
~/.logout
/bin/sh
/tmp/sh*
/etc/passwd    

  • Ash Kabuğu:
Ash kabuğu, UNIX sh kabuğunun özetlenmiş versiyonudur. (bash kabuğunun 7 de 1 i kadar bir boyutu vardır.) Günümüzde kullanılan sh kabuğunun son versiyonu POSIX 1003.2 ve 1003.2a sistemlerinin özelliklerine göre değiştirilmiş halidir.
Bu sürüm ksh kabuğuyla ciddi benzerlikler içermektedir. Bu versiyon içindeki bazı özellikler yalnızca POSIX sistemleri ve Berkeley eklentileri için geliştirilmiştir. Sh kabuğunun son versiyonundan farklı olarak komut geçmişini gösterme özelliği bu kabukta mevcut değildir. Bu yüzden ash kabuğu daha az sistem kaynağı gerektiren gömülü sistemler için ideal bir seçimdir.

Ash Kabuğunun Kullandığı Sistem Dosyalar:

$HOME/.profile
/etc/profile
 
  • Zsh Kabuğu:
Zsh kabuğu UNIX sistemlerde genel olarak görsel giriş kabuğu ve kabuk script komut işlemcisi olarak kullanılır ve BASH kabuğu gibi POSIX uyumludur. UNIX kabuklarının standartları göz önüne alıdığında, ilk olarak  zsh kabuğu ile  ksh kabuğunun çok benzer olduğu izlenimi oluşabilir, fakat zsh kabuğu ksh'tan farklı olarak komut düzenleme satırına sahiptir, yazım denetim özelliği de yine bu kabuğu Ksh'tan ayıran diğer bir özelliktir. Programlanabilir komut tamamlama, başlangıçta otomatik yüklenen kabuk fonksiyonları ve geçmiş kayıt özelliğinin bulunması bu kabuğu benzerlerinden ayıran en temel farklarındandır.  Ayrıca zsh kabuğu ilk Mac OS X sistemlerinde varsayılan kabuk olarak kullanılmıştır. Ancak  şu anda bu sistemlerde ki varsayılan kabuk BASH kabuğudur.
 
Zsh Kabuğunun Kullandığı Sistem Dosyaları:
 
$ZDOTDIR/.zshenv
$ZDOTDIR/.zprofile
$ZDOTDIR/.zshrc
$ZDOTDIR/.zlogin
$ZDOTDIR/.zlogout
${TMPPREFIX}*
/etc/zshenv
/etc/zprofile
/etc/zshrc
/etc/zlogin
/etc/zlogout
 
  • Ksh Kabuğu:
KSH kabuğu Sh kabuğunun temelini oluşturur, görevi ise; açık kaynak kodunu ve komutları kullanarak, bu girilen komutları Linux terminalinden yada dosyadan okumayı hedefler.  RKSH, ksh kabuğunun sınırlı versiyonudur, bu kabuk sisteme kullanıcı atanmasında ve bu kullanıcıların yetkilerinin kontrol edilmesinde rol alır. Rpfksh ise , ksh kabuğunun azaltılarak özetlenmiş hali olarak tanımlanabilir. Bu kabukta kullanıcının kendi profilinde yaptığı değişiklikleri yada girdiği komutları kullanıcının kendi profiline işlemesiyle sorumludur. Rpfksh rpm tabanlı sistemlerde varsayılan olarak bulunur.
 
Ksh Kabuğunun Kullandığı Sistem Dosyaları:
/etc/passwd
/etc/profile
/etc/suid_profile
$HOME/.profile
/tmp/sh*
/dev/null