Bash başlangıç
İçindekiler
1.0 Önsöz
2.0 Giriş
3.0 Bash nedir?
3.1 Neden
önemlidir?
3.2 Nasıl
ulaşılır?
4.0 Önemli kavramlar
4.1 Komutlar
4.2 Değişkenler
4.3 Dosya sistemi
5.0 Siyah ekranda ilk adımlar
5.1 Değişkenlerin
değerlerini öğrenmek
5.2 Geçerli klasörü
öğrenmek
5.3 Geçerli klasördeki
diğer klasör ve dosyaları
görüntülemek
5.4 Geçerli klasörü
değiştirmek
5.5 Dosya ve klasör
oluşturmak
5.6 Dosya ve klasör
silmek
5.7 Dosya ve klasörleri
kopyalamak
5.8 Dosyaların
isimlerini/yerlerini değiştirmek
5.9 Dosya düzenlemek
5.10 Komutları ve
konumları hızlı tamamlamak
5.11 Geçerli satırı
iptal etmek ve geçerli konsolu kapatmak
5.12 Komut satırlarını
dondurmak ve devam ettirmek
5.13 Görüntülenen
dosyaları renkli yapmak
5.14 Komutlar hakkında
daha fazla bilgi edinmek
6.0 Belgeler
sürüm 1.1 - Şubat 2006
1.0 Önsöz
Bu yazı Can Kavaklıoğlu
tarafından, Pozitif PC' nin ikinci sayısı için yazılmıştır.
Yazıdaki hataları, önerileri, soruları ve/veya yazının oluşturduğu
tepkileri
yukarıdaki bağlantıdan ulaşabileceğiniz eposta adresine yollarsanız pek
de güzel olur.
Herzamanki gibi bu yazıda yazanlar etkisinde kalarak yaptığınız
hareketlerden yazar sorumlu değildir.
2.0 Giriş
Bu yazı Bash ve kabuk kullanımına yeni giriş yapanlar için, ilk giriş
belgesi olarak yazılmıştır. Yüksek emelleri yoktur. Tek amacı Bash
kullanımına başlamak için gerekli temel fikirler ve deneyimleri
iletmektir.
3.0 Bash nedir?
Linux sistemlerinde bütün programların donanım ile iletişimini kernel kurar. Kernel programcılığı
gizemli bir meslektir. Bu meslekle uğraşanlara ağabey gözüyle bakmak
gereklidir.
Donanım dünyasından, programlar dünyasına doğru yapılan yolculukta,
kernelden
bir adım sonra karşımıza kabuk ("shell") çıkar. İsminin nereden
geldiğine pek şaşırmamak lazımdır; zira donanım, kernel ve (kernelin)
kabuk (u) şeklinde devam eden isimlerdir. Aralarındaki ilişki şöyle bir
resimle özetlenebilir:
Kabuk aracılığı ile kullanıcıdan alınan komutlar, kernel tarafından
donanım üzerinde çalıştırılır ve sonuçları yine kabuk aracılığı
kullanıcıya iletilir. Böylece kullanıcı ne donanım ile ne de kernel ile
iletişim kurmadan, oldukça üst seviyelerden işini görmüş olur. Eğer bu
yapı olmasaydı kabuktan verebileceğimiz komutlar yerine, c dilinde kod
yazıyor, işlemcinin pinlerine elektrik sinyali yollamaya çalışıyor yada
daha da kötüsü abaküs kullanıyo olabilidik...
Bash da bir kabuktur. İsmi "bourne-again shell" in kısaltılmışıdır. GNU
tarafından en kapsamlı olarak kullanılan kabuktur.
3.1 Neden önemlidir?
Linux'le ilgilenmek isteyen kişiler, eğer Linux kullanarak
özgürleştirdikleri benliklerini bir adım daha geliştirmek istiyorlarsa
ilk bakmaları gereken yer, siyah ekran (diğer isimleriyle konsol,
terminal, komut satırı), yani kabuktur.
Kabuğu kullanarak bilgisayarınızla yapabileceğiniz herşeyi
yapabilirsiniz. Linux programlarının çoğu sadece konsoldan çalışır;
grafik arayüzü olan programların bir kısmı bile konsol desteği
vermektedir. Eğer her gün aynı işi yapmak için kullandığınız programlar
varsa,
hergün fare ile aynı hareketleri yapmaktan sıkıldıysanız, duruma göre
işinizi çok daha hızlı bir şekilde birkaç komut ile halledebilirsiniz.
Hatta komutları belirlediğiniz zamanlarda kendi kendilerine çalışmak
üzere bile ayarlayabilirsiniz.
Hernekadar ilk başlarda korkutucu ve hayal kırıcı gelse de, kabuk
gerçekten yeni bir dünyanın kapılarını temsil etmektedir. Özellikle her
programcının şiddetle kullanması gereken güç kaynağıdır. Unutulmaması
gereken çok mühim bir nokta, görsel arayüzlerin, kullanımı
kolaylaştırmak için, konsol komutlarının birçok sınırlama ile sunulmuş
halleri olduğudur. Görsel arayüzler, hernekadar yeri geldiğinde büyük
kolaylık ve verim artışı sağlasalar da, toplamda bakıldığında,
özellikle konsoldan yapılabilecek işlerin sayısı ile karşılaştığında,
önemsiz
kalabileceklerdir.
3.2 Nasıl ulaşılır?
Güncel Linux sistemlerinde bash kabuğuna iki yolla ulaşabilirsiniz.
- X sunucunuz üzerinden, xterm (X için, yani hem gnome hem de kde),
gnome-terminal (gnome
için) yada kterm (kde için) gibi bir programla.
- X sunucunuzdan ctrl+alt+F1 tuşlarına beraber basarak
çıkabileceğiniz tty ler.
tty ler hakkında bir not kaç önemli nokta:
Eğer klavyenizin çalışan bir "function" tuşu varsa ve bu tuş F1..12
tuşlarını değiştiriyorsa, "function" tuşunun doğru konumda olduğundan
emin olun. "help" yada "undo" gibi alakasız bir komut değil F1 tuşuna
basmak istiyoruz.
tty ler genelde birden başlayarak altı ya kadar devam eder. Yedinci tty
de ise X sunucunuz yer alır; yani X sunucunuza (dolayısıyla kde yada
gnome oturumuza) geri dönmek için yedi numaralı tty yi açmanız
gereklidir.
tty ler arasında gezmek için ctrl tuşunu kullanmanıza gerek yoktur,
sadece alt+F1 (yediye kadar herhangi bir FX) tuşlarını kullanmanız
yeterlidir.
X sunucunuzdan çıkarken illa F1 e basmanıza gerek yokdur, normal olarak
F6 ya kadar herhangi bir F tuşunu kullanabilirsiniz.
Wikipedia'nın dediğine
göre tty ismi, "Teletype" kelimesinden geliyormuş; "Teletype" kelimesi
de, "Teletypewriter" kelimesinden geliyormuş.
4.0 Önemli kavramlar
Kabukla kullanıcının iletişimini sağlayan elemanlar şöyle sıralanabilir:
- Komutlar
- Değişkenler
- Dosya sistemi
4.1 Komutlar
Kabukta nerdeyse her zaman ilk adımınız bir komut belirtmek olacaktır.
Kullandığımız herbir program kabuk açısından bir komutla başlar. Her
komut,
isminin çağrılmasıyla çalışmaya başlar ve komutu temsil eden işlem
("process") sonlanana kadar işlemlerini sürdürür. İşlemin sonlanması
için iki yol vardır; birisi işlemin çalışmasının bitiminde, sonuna
gelerek bir
sonuç dönmesi; diğeri ise dışarıdan yeterli yetkiye sahip başka bir
işlem tarafından durdurulması yada sonlandırılması.
Komutlarla iletişimin ilk noktası, komut çağrılırken yanına yazılan
değiştirgelerdir (parametrelerdir). Değiştirgeler kullanılarak
komutlara üzerinde
çalışmalarını istenen veriler gönderilebilir. Değiştirgeler
kullanılarak
iletilen diğer önemli bir bilgi de seçeneklerdir. Genelde her komutun
bir (çok) seçeneği vardır. Komut verilen seçeneklere göre yapması
gerekenleri belirler. Seçenekler genelde tire (-) ile başlayan tek bir
karakter/harf yada iki tire (--) ile başlayan kelimelerden oluşur.
Aynı anda birden fazla seçenek ve/veya veri berlirtmek mümkündür.
4.2 Değişkenler
Kabuk değişkenleri, komutların kendi içlerinde, komutlar
arasında ve genel sistemle komutlar arasında iletişim kurmanın temel
yollarından birisidir.
Örnek olarak değişkenlerin tipik görevlerinden birisini "sistem yolu
değişkeni" (PATH) gösterir. Sistem yolu değişkeni, kabuk üzerinde
kullanabileceğimiz komutları sağlayan programların nerelerde
olabileceğini gösteren bir değişkendir. Eğer bu değişkenin değerini
silerseniz, kabukta hiçbir komut çalıştıramazsınız. Aşağıdaki örnekler
kısmında ayrıtılarını göreceğiz.
4.3 Dosya Sistemi
Linux sistemlerinin en temel taşlarından birisi de dosya sistemidir.
Kabuğu ve kabuğun üzerinde çalışan komutları kullanarak dosya sistemine
erişebiliriz, üzerinde değişiklikler yapabiliriz. Eğer şimdiye kadar
sadece grafiksel bir dosya yöneticisi kullandıysanız, komut satırından
dosya sistemine erişmek oldukça farklı gelecektir. Komut satırından
dosya sistemine erişim son derece pratik olabilir. Ancak pratik hale
gelmeden önce uzunca bir süre oldukça acılı ve bıktırıcı geçebilir.
Çoğu zor yolun sonunda olduğu gibi birçok kazanç vardır. Grafik bir
arayüzle hayal bile edemeyeceğiniz şeyleri komut satırından tek bir
komutla gerçekleştirebilirsiniz.
Diğer yandan bazı durumlarda grafik arayüzün pratikliği de komut
satırında bulunmamaktadır. Mesela masaüstündeki bir klasöre fare ile
iki kere tıklamak, bazı tembel anlarda bir komut ve ardından dosyanın
yolunu yazmaktan daha kolay olabilir.
Linux dosya sistemi kök ("root") diye ifade edilen, / karakteri ile
belirtilen noktadan başlar ve hiyerarşik ağaç yapısı ile ilerler. Genel
olarak kullanılan klasör isimlerinden bazıları şöyledir:
- can isimli kullanıcıya ayrılan klasör: /home/can
- var, "variable" (değişken) , "log" (kayıt) , sistemin ürettiği
kayıt dosyalarına ayrılan klasör: /var/log
- tmp, "temprorary" (geçiçi), geçici olarak kullanılan, heran
silinebilecek olan dosyalar için ayrılan klasör: /tmp
5.0 Siyah ekranda ilk adımlar
Komut satırında kaybolmamak için, ilk adımlarda herkesin bir rehbere
ihtiyacı vardır. İlk önce birkaç küçük adım atalım, sonrasında koşmaya
başlarız.
Başlamadan önce birkaç not:
- Başında büyüktür işareti (>) olan her satır yeni bir komut
satırını ifade eder. Verilen komutların cevaplarının satır başlarında
ise > işareti kullanılmamıştır. Eğer komutları kopyalayıp kullanmak
isterseniz, büyüktür işaretlerini kopyalamamalısınız.
- Kabuk üzerinde kullanıdığınız küçük ve büyük karakterler aksi
belirtilmediği sürece birbirinden farklıdır. Denemelerinizi yaparken
büyük/küçük harfleri aynen kullanıdığınıza emin olun.
5.1 Değişkenlerin değerlerini öğrenmek
Gerekli komut: echo
Açıklama: echo komutunun
ardından yazdığınız bütün karakterler, (her
komut için olduğu gibi) değiştirge olarak echo komutuna yollanır. echo
komutu da bu karakterler üzerinde gerekli yorumlamaları yaptıktan sonra
cevabı komut satırına yazar.
Örnek:
> echo merhaba siyah ekran
merhaba siyah ekran
Bundan bir adım sonrası da kabuk değişkenlerini yorumlamak olacaktır.
> echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Burada PATH (sistem yolu değişkeni) değişkeninin içeriğini görüyoruz.
Başında dolar ($) işareti olan kelimeler, bash kabuğu tarafından
değişken olarak algılanır ve değişkenin ismi, değişkenin değeri ile
değiştirilir.
Dikkat edilmesi gereken bir nokta PATH değişkeninin içeriğinin, echo
komutu tarafından değil, bash kabuğu tarafından erişildiğidir. Diğer
bir değişle yukarıdaki komut ile şu komut, echo açısından tamamen
aynıdır:
> echo "/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games"
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Yani başka bir yerde bir değişkenin içeriğine erişmek için echo
komutunu kullanmanıza gerek yoktur, sadece $DeğişkeninAdı demeniz
yeterlidir.
echo ismi İngilizce'deki "echo" (yankı) ifadesinden gelmektedir.
5.2 Geçerli klasörü öğrenmek
Gerekli komut: pwd
İlgili kabuk değişkeni: PWD
Açıklama: Komut satırında her
zaman için geçerli bir klasör vardır.
Geçerli klasör dosya sisteminde bir noktaya işaret eder.
Bash kabuğu, çalıştırdığımız her komutu, PWD isimli değişken aracılığı
ile, geçerli
klasörden haberdar eder.
Örnek:
> pwd
/home/can
> echo $PWD
/home/can
pwd ismi "Print name of Working Directory" (geçerli klasörün adını yaz)
ifadesinden gelmektedir.
5.3 Geçerli klasördeki diğer klasör ve dosyaları
görüntülemek
Gerekli komut: ls
Açıklama: ls komutu
bulunduğunuz klasördeki öğeleri listeler. ls
komutunun birçok yararlı seçeneği vardır.
Örnek:
> ls
a
> ls -a
. .. a
-a ("all", hepsi) seçeneği, ls komutuna, klasördeki gizli elemanları da
göstermesini istediğimizi belirtir.
. (nokta) dosya sisteminde, geçerli klasörü belirtir.
.. (iki nokta) dosya sisteminde, hiyerarşik yapıdaki bir önceki klasörü
belirtir.
Hem . hem de .. , nokta ile başladıkları için gizli kabul edilirler ve
seçeneksiz ls komutu kullanıldığında gösterilmezler. Eğer geçerli
klasörümüzde
.gizli isimli bir dosya olsaydı, seçeneksiz ls komutu yine yukarıdaki
sonucu verirdi.
Fakat ls -a komutu şöyle bir sonuç verirdi:
> ls -a
. .. .gizli a
-l seçeneği ise, geçerli klasördeki öğeler hakkında bize biraz daha
fazla bilgi verir:
>ls -l
-rw-r--r-- 1 can can 0 Feb 19 04:09 a
Hem -a hem de -l seçeneğini beraber kullanabiliriz:
> ls -al
drwxr-xr-x 2 can can 4096 Feb 19 04:24 .
drwxr-xr-x 10 can can 4096 Feb 19 04:08 ..
-rw-r--r-- 1 can can 0 Feb 19 04:24 .gizli
-rw-r--r-- 1 can can 0 Feb 19 04:09 a
Birden fazla seçeneği bu şekilde beraber belirtmek birçok komut
tarafından
kabul edilir. Gerekirse seçenekler aynı satırda olmak şartıyla ayrı
ayrı da ( ls -a -l şeklinde ) belirtilebilir.
Dikkat ettiyseniz ls komutuna denk bir kabuk değişkeni yok. Bunun
sebebi şöyle açıklanabilir. Örnek olarak geçerli klasör sadece tek bir
değişken ile ifade edilebilir ve bu değişkenin boyutu en fazla dosya
sistemi ağacındaki en alt dallardaki en uzun isimli klasör kadar
olabilir. Her geçerli klasör değişiminde değiştirilmek bile dikkate
alınmayacak bir işlem olarak görülebilir. Diğer yanda eğer geçerli
klasördeki bütün klasör ve dosyaların isimlerini bir değişkende tutmak
isteseydik, her geçerli klasör değişiminde, söz konusu değişkenin
değerinin hesaplanması için oturup beklememiz gereken durumlar ortaya
çıkabilirdi. Zira bazı klasörler binlerce dosya içerebilir (ör. çalışan
sistemimdeki /usr/bin klasöründe 2033 dosya var). Sadece bu sebep bile
geçerli klasördeki bütün dosyaların tutulduğu bir değişken olmaması
için yeterlidir. ls komutu oldukça hızlı bir şekilde geçerli klasördeki
öğeleri geçerli klasörün bulunduğu aygıttan (sabit disk, disket, cd
vb.) öğrenek bize belirtir.
ls ismi "list" (listele) ifadesinden gelmektedir.
5.4 Geçerli klasörü değiştirmek
Gerekli komut: cd
Açıklama: ls komutu ile
bulunduğumuz klasördeki öğeleri öğrendikten
sonra şimdi de sıra cd komutu ile geçerli klasörümüzü değiştirmekte.
Örnek:
> ls
a b
Eğer b bir klasör ise, geçerli klasörümüz haline getirebiliriz:
> cd b
/b>
değilse,
> cd b
bash: cd: b: Not a directory
yada Türkçe bir sistemde, b bir dosya ise:
> cd b
bash: cd: b: Bir dizin değil
yada yine Türkçe sistemde, b öğesi yoksa:
> cd b
bash: cd: b: Böyle bir dosya ya da dizin yok
cevaplarını alırız.
Bulunduğumuz klasörü kontrol etmek için, yukarıda geçen komutları
deneyebiliriz:
/b> pwd
/home/can/b
yada:
/b> echo $PWD
/home/can/b
Yine önceki bölümde bahsettiğimiz gibi, bir önceki klasöre gitmek için
.. (iki nokta) dosyasını kullanmamız gereklidir. Mesela b klasöründen
çıkıp, önceki klasöre dönmek için:
/b> cd ..
>
komutunu kullanabiliriz.
Dikkat ettiyseniz, cd komutu başarılı çalışmasında bize cevap vermedi.
Sadece yeni komut satırımızın başında bulunduğumuz klasörü belirten
işaret b yi de kapsar hale geldi. Komut satırında çalışırken bu durumla
sık sık karşılacağız. Çıktı kirliliğini önlemek için, çoğu temel
Linux
komutu, başarılı çalışma üzerine yanıt vermezler, sadece bir sorun
varsa kullanıcıyı rahatsız ederler. Bu durum özellikle başlarda kafa
karışmasına sebep olabilse de, birkaç denemeden sonra alışılınacaktır.
cd ismi "change directory" (klasör değiştir) ifadesinden gelmektedir.
5.5 Dosya ve klasör oluşturmak
Gerekli komutlar: touch, mkdir
Örnek:
Geçerli klasörümüzde dosya oluşturmak için:
> touch c
>
Oluşturduğumuz dosyayı görüntülemek için:
> ls
a b c
Geçerli klasörümüzde klasör oluşturmak için:
> mkdir d
>
Oluşturduğumuz klasörü görüntülemek için:
> ls
a b c d
touch komutunu zaten var olan bir dosya üzerinde kullandığınız zaman,
belirtilen dosyanın değiştirilme tarihini o anki zamana
değiştirecektir. Mesela yukarıda oluşturduğumuz c dosyasının
değiştirilme tarihine bakalım:
> ls -l c
-rw-r--r-- 1 can2 can2 0 Feb 19 05:07 c
c dosyası saat 05:07 de değiştirilmiş (yada oluşturulmuş). Şimdi c
dosyasının üzerinde touch komutunu deniyelim:
> touch c
>
ve bir daha c nin değiştirilme tarihini kontrol edelim:
> ls -l c
-rw-r--r-- 1 can2 can2 0 Feb 19 05:14 c
Görüldüğü üzere c dosyasının değiştirilme tarihi değişmiş (05:14).
touch ismi "touch" (dokun) ifadesinden gelmektedir.
mkdir ismi "make directory" (klasör oluştur) ifadesinden gelmektedir.
5.6 Dosya ve klasörleri silmek
Gereli komut: rm
Açıklama: rm komutu oldukça
tehlikeli bir komut olabilir. Çünkü Linux
sisteminin doğası gereği verdiğiniz komutlar tam olarak siz ne derseniz
onu yapar. Diyelim ki siz dosya sisteminizin kök klasörüne gittiniz ve
root kullanıcısı (yetkili kullanıcı) olarak "rm -rf ." komutunu
verdiniz, sisteminizin boyutuna bağlı olarak birkaç dakika yada birkaç
on dakika sonra, dosya sisteminizin yerinde yeller uçtuğunu
görebilirsiniz. Bu yüzden komut satırında verdiğiniz komutların doğru
olduğundan, kastettiğiniz komutu yazdığınızdan, özellikle rm gibi geri
dönüşü imkansız olabilen komutları kullanırken emin olmalısınız.
Bu göz korkutmasından sonra rm komutuna bir örnek verelim.
Örnek:
Eğer bulunduğumuz klasördeki a dosyasını silmek istersek:
> rm a
>
komutunu vermemiz yeterlidir. Klasörümüzün durumuna göz atalım:
> ls
b c d
Ancak bir dosyayı silmek istersek hata ile karşılaşacağızdır:
> rm d
rm: cannot remove `d': Is a directory
yada Türkçe bir sistemde:
> rm d
rm: `d' silinemedi: Bir dizin
sonucunu alırız.
Bu hatanın temel sebebi yukarıda anlatılana benzer kazaları önlemektir.
Dikkat ettiyseniz, yukarıda belirtilen kazada, -r ve -f seçenekleri
kullanılmıştır. -r seçeneği özdevinimli ("recursive") seçeneğini
belirtir; yani bu komutu
geçerli klasöre, geçerli klasörün içindeki diğer klasörlere, onların
içindeki klasörlere .... uygulamak istiyorum, demektir. -f seçeneği ise
rm komutunun bize sorumasını engeller; mesela yazma hakkı kapatılmış
dosyaları silmek için, eğer yeterli yetkiye sahipsek (değilsek
silemez), rm söz konusu
dosyayı silmek istediğimizden emin olup olmadığımızı sorar. Eğer rm
komutuna -f seçeneğini verirsek bu gibi soruları sormadan, çalıştıran
kişinin yetkisi dahilinde, değiştirge ile belirtilen konumda önüne ne
gelirse silecektir. Anlaşıldığı üzere -r ile -f güçlerini
birleştirirlerse herşeyi silip süpürecekleri açıktır...
Saatlerce uğraştığınız işler gibi önemli şeyleri bir komutla kaybedip
hayattan nefret etmeye başlamamak için her zaman rm komutunu
kullanırken dikkatli olmamız gereklidir.
Bir dosyayı ve içindeki bütün dosya ve klasörüleri silmek için -rf
seçeneklerini beraber kullanabiliriz. Yada daha emin olmak istiyorsak,
dosyanın içindekileri gözden geçirerek her dosyayı elle silebiliriz.
İstem
dışı silinmelere karşı paranoyakça hisleri önlemek için çok yararlı bir
komut mevcuttur. "rmdir" komutu sadece ve sadece içi boş dosyaları
siler. Yani bir dosyanın içinde sadece bir öğe varsa
bile hata mesajıyla uyarır ve klasörü silmez.
rm ismi "remove" (sil) ifadesinden gelmektedir.
5.7 Dosya ve klasörleri kopyalamak
Gerekli komut: cp
Örnek:
Önce kopyalamak isteyeceğimiz dosyayı oluşturalım:
> touch kaynak
>
Başarılı olduğumuzu görelim:
> ls
b c d kaynak
Kopyalama komutumuzu verelim:
> cp kaynak hedef
>
Sonucu görelim:
> ls
b c d hedef kaynak
Klasör kopyalamak istersek birkaç karakter daha yazmamız gereklidir.
Çünkü önceden tanımlanmış olarak cp komutu klasörleri kopyalamaz:
> cp b bb
cp: omitting directory `b'
yada Türkçe bir sistemde:
> cp b bb
cp: `b' dizini atlanıyor
sonucunu alırız.
Bunun sebebi yine yukarıda bahsedildiği gibi bir koruma mekanizması.
Bir klasör taşımak istediğimizden emin olduğumuzu biraz daha net
belirtmemiz gerekiyor. Bunun için yine -r özdevinimli ("recursive")
seçeneğini kullanmamız gereklidir. Böylece cp komutuna b klasörünü ve
(varsa) içindeki tüm öğeleri kopyalamak istediğimizi belirtmiş oluruz:
> cp -r b bb
>
> ls
b bb c d hedef kaynak
cp ismi "copy" (kopyala) ifadesinden gelmektedir.
5.8 Dosyaların isimlerini/yerlerini değiştirmek
Gereli komut: mv
Açıklama: Komut satırında,
oldukça akıllıca bir şekilde, öğe (dosya/klasör) ismi değiştirmek
ile öğe konumu değiştirmek aynı komut ile yapılır; çünkü bir dosyanın
yerini değiştirmek de, adını değiştirmek de, aynı işlem
olarak düşünülebilir: belirtilen dosyanın silinmesi ve aynı dosyanın
başka bir
isimle herhangi bir yerde yeniden oluşturulması.
Buradaki önemli bir nokta dosya sistemimizdeki her öğenin yapısı
içerisinde konumunu da içeriyor olmasıdır. Örneklerimizde dosyalarımızı
göreceli isimleri ile ifade ettiğimiz için bunu göremedik. Ancak her
dosyanın bir "salt adresi" vardır. Mesela eğer geçerli klasörümüz
"/home/can" iken, bu klasörde yukarıda anlatıldığı şekilde "a" isimli
bir dosya oluşturduğumuzda, bu dosyanın salt ismi "/home/can/a" olur.
Eğer geçerli klasörümüz "/home/can" ise bu dosyaya bulunduğumuz geçerli
klasöre göreceli olarak sadece "a" olarak ulaşabiliriz. Aksi taktirde
salt adresiyle ("/home/can/a") yada nokta klasörülerini kullarak ufak
bir tırmanış ile (mesela "/home/can/klasör/" klasöründeyken "../a"
şekilnde) ulaşmamız gerekir.
Örnek:
> mv c C
>
komutundan sonra klasörümüzün durumuna bakarsak:
> ls
b bb C d hedef kaynak
görürüz ki c dosyasının ismi C olarak değiştirilmiştir.
Şimdi eğer C dosyasını d klasörüne taşımak istersek. İki yol
seçebiliriz. Birincisi C dosyasını d klasörüne kopyaladıktan sonra,
geçerli klasörümüzdeki C yi silmek. Yada bu iş için mv komutunu
kullanmak:
> mv C d/
>
geçerli klasörümüzün durumuna bakalım:
> ls
b bb d hedef kaynak
d klasörünün içine bakalım:
> ls d
C
görüldüğü gibi mv komutu oldukça işe yarayabilir.
mv komutu da yukarıda anlatılan rm komutu gibi tehlikeli olabilir.
Mesela iki tane farklı isimli dosyadan birisini diğerinin üstüne
taşırsanız, sessiz sedasız üstüne yazılmış olan dosya kaybolacaktır...
Bu yüzden rm den sonra mv komutunu kullanırken verdiğiniz komutlara
dikkat etmelisiniz.
mv komutunu kullanırken, var olan aynı isimli dosyaların üzerine
yazmamak için kullanabileceğiniz bir yöntem aşağıdaki "komutları ve
konumları hızlı tamamlamak" olabilir. Eğer hedef öğenizi (üstüne yazma
riski olan dosya/klasör) hızlı tamamlamaya çalışırsanız ve başarısız
olursanız, bu durum böyle bir dosyanın/klasörün var olmadığı anlamına
gelir. Yani üzerine yazılacak belirttiğiniz isimli bir dosya yoktur.
mv ismi "move" (taşı) ifadesinden gelmektedir.
5.9 Dosya düzenlemek
Bash kabuğu kendi başına dosya düzenleme programı sunmamaktadır. Dosya
düzenleme
programları kendi başlarına birer programdır ve kişisel bir ortam
olduğu için herkesin farklı istekleri/beklentileri vardır. Bash kabuğu
ise genel kullanım için tasarlanmıştı, ilk amaçlarından birisi hızlı
çalışmak olan bir yazılımdır. Eğer tam bir dosya düzenleme programı
isteniyorsa, amaca göre şu programlardan birisi seçilebilir.
Komut satırından çalışan dosya düzenleme programları (başlangıç için en
uygunu nano olacaktır):
ed, vim, nano
X üzerinden çalışan dosya düzenleme programları:
gvim, gedit, kedit, mozilla-composer
İlla komut satırından dosya oluşturulmak isteniyorsa yeniden
yönlendirme tekniği kullanılarak bir sınırlı başarı elde edilebilir:
> echo "merhaba konsl
>dan yazı yazıyoruz ama
>yazmasak daha iyi olacak
>çünkü yazıyı yeniden açmak
>yazmak kadar kolay olmayacak" > e
>
Böylece e dosyasının içine tırnak arasında yazdıklarımız konacaktır. e
dosyasını belirten "e" harfinden önceki büyüktür işareti (>), yeni
bir komut satırını belirtmez. Bu büyüktür işareti bash kabuğunun bize
sunduğu çok kullanışlı bir araç olan "yönlendirme" işlevini belirtir.
Yukarıdaki örnekte yaptığımız, bash kabuğundan, echo komutunun
çıktısını e dosyasına yönlendirmesini rica etmektir. Sonuç olarak, eğer
e dosyası yoksa, yeni bir e dosyası oluşturulup, echo komutunun çıktısı
içine konacaktır. Eğer e dosyası varsa, silinecek ve yerine yine echo
komutunun çıktısını içeren bir e dosyası konacaktır. Eğer var olan bir
e dosyasının sonuna ekleme yapmak istiyorsak >> işaretini
kullanabiliriz.
e
dosyasının (yada herhangi bir dosyanın) içeriğini görmek için cat
komutunu kullanabiliriz.
> cat e
>merhaba konsl
>dan yazı yazıyoruz ama
>yazmasak daha iyi olacak
>çünkü yazıyı yeniden açmak
>yazmak kadar kolay olmayacak
>
>
Ancak örnekte görüldüğü üzere dosyanın içeriğini görmek, "konsl"
kelimesindeki eksik "o" harfini koymamızı sağlamıyor. Bu iş için bir
dosya düzenleyicisine ihtiyacımız var. Aksi halde şuanda bulunduğumuz
noktadan biraz uzaklarda hareketlerde bulunmamız gereklidir. Mesela
şöyle bir satır işimizi görebilir:
> sed -i s/konsl/konsol e
>
> cat e
>merhaba konsol
>dan yazı yazıyoruz ama
>yazmasak daha iyi olacak
>çünkü yazıyı yeniden açmak
>yazmak kadar kolay olmayacak
>
>
5.10 Komutları ve konumları hızlı tamamlamak
Komut isimleri yada dosyaların bulunduğu konumların isimleri bazen
oldukça uzun olabilir. Kısa olanları bile tekrar tekrar yazmak
gerektiği zaman harf harf yazması sıkıcı ve gereksiz gelebilir. Bu
durumda tab tuşu ile hızlı tamamlama en büyük yardımcımız olacaktır.
Tab tuşuna bir kere basarsanız eğer sadece bir olasılık var ise yazmaya
başladığınız komut yada konum kendiliğinden tamamlanacaktır. Eğer
birden fazla olasılık varsa bir kere tab basılan tab tuşu bir sonuç
üretmeyecektir; ancak ard arda iki kere basıldığında geçerli
olasılıklar listelenecektir.
Örnek:
>ls
b bb d e hedef kaynak
> mkdir tas
>
> ls
b bb d e hedef kaynak tas
Şimdi herhangi bir komutun ardından tas yazmak istersek, t harfinden
sonra tab tuşuna basmamız yeterli olacaktır. Mesela
> ls t
yazdıktan sonra tab tuşuna basarsak karşımıza şu satır çıkacaktır:
> ls tas/
Eğer olası birden fazla öğe varsa;
> mkdir dosya
>
Şimdi yukarıdaki işlemi gerçekleştirdiğimizde yani "d" harfindan sonra
bir kere tab tuşuna bastığımızda hiçbirşey olmayacaktır. Çünkü sistem
şu aşamada, ikisi de "d" harfi ile başlayan, "d" klasörünü mü "dosya"
klasörünü mü kastettiğimizi bilememektedir. Eğer olası seçenekleri
görmek istiyorsak, peş peşe iki kere tab tuşuna basmamız gereklidir:
> ls d
yazdıktan sonra iki kere tab tuşuna basarsak:
d/ dosya/
sonucunu alırız. "o" karakterini de eklersek:
> ls do
ve şimdi tab tuşuna bir kere basarsak "dosya" yı tamamlayabiliriz.
Eğer hızlı tamamlamaya çalıştığınız dosya yada klasör mevcut değilse, o
zaman doğal olarak ne tek, ne peş peşe bastığınız tab tuşları bir sonuç
üretmeyecektir.
Hızlı tamamlayı tam olarak aynı şekilde komutlar için de
kullanabilirsiniz. Bu özellik sisteminizdeki komutları keşfetmek için
de bir yol olarak kullanılabilir.
5.11 Geçerli satırı iptal etmek ve geçerli
konsolu kapatmak
Eğer bulunduğumuz satırı çalıştırmadan yeni bir satıra geçmek
istiyorsak ctrl+c tuşlarına basmak yeterli olacaktır.
Eğer geçerli konsolunuzu kapatmak istiyorsanız en çabuk yol olarak
ctrl+d tuşlarını kullanabilirsiniz. Biraz daha uzun bir yol
istiyorsanız exit komutunu kullanabilirsiniz. Her iki yolun sonucunda
da, X altında çalışıyorsanız, terminal programınız kapanacaktır, tty
üzerinden çalışıyorsanız tty deki geçerli oturumunuz kapanacaktır.
5.12 Komut satırını dondurmak ve devam ettirmek
ctrl+s tuşlarına basıldığında geçerli konsol donar. Bu noktadan sonra
berdiğiniz komutlar
sıraya sokulur ve ancak konsolu ctrl+q tuşlarına basarak konsolu tekrar
devam ettirdiğinizde sırasıyla konsola iletilir.
Bu durum genelde kazayla ctrl+s e basılarak keşfedilir. Başka tuşlara
basmak isterken ctrl+s ye basan kullanıcı ne olduğunu şaşırır ve aynı
kullanıcı eğer ctrl+q tuşunun konsolu devam ettirdiğini bilmiyorsa,
eğer yapabiliyorsa o konsolu kapatıp yenisini açmaktan başka şansı
kalmayacaktır. Bu yüzden ctrl+s ile ctrl+q tuşlarını aklınızdan
çıkarmayın.
5.13 Görüntülenen dosyaları renkli yapmak
Dosya sistemimiz biraz daha
kalabalıklaşınca, bash kabuğunun dosya, klasör ve diğer öğeleri farklı
renklerle renklendirmesi gerçekten çok işe yarayabiliyor. Bash
kabuğunun renklendirmesini açmak için bashrc dosyasını kullanabiliriz.
Her kullanıcının ev klasöründe ("/home/kullanıcıdı/", root kullanıcısı
için "/root/") .bashrc isimli bir dosya bulunur. Eğer sizin Linux
dağıtımınızda bulunmuyorsa, bu dosyayı kendiniz oluşturabilirsiniz ve
eğer kullandığınız kabuk, GNU Bash kabuğu ise, oluşturulacak dosyanın
hala iş görmesi gerekir.
.bashrc dosyası, her Bash kabuğu başlatıldığında çalıştırılır. Yani bu
dosyaya ekleyeceğimiz komutlar, kabuğa vereceğimiz her komuttan önce en
az bir kere çalışmış olurlar.
.bashrc dosyasında aşağıdaki satırın var olduğuna ve bulunduğu satırın
başında yorum yapma karakterinin (#) olmadığından emin olursak,
dosyaları görüntülemek istediğimizde renkli çıktı görmemiz gereklidir
(yorum yapma karakterinden sonraki karakterler bash dikkate alınmaz) :
eval `dircolors`
5.14 Komutlar hakkında daha fazla bilgi edinmek
Nerdeyse bütün komutların bir kılavuz sayfası vardır. Kılavuz
sayfalarında el kitabı tarzında komutun nasıl çalıştığı hakkında
bilgiler olur. Herhangi bir komut hakkında daha fazla bilgi edinmek
istiyorsanız:
man komutadı
şeklinde bir komutla, ilgili komutun kılavuz sayfasına ulaşabilirsiniz.
Mesela
>man rm
>man mv
>man cp
bu komutların her biri, doğru kurulmuş bir sistemde, kılavuz
sayfalarını gösterecektir.
Türkçe kurulmuş sistemlerde man sayfaları da Türkçe çevirileri
olabilir. Eğer kılavuz sayfaları, garip bir nedenle, sisteminizde
bulunmuyorsa yine "man komutadı" şeklinde bir google aramasıyla
aradığınız dosyaya ulaşabilirsiniz.
man ismi "manual" (kılavuz) ifadesinden gelmektedir.
6.0 Belgeler
http://www.gnu.org/software/bash/manual/bashref.html
http://www.tldp.org/LDP/abs/html/index.html
----------------------------
Can Kavaklıoğlu