Çekirdek, Linux/GNU işletim sisteminlerinin ana bileşeni ve Linux olarak adlandırılan parçasıdır. Bilgisayarın donanım ile ilgili süreçlerini yönetir. Kısacası yazılım ile donanımı birbirine bağlayan köprü görevi görmektedir. Bu çekirdeğin bu kadar önemli olmasının sebebi ise diğer ticari çekirdeklerden farklı olarak özgür olmasıdır.
Linux/GNU işletim sisteminde kullandığımız mevcut çekirdek sürümüne aşağıdaki komutlardan biri ile bakabiliriz.
Kabuk (shell), bir işletim sistemi için bilgisayarı kullanabilmek adına; kullanıcı ile çekirdek arasında haberleşmeyi sağlayan ortama verilen addır. Kullanıcı tarafından kabuk üzerinden gönderilen komutlar, sistem çağrıları vasıtasıyla çekirdeğe ulaşarak işlenmektedir. Tabi ki bir çok durumda kabuk üzerinde de işlemler yapılabilmektedir.
GNU/Linux sistemlerde bir çok kabuk bulunmaktadır. Genellikle BASH, SH ve ZSH kabukları ile karşılaşmış olma ihtimaliniz oldukça yüksektir. Mecut GNU/Linux dağıtımında yüklü gelen kabuklar, /etc/shells dosyasında yazmaktadır.
Sisteme giriş yapmış her kullanıcı için bir kabuk programı çalışır. Çalışan kabuk kullanıcın bir komut girmesini bekler, kumutu yorumlayarak gerekli programları çalıştırır ve programın sonlanmasını bekler.
Bunun yanında herhangi bir betik programlama dilinin kendine özgü kabukları da bulunmaktadır. Bunlara basit örnekler vermemiz gerekirse Python ve PHP diyebiliriz.
Bu belge içerisinde genellikle BASH kabuğundan bahsedeceğiz. Linux kabuk üzerinde değişkenler tanımlayabilmemize olanak tanır. Açılan her kabuğun değişken listesine kendisine özgüdür. Bir kabuğun sahip olduğu öntanımlı değişkenleri görebilmek için env ya da printenv komutu çalıştırılabilir.
Buradaki değişkenlerden en yaygın kullanılanları $HOME, $USER ve $PATH değişkenleridir. Bir değişkenin değerini ekrana yazdırmak için ecko komutu kullanılabilir
Linux üzerinde her şey bir dosyadır. Kabuk üzerinde çalıştırdığımız dosyalar da birer dosyadır. Bunların sistem tarafından tanınmaları için belirli dizinler altında saklanmaktadır. $PATH değişkeninde bulunan dizinler sistemin çalıştırılabilir uygulamalarının bulunduğu dizinlerdir. Eğer bu değişken olmasa idi tüm komutları tam adres vererek girmek gerekecekti.
Kullanıcının yaptığı programların kabuk tarafından tanınması için $PATH değişkeninde bulunan dizinlerden birisine taşınması yeterlidir.
unset: Bir değişkeni çevre değişkenlerinden çıkarır.
export: O anki kullanıcı kabuğunun çevre değişkenlerine ekler.
Her bir kullanıcının ev dizini altında bulunan .bashrc
gizli dosyası, kullanıcı oturum açtığında bir dizi yapılandırma yapar. Bunlar renklendirme ayarları ya da yukarıda belirttiğimiz değişken tanımlama gibi ayarlar olabilir.
Terminal(uçbirim) kullanıcının kabuk ile etkileşim kurmasını sağlayan programdır. Bu uçbirim için ise çeşitli masaüstü ortamlarında bulunan emülatörler bulunmaktadır. Bu terminal emülatörleri ile birlikte son kullanıcı komutları klavye yardımı ile kullanabilmektedir. Terminal emülatörlerine örnek olarak gnome terminal, terminator, guake, yakuake verilebilir.
Bir kabuk üzerinde boşluk veya girdi(enter) karakterine kadar olan yazılan kısma komut denmektedir.
GNU/Linux sistemlerde komutlar, aslında sistem içerisinde bulunan, kimi zaman bash kimi zaman python kimi zamansa başka bir dille yazılmış betiklerdir. Komut olarak terminale gönderilen kelimeler çoğu zaman sadece o betikleri uygun parametreler ile tetikleyen minik kod parçaları olmaktadır.
Bu betikler her dağıtımın altlığına göre, dosya sistemine göre değişmektedir. Ancak çoğunda standart bir formata uygun olarak geliştiriciler tarafından ayarlanmaktadır. Örneğin yeni bir komut geliştirdiyseniz ve bunu .deb paketi ile dağıtıyorsanız, komut dosyalarınızı sistemde uygun yerlere koymanız gerekmektedir.
Aşağıdaki site sayesinde komutları öğrenebilirsiniz:
Standart çıktı (standart output), özetle bir kabuk üzerindeki ekranda gördüğünüz çıktı olarak düşünebilirsiniz. Genellikle bir terminal üzerindeki ekran sizin için standart çıktı olarak karşınıza çıkacaktır. Standart çıktı'nın bir alternatifi disk üzerindeki herhangi bir dosyanın içeriği olarak düşünülebilir.
GNU/Linux sistemlerde tıpkı komutların belli bir dosya yolu olduğu gibi, komut geliştiricileri çoğunlukla komutları aynı formata göre tasarlarlar. Örneğin tüm komutlarda, kısa parametreler tek - ile yazılırken, uzun parametreler -- ile yazılır.
Hemen hemen tüm komutlarda bulunan yardım, yani help parametresini ele alalım.
-h ile parametresi yerine --h denersek,
hata çıktısını alırız. Onun yerine --help denersek,
çıktısını alırız. Aynı şekilde -help için de hata mesajı görmemiz muhtemeldir.
Bunun yanında GNU/Linux komutlarında komut içerisindeki parametreler ve parametrelerin değerleri boşluk ile ayrılır. Yani her boşluktan sonraki kelimeyi komut yeni bir değer olarak algılar. Örneğin, Komut Dokümantasyonu adında bir dizini,
şeklinde oluşturmayı denersek, ayrı ayrı Komut ve Dokümantasyonu adında iki dizin oluşur. Bunun yerine,
şeklinde boşluksuz isim vermemiz gerekmektedir.
Terminalde komut yazarken çoğunlukla kullanılan bazı pratikler bulunmaktadır. Örneğin afyonkarahisarlılaştıramadıklarımızdanmısınız isminde bir dizine erişmek istediğimizi düşünelim. Elimizle teker teker bu dizinin adını yazmak yerine,
şeklinde kelimenin bir kısmını yazıp tab tuşu ile tamamlamak kullanım hızı ve pratikliği arttıracaktır.
Not: Aynı dizinde afyon ile başlayan başka bir dizin varsa ortak olan kısma kadar tab eşitler, sonrası için kullanıcının hangi dizine gidecekse o dizinin bir sonraki harfini yazıp tekrar tab demesi gerekmektedir.
Terminalde yazılan her komut kaydedilmektedir. Kaydedilen bu komutlara sonradan erişmek veya yazılan tüm komutlara erişmek mümkündür. Eğer bir komut kabuğa yanlış gönderildiyse, üst yön oku ile komut tekrar terminal ekranına getirilip düzenlenebilir.
Bunun yanında şu ana kadar yazdığını komutların listesini de,
komutu ile görüntüleyebilirsiniz.
Terminalde komut yazdıktan sonra düzenleme yapıldığında, illa satırın en sonuna gidip ENTER demek gerekmez. Yani bir komut satırının ortasındayken de ENTER tuşu ile komut kabuğa gönderilebilir.
bash ve sh kabuklarının çevre değişkenlerini kıyaslama
Bir uçbirim açın ve mevcut kabuğu ekrana yazdırın
bash kabuğuna geçerek çevre değişkenlerini ekrana yazdırın
sh kabuğuna geçerek çevre değişkenlerini ekrana yazdırın
Python kabuğu üzerinde basit fonksiyon geliştirme
Uçbirim üzerinde python kabuğu açılmalı, python kabuğu üzerinde fibo (fibınacci dizisi için) kütüphanesini içeri aktararak, dizinin ilk 10 sayısını döndüren bir fonksiyon yazın.
Kullanıcı bazlı değil, sistem genelinde kalıcı bir çevre değişkeni tanımlanmak istense, hangi sistem dosyası kullanılabilir.
Kullanıcı ana dizininde bulunan dosyalardan hangisi Bash geçmişini depolamak için kullanılır?