Bash ve Komut Satırı Kullanımı

Çekirdek Nedir

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

kullanici@pc:~$ uname -r
5.11.0-27-generic

kullanici@pc:~$ hostnamectl | grep Kernel
            Kernel: Linux 5.11.0-27-generic

kullanici@pc:~$ cat /proc/version
Linux version 5.11.0-27-generic (buildd@lcy01-amd64-019) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #29~20.04.1-Ubuntu SMP Wed May 11 15:58:17 UTC 2021

Kabuk Nedir

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.

kullanici@pc:~$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash

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.

kullanici@pc:~$ python
Python 2.7.18 (default, Mar  8 2021, 13:02:45) 
[GCC 9.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Merhaba")
Merhaba
>>> 

Çevre Değişkenleri

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.

kullanici@pc:~$ printenv

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

kullanici@pc:~$ echo $HOME
/home/kullanici

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.

kullanici@pc:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Kullanıcının yaptığı programların kabuk tarafından tanınması için $PATH değişkeninde bulunan dizinlerden birisine taşınması yeterlidir.

Çevre Değişkenlerini Yönetme

unset: Bir değişkeni çevre değişkenlerinden çıkarır.

export: O anki kullanıcı kabuğunun çevre değişkenlerine ekler.

kullanici@pc:~$ name="kullanici"
kullanici@pc:~$ env | grep name
kullanici@pc:~$
kullanici@pc:~$ export name="kullanici"
kullanici@pc:~$ env | grep name
name=kullanici
kullanici@pc:~$ unset name 
kullanici@pc:~$ env | grep name
kullanici@pc:~$

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) Nedir

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.

Komut Nedir

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.

Genel Komut Kullanım Formatı

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.

kullanici@pardus:~$ apt -h
apt 1.8.2.2 (amd64)
Usage: apt [options] command

apt is a commandline package manager and provides commands for
searching and managing as well as querying information about packages.
It provides the same functionality as the specialized APT tools,
like apt-get and apt-cache, but enables options more suitable for
interactive use by default.

Most used commands:
  list - list packages based on package names
  search - search in package descriptions
  show - show package details
.
.
.

-h ile parametresi yerine --h denersek,

kullanici@pardus:~$ apt --h
E: Command line option --h is not understood in combination with the other options

hata çıktısını alırız. Onun yerine --help denersek,

kullanici@pardus:~$ apt --help
apt 1.8.2.2 (amd64)
Usage: apt [options] command

apt is a commandline package manager and provides commands for
searching and managing as well as querying information about packages.
It provides the same functionality as the specialized APT tools,
like apt-get and apt-cache, but enables options more suitable for
interactive use by default.

Most used commands:
  list - list packages based on package names
  search - search in package descriptions
  show - show package details
.
.
.

çıktısını alırız. Aynı şekilde -help için de hata mesajı görmemiz muhtemeldir.

apt -help
E: Command line option 'e' [from -help] is not understood in combination with the other options.

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,

mkdir Komut Dokümantasyonu

şeklinde oluşturmayı denersek, ayrı ayrı Komut ve Dokümantasyonu adında iki dizin oluşur. Bunun yerine,

mkdir KomutDokümantasyonu

şeklinde boşluksuz isim vermemiz gerekmektedir.

Terminal Pratikleri

TAB Kullanımı

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,

cd afyon[TAB]

|
v

cd afyonkarahisarlılaştıramadıklarımızdanmısınız

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

Üst Yön Oku Kullanımı

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,

history

komutu ile görüntüleyebilirsiniz.

Komutu Kabuğa Gönderme

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.

Lab

  1. bash ve sh kabuklarının çevre değişkenlerini kıyaslama

    1. Bir uçbirim açın ve mevcut kabuğu ekrana yazdırın

    2. bash kabuğuna geçerek çevre değişkenlerini ekrana yazdırın

    3. sh kabuğuna geçerek çevre değişkenlerini ekrana yazdırın

  2. Python kabuğu üzerinde basit fonksiyon geliştirme

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

  3. Kullanıcı bazlı değil, sistem genelinde kalıcı bir çevre değişkeni tanımlanmak istense, hangi sistem dosyası kullanılabilir.

  4. Kullanıcı ana dizininde bulunan dosyalardan hangisi Bash geçmişini depolamak için kullanılır?

Last updated