LANGUAGE TRANSLATE

English French German Spain Italian Dutch Russian Portuguese Japanese Korean Arabic Chinese Simplified

27 Şubat 2012 Pazartesi

BASH KABUĞU


Bash Kabuğu
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.
Bir Redhat dağıtımında tüm bu kabuklar kullanıcının hizmetine sunulmuş olup bash kabuğu sistem ilk açıldığında tanımlıdır. Kullanıcı sisteme girdiği zaman bu kabuk aktif olur, bundan sonra kullanıcı herhangi bir kabuk altında çalışmalarına devam edebilir. Bunun için sadece ismini komut satırında yazması yeterlidir.

Bash Özellikleri

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.
$ ls
postgres mandel.doc lilo-howto
$ vi post <TAB>
$ vi postgres
Komut satırındaki karakterler dosyayı veya komutu tanıtmaya yetmiyorsa, <TAB> tuşunun iki kez ard arda basılmasıyla ekrana mümkün olan tüm dosya isimleri getirilebilir.
$ ta <TAB> <TAB>
tac tail talk tar
$ talk
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 değişiklikleri uygulabilirsiniz.

Takma Adlar (alias)

alias  komutu ile bir komut veya komut kümesinin yerine bir isim tahsis edilebilir. İşleyişi bir makroya benzeyen bu komut yardımıyla uzun komutlar, daha kısa komutlarla tanımlanabilir. Bir alias komutu , anahtar kelimeyle başlar, ardından bir eşittir (=) işareti ve yerine kullanılacağı komut yazılır. Arada boşluk bırakılmaz.

[root@localhost root]# alias liste="ls -al"
[root@localhost root]# dir
total 41235604
drwxr-xr-x 9 apache apache 4096 Mar 6 15:59 .
drwxrwxrwx 5 500 500 4096 Feb 3 18:19 ..
drwxr-xr-x 4 apache apache 4096 Feb 3 18:20 130 linux and unix ebooks
drwxr-xr-x 12 apache apache 4096 Feb 29 00:42 Band.Of.Brothers.2001
drwxr-xr-x 2 apache apache 61440 Feb 19 22:37 Books

alias komutunu tek başına kullandığımızda sitemde tanımlı olan tüm lakaplar listelenecektir.

[root@localhost root]# alias
alias cp='cp -i'
alias dir='ls -al'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

Tanımlı bir lakabı sistemden kaldırmak için unalias komutunu lakapla birlikte kullanmalıyız.
[root@localhost root]# unalias liste
Daha karmaşık takma adlar da tanımlanabilir.
NOT: Takma adları /etc/profile dosyasına yerleştirirseniz her giriş-çıkışınızda yeniden tanımlamak zorunda kalmazsınız.

Özel Kabuk Değişkenleri

Sisteme girdiğiniz zaman Linux size bir kabuk tahsis eder ve kabuk üzerinde değişkenler tanımlayabilmenize izin verir.
Bir kabuk altında tanımlanan değişken o kabuğa özgüdür. Bir kabuk altında erişilebilen değişkene diğer bir kabuk erişemez. Bir çevre değişkeni belirtmek için export  komutu kullanılır. Aşağıdaki örnekte dosyam isimli çevre değişkeni tanımlanıyor.
$ export dosyam="internet.txt"
$ echo $dosyam
internet.txt
Bu esnadan sonra bu değişken tanımlı olacaktır.
printenv komutu yardımıyla sistemde öntanımı yapılan veya sonradan tanımlanan tüm değişkenler ekrana listelenir.
$ env
HOME=/home/mayasoft
SHELL=/bin/bash
LS_OPTIONS=--8bit --color=tty -F -b -T 0
PS1=\h:\w\$
PS2=>
LOGNAME=mayasoft
OSTYPE=Linux
Sisteme girdiğiniz anda tanımlanan bazı komutlar ve açıklamaları aşağıda verilmiştir:
HISTFILE  : Kullanıcı sisteme girdikten sonra tüm yazdığı komutlar .bash_history adlı bir dosya içinde tutulur. Her kullanıcının kendi ev dizinleri içinde kullanıcıya özgü bu dosyadan vardır. Bu dosya $HISTFILE değişkeni ile belirtilir.
$ echo $HISTFILE
/root/.bash_history

