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 (kernel (donanım) ) )

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

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:

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:

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

Gerekli 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

Gerekli 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