BattOS

Linux’a Giriş (Tarihçe, Distro’lar ve Kabuğa giriş)

Kerem ÜLLENOĞLU kerem.ullen@pm.em

İçerik Listesi

Tarihçe

Distro Nedir ve Distro Seçimi

Debian

Red Hat Enterprise Linux

Ubuntu

Fedora

Linux Mint

Gentoo

Arch Linux

Komut Satırı (Kabuk/Shell)

Bilgisayarlara komut vermek için çeşitli arayüzler var. GUI, Sesli komutlar hatta AR/VR gibi arayüzler. Bunlar çoğu kullanıcı için kullanım durumlarının çoğunda yeterlidir. Ancak genellikle yapabileceğiniz şeyler sınırlıdır. Olmayan bir butona basamaz ya da daha önce tanımlanmamış bir sesli komut veremezsiniz. Bilgisayardan tam olarak yararlanmak için en iyi seçenek CLI (Command Line Interface) dir.
Neredeyse her platformda shell bulunur. Birçok farklı shell olsa da temelde hepsi aynıdır.

Bu derste, kabuk programı olarak bash (Bourne Again Shell) kullanacağız. Neredeyse tüm Linux dağıtımları varsayılan olarak bash kabuğunu kullanır. Bunun dışında ksh, zsh, tsch gibi başka kabuklar da mevcuttur, ancak bunlara şimdilik değinmeyeceğiz.

Terminali ilk başlattığınızda büyük ihtimal şöyle bir ekranla karşılaşırsınız:

user@hostname:~$

user, kullanıcı adınızdır. hostname, bilgisayarınızın adı. ~ ev dizini demektir. Şu anda içinde bulunduğunuz dizin burada gösterilir. $ ise root olmadığınız, kullanıcı olarak komut verdiğinizi gösterir.

Buraya shell tarafından yorumlanacak bir komut yazabilirsiniz. Mesela az önce ev dizininden bahsettik, neresi orası? Bana şu an bulunduğum dizini göster demek için pwd (print working directory) komutunu kullanabilirsiniz.

user@hostname:~$ pwd
/home/user

Sistem içerisinde gezinme

Shell içerisinde path (yol), dizin listesinin birleştirilmiş halidir. Linux ve macOS’ta /, Windows’da ise \ ile birleştirilir. Linux ve macOS’ta / yolu dosya sisteminin root (kök) dizinidir. / ile başlayan yola absolute path (mutlak yol), diğerlerine ise relative path (göreceli yol) denir. Relative path geçerli çalışma dizinine bağlıdır. Dizini değiştirmek için cd (change directory) komutunu kullanabiliriz. . dizini bulunduğumuz dizini, .. dizini bir önceki dizini belirtir.

user@hostname:~$ pwd
/home/user
user@hostname:~$ cd ..
user@hostname:/home$ pwd
/home
user@hostname:/home$ cd user
user@hostname:~$ pwd
/home/user

Genel olarak bir program çalıştırdığınızda, aksi belirtilmedikçe, geçerli dizinde çalışır. Örneğin dosya oluşturacağı zaman geçerli dizinde oluşturur. Belirli bir dizinde nelerin var olduğunu görmek için ls (list) komutu kullanılır.

user@hostname:/home$ ls
user

İlk argüman olarak bir dizin verilmedikçe ls geçerli dizinin içeriğini yazdırır. Çoğu komut davranışlarını değiştiren - ile başlayan flag (bayrak) ve option (seçenek, bir değere sahip bayrak) alır. Genelde -h veya --help bayrağı size bir programı hangi bayrak ve seçeneklerle çalıştırabileceğiniz hakkında bilgi verir. Örneğin :

user@hostname:/home$ ls --help
...
  -l                         use a long listing format
...

Uzun bir çıktı alırız bu komuttan ama baktığımızda bir kısmı yukarıdaki gibidir ve bize -l bayrağının uzun liste biçimini kullan demek olduğunu söyler.

user@hostname:/home$ ls -l
total 0
drwx------. 1 user user 442 Dec  1 15:06 user

Bu bize mevcut dosya dizini hakkında daha fazla bilgi verir. İlk olarak satır başındaki d bize user ın bir dizin olduğunu belirtir. Daha sonra ardından gelen 9 karakter izinleri belirtir. İlk 3 karakter rwx dosya sahibinin yani user ın izinleridir. r: read, w: write, x: execute. Ardından gelen 3 karakter --- dosya sahibinin grubunun yani aslında aynı isimde olan user grubundaki tüm kullanıcıların izinleridir. --- olması hiçbir izni olmaması anlamına gelir. Son 3 karakter --- kalan kullanıcıların izinleridir.

user klasörüne girelim(cd user). Bir kullanıcının ev dizini o kullanıcının dosyaları için ayrılmış kısımdır. İçinde olmak zorunda olan bir şey yoktur aslında ama genelde birkaç şey vardır. Dağıtıma göre farklılıklar gösterebilir. Genelde içinde Documents, Desktop gibi dizinler bulunur. Ve .bashrc gibi dosyalar. ls kullandığınızda .bashrc yi göremiyor musunuz? Bunun sebebi bu dosyanın gizli olmasıdır. Linux’ta gizli dosyalar isimlerinin başına . (nokta) koyularak belirtilir. ls komutu varsayılan olarak bunları göstermez. ls --help komutunu kullanırsanız

-a, --all do not ignore entries starting with .

diye bir satır görebililrsiniz. Yani gizli dosyaları görmek için yapmanız gereken şey ls komutunu -a bayrağıyla kullanmak. ls -a sayesinde . ve .. dahil bütün dizinleri ve dosyaları görebilirsiniz.

Burada bir dosya oluşturalım. Dosya oluşturmak için kullanmamız gereken komut touch. Dosyanın adı dosya1 olsun. Bunun için