PATH  : PATH değişkeninde bir komut yazıldığı anda sistem tarafından aranacak olan dizin listesi görüntülenir. Örnek olarak who komutu /usr/bin/ dizini altındadır ve bu bilgi PATH değişkeninde saklı tutulur. Kullanıcının yaptığı programları çalıştırabilmesi için PATH değişkeninde bulunduğu dizini de tanımlaması gerekir.
PATH değişkeninde her dizin ':' işareti ile birbirinden ayrılır. Örnek olarak /usr/local/bin:/usr/bin dizisi sırasıyla /usr/local/bin ve /usr/bin dizinlerine karşılık gelir.
Kullanıcı PATH değişkenine yeni girdiler ekleyebilir. Aşağıdaki örnekte bunun nasıl uygulandığı görülüyor. Kullanıcı kısaca PATH değişkeninin sonuna kendisinin istediği patikayı veya patikaları ekler.
$ echo $PATH # PATH degiskenini ekrana bas
$ export PATH=$PATH:/usr/net:~/bin # buna /usr/net patikasini ekle
SHELL  : O an kullanılan kabuğun patika ismini verir. Kabuk programları genellikle /bin dizini altında tutulurlar. Her kabuğun patika ismi sistemdeki /etc/shells dosyasında bulunmalıdır.
$ echo $SHELL
/bin/bash
HOME  : Kullanıcının ev dizinini gösteren patikayı ekrana basar. Her kullanıcının ev dizini, sistemde hesap açılırken sistem görevlisi tarafından belirlenir. Linux Slackware dağıtımı altında bu dizin öntanımlı olarak /home 'dur. Aşağıdaki örnek kullanıcının ev dizinine ait patikayı ekrana basıyor.
$ echo $HOME
/home/mayasoft
LOGNAME  : Sistemdeki kullanıcı hesabınının ismini tutar. Her kullanıcı için farklı bir değerde olur.
$ echo $LOGNAME
tubider
PS1 ve PS2 : Sırasıyla birincil ve ikincil komut istemi sembollerini içerir. BASH kabuğu için kullanılan birincil komut istemi sembolü dolar işaretlidir. PS1 değişkenine yeni karakter kümeleri atayarak komut istemi sembolünü değiştirebilirsiniz.
[root@localhost ~]# PS1="Lütfen bir komut giriniz :"
Lütfen bir komut giriniz :ls
deneme deneme2 Desktop etc.tar.gz spam.txt squid.conf
Lütfen bir komut giriniz :
PS1 ile kullanılacak parametrelerden bazıları aşağıda verilmiştir.
\!: Geçerli geçmiş numarası
\$: Normal kullanıcıları temsil komut satırı sembolü
\d: O anki tarihi gösterir
\t: Saati gösterir.
\u: Kullanıcı adını gösterir.
\w: Geçerli durumda çalışan dizin.

 Sisteme Giriş-Çıkış-Login Dosyaları

Sisteme girerken, her giriş anında bash kabuğu tarafından çalıştırılan birtakım dosyalar bulunur. Bu dosyalar Bash Kabuğunun yapılandırma dosyalarıdı. Bunlardan bazılarına birlikte gözatalım.

 /etc/profile ve ~bash.profile dosyaları.

Bu dosya bash kabuğunun başlangıç dosyasıdır. Sistemde bulunan tüm kullanıcılar sisteme oturum açtıklarında, ilk önce /etc/profile dosyasında bulunan komutları çalıştırırlar. Daha sonra ise kendi ev dizinlerinde bulunan .bash_profile dosyası çalıştırılır. Bu dosyalar genellikle özel kabuk değişkenlerinin atanması için kullanılır. Örneğin .bash_profile dosyasında özel değişkenlerden PATH ile ilgili tanımlamalar ekleyebiliriz. Varolan değerleride deiştirebiliriz.
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

Yukarıda örnek .bash_profile dosyasında, sistemde var olan yollara herkullanıcının kendi dizinindeki bin dizini ekleniyor. Daha sonra export komutuyla bu kabuk değişkenlerinin tümü ihrac ediliyor.

Diğer dosya olan /etc/profile ise yukarıda bahsettiğimiz gibi genel tüm kullanıcılar için geçerli olacak ayarları içermektedir. Tüm kullanıcılara tanımlamak istediğimiz bir kabuk değişkeni varsa, bunu her kullanıcının dizinindeki .bash_profile dosyasına yazmak yerine sadece /etc/profile dosyasına yazarak tüm kullanıcılara uygulanmasını sağlıyoruz. Örneğin bu dosyada tanımlanan histsize değerini

HISTSIZE=1000 yerine;

HISTSIZE=500

Yaparsak kullanıcıların bash_history dosyasında tutacakları komut sayısı 500 olacaktır. Kullanıcıların kendi dizinlerinde bulunan .bash_profile dosyası, /etc/profile dosyasındaki değerleri geçersiz kılacaktır. Özel değişkenleri ayarlamak için birde /etc/profile.d dizini bulunmaktadır. Bu dizin içinde bulunan tüm kabuk programları /etc/profile dizinindeki bir for döngüsü tarafından çalıştırılırlar. Bunun anlamı bu dizine yerleştirdiğimiz kabuk programlerı otomatik olarak çalışacaktır. Biz /etc/profile dosyasında değişiklik yapmak yerine yazdığımız scriptleri bu dizine kopyalayarak, kabuk üzerinde gerekli değişiklikleri yapabiliriz.

/etc/bashrc ve ~.bashrc dosyaları

Bu dosyalarda /etc/profile ve .bashrc dosyaları gibi kullanıcı sisteme girdiğinde otomatik olarak çalışan dosyalardır. .bashrc  dosyası, her bash kabuğu veya alt kabuk çalıştırıldığı anda okunur. Her kabuk programı çalıştırılınca bir alt kabuğa ihtiyaç olduğundan bu durumda .bashrc dosyası da okunacak ve içerdiği değişkenler program çalışmadan önce tanımlanacaktır.
Genellikle aliaslar , umask değerleri .bashrc ve /etc/bashrc dosyasında tanımlanır.
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

bash_logout dosyası

Sistemden çıkarken varsa çalıştırılan dosyanın ismi .bash_logout 'tur. Bu dosya ile kullanıcı sistemi terkederken fazladan işlemler yapabilir. Aşağıdaki örnekteki .bash_logout dosyasında kullanıcı sistemden her çıktığında ekran temizlenecektir.
# ~/.bash_logout

clear

bash_history dosyası


Sistemde kaydedilen komutların sayısı HISTSIZE adlı bir kabuk değişkeninde tutulur. Varsayılan ayar olarak bu değer 1000 dir. Geçmiş olayları dodya adı HISTFILE özel değişkeninde tutulan bir dosya içine kaydedilir. Bu dosyanın adı genellikle .bash_history dir ve kullanıcının ev dizininde bulunur.

[root@localhost ~]# echo $HISTFILE
/root/.bash_history

ALINTIDIR
KAYNAK:www.belgeler.org