Linux komut satırında hayatta kalma ipuçları — 1
Bu ve sonraki birkaç flood’da size Linux’u komut satırından çıkmadan etkin olarak kullanabilmek için gerekli araç ve konseptleri tanıtacağım.
İşletim sistemini komut satırından kullanmanın çok daha hızlı ve güçlü olduğunu duyar dururuz. Bu flood ile başlayacak seride bu önermeye destek sağlayacak araçları ve Linux özelinde bazı işletim sistemi fonksiyonlarını tanıyacağız.
İşletim sistemine komut verip yönetmek için bir kabuk (shell
) kullanırız. Kabuğun girdileri almak için klavyeye ve çıktıları basabilmek için ekrana ihtiyacı vardır. Modern sistemlerde terminal emulator
'lar (kısa hali ile terminal) bu işlevi yerine getirmektedir. Tarihsel olarak console
adı verilen, klavye ile monitörden oluşarak seri porttan bilgisayara bağlanan özel tip terminaller de vardır. Modern sistemlerde komut satırından başlatılan Linux'ta Alt+F1
, Alt+F2
komutları ile sanal konsollar arasında geçiş yapılabilir.
Popüler Linux dağıtımlarında kabuk olarak genellikle bash
veya sh
kullanılır. Kullanıcılar sistemde bulunan farklı kabuklardan istediğini seçebilirler. Sistemde bulunan bütün kabuklar /etc/shells
dosyasında bulunur. Kullanıcılar ön tanımlı (default) olarak kullanmak istedikleri kabuğu /etc/passwd
dosyasından ayarlayabilirler. Aşağıda flood
kullanıcısı için kabuk /bin/sh
, vagrant
kullanıcısı için ise /bin/bash
olarak ayarlanmıştır. Çalışma zamanında kabuk değiştirmek için geçiş yapılmak istenen kabuğun ismi yazılabilir.
Kabuk kullanıcının günlük yapacağı işlemleri kolaylaştırmaya çalışır. Örneğin kabuk, terminali her açışımızda dosya sisteminde çalışma klasörü olarak kullanıcının $HOME
klasörüne gidip komutları beklemeye başlar. bash
kabuğunda kullanıcının $HOME
klasörünün altındaki .bashrc
dosyasının sonuna kabuk başlatılırken yapılması istenenler eklenebilir. Değişikliklerin mevcut kabukta da uygulanması için source .bashrc
komutu kullanılabilir. Aşağıda kabuğun başlaması istenen klasör /home/vagrant
yerine /vagrant
olarak değiştirilmiştir.
bash
ve diğer kabuklar kullanıcının işletim sistemi ile iletişime geçerek program çalıştırması, çalıştırılan programın ekran çıktılarının gösterilmesi, kullanıcıdan programın çalışması sırasında girdi alabilmesi, programlara argüman geçirilmesi, ortam değişkeni (Environment Variable
) aktarılması, başlatılan programın parent
prosesi olarak çıkış kodunun raporlanmasını sağlarlar. Kabuk sıralanan bu işlemleri yapabilmek için çekirdeğe sistem çağrıları (system call
) yapar dolayısıyla Linux çekirdeği ile kullanıcı arasında köprü kurar.
Kabukta tanımlı olan ortam değişkenleri env
veya printenv
komutu ile ekranda görüntülenebilir. Aşağıda benim test sistemimdeki bash
kabuğunda bulunan ortam değişkenleri gösterilmiştir.
Yukarıdaki ekran görüntüsünde $SHELL
değişkeninde kullanıcının kullandığı kabuğu, $HOME
değişkeninde kullanıcının ana dizini, $USER
değişkeninde kabuğa bağlı olan kullanıcı adı görülebilir.
Yine yukarıdaki ekran çıktısındaki $PATH
değişkeni üzerinde durulmaya değerdir. Bu değişken dosya sisteminde bulunan çalıştırılabilir dosyaların klasörlerini içermektedir. Kabukta dosya sistemindeki tam yolunu vermeden ls
yazdığımız zaman, kabuk PATH’te bulunan klasörlere teker teker bakarak içlerinde ls
ismi ile çalıştırılabilir bir dosya olup olmadığına bakar, ilk bulduğu çalıştırılabilir dosyayı çalıştırır ve diğer klasörlere bakmaz. Aşağıda $PATH
değişkeninin başına mevcut klasör eklenip klasörde bulunan dosyalar $PATH
'e eklenmiştir.
PATH değişkeninde olmayan bir klasördeki çalıştırılabilir bir dosyayı çalıştırabilmemizin tek yolu o dosyanın dosya sistemindeki tam veya relatif yolunu sağlamaktır. PATH içinde bulunmayan /app
klasörünün içindeki booking-generator
programını çalıştırmak için kabuktan /app/booking
komutunu verilir. Aynı şekilde içinde bulunulan klasördeki billing
adlı programı çalıştırmanın yolu da ./billing
olacaktır. İkinci örnekte bulunan .
o an içinde bulunulan klasörü ifade eder. ..
ise bir üst klasöre gitmek için kullanılır.
Son olarak kabuğun ve çalıştırılabilir programın Linux çekirdeğine yaptığı bütün sistem çağrılarını görebilmek için strace
komutu kullanılabilir. İlerleyen flood'larda detaylı olarak ele alacağımız bu aracı $PATH
'in nasıl çalıştığını gözlemlemek için kullanalım.
which ls
komutunu vererek sistemde bulunan ls
programının dosya sistemindeki tam yolu bulunabilir. Bu komutu strace
ile vererek bash
'in $PATH
değişkeninde bulunan klasörlerde ls
dosyasını teker teker aradığı görülebilir. Aşağıdaki çıktıda bu davranış gösterilmiştir.