$ touch dosya1

komutunu gireriz. Bu komutla ilgili unutulmaması gereken şey, dosyanın isminde boşluk olacaksa buna dikkat etmelisiniz. Mesela touch dosya 1 komutu, dosya ve 1 isimlerindeki iki dosya oluşturur. Dosya isminde boşluk olacaksa boşluğun başına \ işareti veya ismi “” arasına yazarak oluşturabilirsiniz. touch "dosya 1" veya touch dosya\ 1 gibi.

Dikkatinizi çekti mi? Dosya adı, Windows gibi diğer işletim sistemlerinde görmeye alışık olduğunuz standart adlandırma kurallarına uymuyordu. Normalde, bir dosyanın adının banana.jpeg olması durumunda bunun bir JPEG resim dosyası olmasını beklersiniz.

Ancak Linux’ta, dosya adlarının dosyanın içeriğini temsil etmesi gerekmez. Örneğin, aslında bir GIF olmayan funny.gif adında bir dosya oluşturabilirsiniz.

Bir dosyanın ne tür bir dosya olduğunu öğrenmek için file komutunu kullanabilirsiniz. Bu komut, dosyanın içeriğine dair bir açıklama gösterecektir.

Az önce dosya1 olarak oluşturduğumuz dosya üzerinde denersek dosya1: empty çıktısı verecektir.

Gerçekten öyle mi? Hemen içeriğine bakalım. cat komutu ile bir dosyanın içeriğini standart out’a yazabiliriz.

$ cat dosya1

cat komutu daha kısa dosyalar için geçerliyken less komutu ile büyük dosyaları okuyabiliriz. Bu sefer standart out’a değil ayrıca bir uygulama olarak emülatorde açılır.

Bir sürü komuta değindik. Kabuk girdiğimiz tüm komutların geçmişini kaydediyor. Bu geçmişi görüntülemek için history komutunu kullanabiliriz.

Bir sürü komut girince ekranımız çok doldu. clear komutu ile terminali temizleyebiliriz.

Şimdi biraz dosya kopyalayalım. Çok basit. cp komutunu kullanacağız.

$ cp dosya1 /home/user/Documents

Bu komut ile dosya1i /home/user/Documentse kopyaladık.

Bir kurala uyan birden fazla dosyayı kopyalamanın bazı yolları vardır. Bunlardan en temelleri:

Örneğin:

$ cp *.jpg /home/user/Pictures

Bu komut bulunduğumuz dizinde .jpg ile biten bütün dosyaları /home/user/Pictures dizinine kopyalar.

Klasörleri kopyalamak istediğimizde -r kullanırız. Bu flag’ın anlamı “recursive”dir. Örnek bir komut:

$ cp -r YazTatiliResimleri/ /home/user/Pictures

Bu komut YazTatiliResimleri isimli dizini /home/user/Pictures dizinine kopyalar.

Şimdi de dosyaları taşımaya bakalım. Bunun için mv komutunu kullanıyoruz. Kullanım olarak neredeyse cp komutu ile aynı. Örneğin:

$ mv dosya1 /home/user/Documents

Bu komut dosya1i /home/user/Documents dizinine taşır. Birden fazla dosyayı aynı anda taşıyabilirsiniz. Dizinleri de bu komutla taşırız.

Aynı zamanda dosyaları yeniden adlandırmak için de bu komutu kullanacağız.

$ mv dosya1 dosya

Bu komut dosya1i dosya olarak yeniden adlandırır.

Dosya oluşturduk ve dosyayla oynadık, peki dizin nasıl oluşturacağız? Bunun için de mkdir komutu kullanılacak.

$ mkdir kitaplar

Bu komutla beraber kitaplar isimli bir dizin oluşturduk. Bir dizin ve altdizinler oluşturmak istersek kullanacağımız flag -p olacak.

$ mkdir -p kitaplar/klasikler

Bu komut bulunduğumuz dizinde bir kitaplar dizini oluşturacak ve onun altında da bir klasikler dizini oluşturacak.

Her şeyi öğrendik gibi ama çok basit ve sürekli kullanacağımız bir komut var: rm. Bu komut silmek (remove) için kullanılıyor. Örneğin:

$ rm dosya

Bu komut dosya yı silecek. Eğer bir klasörü silmek istersek yine -r (recursive) flagını kullanacağız.

Son olarak sistemde gezinirken bize yardımcı olacak bir komutumuz daha var o da find. İsminden de anlaşılabileceği gibi, dosya ararken kullanıyoruz. Örneğin:

$ find /home/user -name dosya

Bu komut /home/user diznininde dosya ismindeki dosyayı arayacak. Eğer bir dizin arıyorsak -type flagını kullanacak ve parametre olarak d (directory) vereceğiz. Örneğin:

$ find /home/user -type d -name klasikler

Bu komut /home/user dizni altında kitaplar dizinini arar ve yolunu verir.

Yardım alma

Linux içinde birçok komut ve araç var. Bunların hepsini tamamen bilmemiz mümkün değil. Bu yüzden bize yardımcı olacak bazı komutlar var.

Bu komutlardan ilki help. Aslında ls komutunda biraz --help flagından bahsetmiştik. Bu komut da aynı işi yapıyor diyebiliriz.

$ help echo

İkinci ve en çok kullanacağımız yardım alma komutu man (manual). Daha detaylı metinler içerir ve her araç için bulunur denebilir.

$ man ls

Ayrıca -k ile komut araması da yapabiliriz.

$ man -k echo

Bu komut bize eşleşen aramamızla eşleşen komutları gösterecektir.

Bir komut daha var ki bize kısaca programın ne işe yaradığını söyleyecek, o da whatis.

$ whatis echo