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
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