3. Yaygın kullanılan
shell dilleri
Bsh : sh olarak da geçer açılımı “Bourne Shell”
dir.GNU projesinin ilk dönemlerinde kullanılan shell
dilidir.Bugünlerde yerini büyük ölçüde bash'e
bırakmıştır.
Bash : bsh nin ardılı durumundadır.Bsh'nin üzerine
eklentiler yapılmış halidir.Açılımı “Bourne Again
Shell”dir
Csh : Syntax'ı C diline benzeyen bir shell'dir.Domine
dağıtımlar tarafından varsayılan olarak gelmediğinden
dolayı kullanıcı sayısı kısıtlıdır.Açılımı ise “C shell” dir.
Ksh : Bash ve Csh dillerini bir araya getiren ve
üzerinede yeni birkaç komut ve yordamları içeren shell
dilidir.Açılımı ise “Korn Shell” dir.
Zsh : Korn shell'in üzerine ekstra birkaç komut
barındıran bir shell dilidir.Açılımı ise “Z shell” dir.
4. İçsel(İnternal) Shell
Komutları
Bütün diller kendi içerisinde içsel komutlar bulundurur bunlar
dilden dile farklılık göstersede amaçları genellikle aynıdır.Bu
komutlar ile sisteme dair hayati temel işlemler
gerçekleştirilebilir.Bash içerisindeki internal komutlar ;
Cd : Bu komut sayesinde dizinler arasında geçişler
yapılabilir.Örnek cd /home/rfm komutu rfm kullanıcısına ait
home dizinine geçiş yapar.
Pwd : Şuanda komut satırının içerisinde bulunduğu dizini
terminale yazar.
Echo : Akabinde yazılacak olan komutları terminale
yazar.Örneğin echo “rfm” komutunun çıktısı terminale rfm
olacaktır.
Exec : Akabinde yazılacak olan komutu çalıştırıp terminali
kapatır.Örneğin exec firefox komutunu çalıştırırsanız terminal
kapanıp firefox web browser açılacaktır.
Time : Akabinde yazılcak olan komutun ne kadar sürede
çalıştığını ms cinsinden terminale yazar.
Set : İlerde bahsedilecek olan komut satırı parametrelerini
belirli kurallara göre önceden atayan komuttur.
Exit : Açık olan shelli kapatır.
5. External(Dışsal)
Shell Komutları
Kullanılan shell haricinde varsayılan olarak var
olmayan komutlara verilen genel isimdir.Bu komutlara
bir çok örnek verilebilir.İlk akla gelen komutlar : ls ,
cat , nano ,vi , vim , emacs , micro vb. Komutlardır.Bu
komutlar Linux dağıtımı kurulduğu esnada otamatik
olarak yüklenmiş olabilir.Herzaman yüklü olmak
zorunda değillerdir.Bu komutlar genellikle /bin dizini
içerisinde tutulurlar.Bu dizin dışında var olan
komutların komut satırı tarafından algılanabilmesi için
PATH çevre değişkeninde gösterilmesi
gerekmektedir.Bir linux dağıtımı olan debian'da bu
değişken varsayılan olarak :
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Yukarıdaki gibi belirlenmiştir ':' karakteri ile yeni komut
dizinlerini shell'in tanıması için bu değişkene
ekleyebilirsiniz.Bu gibi çevre değişkenlerine değerler
verirken dikkatli olunmazsa sistemsel bazı
bozukluklara sebep olunabilir.
6. Shell İçin Geçerli
Olan Bazı Tuş
Kısayolları
● Ctrl + C : Çalışmakta olan shell komutunu durdurur.
●
Ctrl + A : İmleci satır başına götürür
●
Ctrl + E : İmleci satır sonuna götürür.
●
Ctrl + L : Terminali temizler.
●
Ctrl + R : Önceden yazılmış olan komutlar için arama
yapılmasını sağlayan istemciyi açar.
●
Ctrl + D : Shelli kapatır.Exit komutuyla eşdeğerdir.
● Tab : Dosya adı,dizin adı veya komutadlarının yazılmayan
kısımlarını tamamlar.Örneğin , bas harflerini istemciye
yazıp tab tuşuna basılırsa otomatik olarak istemci , komutu
bash 'e tamamlar.
● Ctrl + Z : Çalışan bir programı durdurur 'fg' komutu ile
duran programı tekrardan geri getirmek mümkündür.
● !! : En son çalıştırılan komutu tekrardan çalıştırır
●
!!<komut> : En son çalışıtırılan komutun başına belirlenen
başka bir komutu ekler.
●
Ctrl + T : İmlecin üzerinde bulunduğu karakter ile bir
öncesindeki karakterin yerini değiştirir.
7. Man komutu
Man komutu ile bir komuta ait kullanım klavuzuna ulaşmak
mümkündür.Kullanım klavuzlarında ise komutun ne işe
yaradığı ile ilgili temel bilgiler ve eğer alıyorsa
parametrelerine ait bilgiler bulunur.man <komut adı>
şeklinde yazıldığında komuta ait kullanım klavuzunu
getirir.Komutlar dışında aşağıdki tabloda görülebilecek
öğelerinde kullanım klavuzuna man ile ulaşmak mümkün
olacaktır.Örneğin , “man passwd” komutu ile passwd
komutunun man sayfasına erişebilirken “man 5 passwd”
komutu ile passwd dosya uzantısına ait man sayfasına
erişirsiniz.Eğer aradığınız isimde bir man sayfası yoksa
hata ile karşılaşırsınız.
8. Metin akışları(Stream)
Terminal ortamında çalışan programlar metin
akışlarıyla çalışma durumlarını programı kullanan
kişiye aktarabilirler.Örneğin , ls komutu dizi ve dosyları
listeleyebilmesi için metin akışına ihtiyaç duyar.
Akış tipleri :
Standart Output : Bir program çalışmaya başladıktan
sonra o programın ürettiği çıktılara verilen isimdir.
Standart İnput : Kullanıcı klavyesinden ya da stdout
akışından gelen metni programa girdi olarak alabilen
akış türüdür.
Standart Error : Standart output'un bir türevi olup hata
çıktılarını içeren çıktılardır.Bir program çalışırken hata
mesajlarını dosyalara yazmak , diğer mesajları ise
terminalde tutmak istersek stderr çıktılarını
kullanabiliriz.
9. Girdi-Çıktı
Yönlendirmesi
Akışları birbirlerine yönlendirmek için bazı karakterler
kullanılır.Bunların kullanım şekilleri aşağıdaki gibidir.
Stdout > File : bir programın oluşturduğu stdout verisini yeni bir
dosya açarak o dosyaya kaydeder eğer dosya var ise üzerine yazar.
Stdout >> File : bir programın oluşturduğu stdout versini var olan bir
dosyaya kaydeder.Eğer dosya bulunmuyorsa yeni dosya oluşturur.
Stderr 2> File : ilk kullanımla aynı mantıktadır. Farklı olarak stdout
değilde stderr mesajlarını kullanır.
Stderr 2>> File : ikinci kullanımla aynı mantıktadır.Farklı olarak
stdout değilde stderr mesajlarını kullanır.
Stdout ve stderr &> : stdout ve stderr mesajlarını yeni bir dosyaya
yazar eğer dosya varsa üzerine yazar.
Stdin < File : dosya içeriğine stdin mesajı alan bir programa toplu
halde gönderir.
Stdin << File : dosya içeriğine stout mesajı alan bir programa satır
satır gönderir.
Stdin | stdout | stdin | stdout | …. : Pipe işlemi olarak adlandırılır.bir
programa ait stdout akışını akabinde gelen diğer programlara stdin
olarak gönderir.
Stdout | tee File : aynı anda output hem terminalde okunabilir hem
de bir dosyaya kaydedilebilir.
10. Komut içerisinde
komut çalıştırma
Bazı özel durumlarda komut içerisnde komut
çalıştırma ihtiyacı olabilir.Örneğin bir dizinde birden
fazla dosya bulunması durumunda bu dosyaların
hepsinin içeriğinin terminale yazılmasını isteyecek
olursak bu yöntemle kolay bir şekilde
gerçekleştirilebilir.
Bir komut içerisinde başka bir komutu çalıştırmak için
komutları aşağıdaki formda yazmak gerekir.
Komut `komut` buradaki özel karakter (`) kesme işareti
olan (') karakter ile karıştırılmamalıdır.
11. Değişkenler
Hemen her dilde olduğu gibi bash dilinde de değişkenler
bulunmakta.Temelde değişkenler programlar içerisinde belli
sayı veya başka tipteki veriyi tekrar tekrar yazmayı engeller ve
yazılan komutlar dizisinin daha anlamlı olmasını sağlarlar.bash
dilinde değişken tanımlaması aşağıdaki gibi yapılır.
rfm@debian:~/IUSiberSlaytlar$ x=rfm
Burada dikkat edilmesi gereken husus ise atama yaparken
aralarda boşluk olmamasıdır eğer bir metin ataması
yapılacaksa ya kaçış karakteri () kullanılarak boşluklar
belirtilmeli ya da içerisinde boşluk olan metinler (“ ”) işaretleri
arasına yazılmalıdır aksi halde komut yorumlayıcısı her bir
boşluktan sonrasını ya komut ya da parametre olarak
yorumlayacaktır.Bu da hatalara sebep olur.
Önceden tanımlı olan değişkenlerin değerlerine ulaşmak için
başlangıçlarına ($) işareti konulur.echo komutu sayesinde bir
değişkenin içeriğini terminale yazdırabiliriz.Örneğin ;
rfm@debian:~/IUSiberSlaytlar$ echo $x
12
12. Değişkenler üzerinde aritmetik işlemler yapmak
mümkündür aritmetik işlemler için let komutu
kullanılır.Örneğin ;
rfm@debian:~/IUSiberSlaytlar$ x=12
rfm@debian:~/IUSiberSlaytlar$ let x=$x+13
rfm@debian:~/IUSiberSlaytlar$ echo $x
25
rfm@debian:~/IUSiberSlaytlar$ x=12
rfm@debian:~/IUSiberSlaytlar$ let x=$x*2
rfm@debian:~/IUSiberSlaytlar$ echo $x
24
13. Çevre Değişkenleri
Shell içerisinde bazı işlemlerin yapılabilmesi için gerekli
olan ve kullanıcı tarafından üzerinde değişiklikler
yapılabilen değişkenler vardır bu değişkenlere çevre
değişkeni adı verilir.Örneğin java ile yazılan kodu
derlemek için jdk'ya ihtiyaç duyulur.jdk belirli bir dizin
içerisinde olmak zorunda değildir bundan dolayı
öntanımlı bir jdk dizini yoktur.Fakat komut satırının jdk'nin
bulunduğu dizini bilmesi gerekmektedir.Bu durumda
komut satırı bu adresi elde etmek için $JAVA_HOME
isimli çevre değişkenine bakacaktır.Bir başka örnek ise
terminal'in çalıştıracağı dışsal komutların bulunduğu
dizinler için verilebilir.Genellikle linux dağıtımlarında
çalıştırılabilir dosyalar /bin dizini içerisinde tutulur.Fakat
bu bir zorunluluk değildir eğer komut satırından doğrudan
erişmek istediğiniz programlar varsa bunların bulunduğu
dizinleri $PATH değişkenine aralarında ( : ) olmak üzere
eklerseniz bu programlara komut satırından rahatlıkla
erişebilirsiniz.Örneklerden de anlaşıldığı üzere çevre
değişkenleri büyük harflerle ifade edilirler bu yüzden
değişken ataması yaparken tümünü büyük harfle
yapmamak olası bir karışıklığın önüne geçilmesine
yardımcı olacaktır.
14. Düzenli
İfadeler(Regular
Expressions)
Düzenli ifadeler bir metnin içerisinde bir metin desenini
ifade etmek için kullanılır.Başka bir deyişle düzenli ifadeler
birden fazla ya da belli bir kurala uyan fakat önceden
belirlenemeyen bazı metinlerin yerine geçebilir.
Regex karakterleri
Köşeli parantezler : İçerisinde bulunan karakterlerden
herhangi biri yerine geçebilirler.Örnek ;
r[fse]m ifadesi rfm rsm rem ifadelerine karşılık gelecektir.
Tire karakteri : Belirli bir harf ya da rakam aralığını ifade
etmek için kullanılırlar.Örnek ;
r[a-c]m ifadesi ram rbm rcm ifadelerinin , 15[2-4]3 ifadesi
1523 1533 1543 ifadelerinin, [A-Z] A'dan Z'ye tüm harflerin
yerine [a-z] a'dan z'ye tüm harfler yerine geçecektir.
Nokta karakteri : Yerine yeni satır karakteri hariç herhangi
bir karakter gelebilir.Örnek ;
r.m ifadesi yerine rfm r2m r*m rFm … vb. Ifadeler karşılık
gelecektir.
15. ( ^ ) ve ( $ ) karakterleri : (^) karakteri sonrasında gelen
metin ile başlayan tüm metinleri ifade etmek için
kullanılır. ( $ ) karakteri ise öncesinde gelen metin ile
biten metinleri ifade etmek için kullanılır.Örnek ;
^r ifadesi rfm rnm rrr rsm rqw rWx vb. metinler yerine
kullanılabilir.
r$ ifadesi ise awr wwr rrr qWr 1wr vb. metinler yerine
kullanılabilir.
( * ) ve ( ? ) karakterleri : ( * ) karakteri 0 veya 1'den fazla
herhangi bir karakter için kullanılır.( ? ) karakteri ise 0
veya 1 adet herhangi bir karakterin yerine geçmesi için
kullanılır.Örnek ; *Atatürk ifadesi MustafaKemalAtatürk
M.KemalAtatürk MustafaK.Atatürk ya da Atatürk
ifadelerinin yerine geçebilir.
??Mehmet ifadesi ise FSMehmet FMehmet SMehmet ya
da Mehmet ifadesi yerine geçebilir.
( | ) karakteri : iki farklı kuralı birleştirmek için
kullanılır.Örnek; (*Atatürk)|(??Mehmet) ifadesi bir önceki
açıklamadaki açılımların hepsinin yerine geçebilir
( ) karakteri : kaçış karakteri olarak adlandırılır.Tırnak
işaretinin içerisinde tırnak işareti kullanma,kesme
işaretinin içerisinde kesme kullanma,komut satırında
boşluk kullanmak vb. Işlemler için tercih edilir.Aslında
kendinden sonra gelen karakterin eğer özel bir görevi
varsa o görevi yoksaymasını sağlar.Örnek ; ” - _ *