Kerem ÜLLENOĞLU kerem.ullen@pm.em
İçerik Listesi
1969 yılında Ken Thompson ve Dennis Ritchie, Bell Laboratuvarlarında UNIX işletim sistemini geliştirdi. Bir süre sonra C dilini yaratıp UNIX işletim sistemini tekrardan C ile geliştirdiler. Daha sonra UNIX çok kullanılan bir işletim sistemi oldu.
1983 yılında Richard Stallman GNU projesi üzerinde çalışmaya başladı. GNU çekirdeği Hurd, ne yazık ki hiçbir zaman tamamlanmadı. Ama sonuç olarak bu süreçte GPL (The GNU General Public License) yaratıldı.
Süreçte BSD, MINIX, vb. UNIX benzeri sistemler geliştirildi. Ama hiçbirinin çekirdeği ortak değildi.
1991 yılında genç Linux Torvalds şimdi LINUX olarak bildiğimiz çekirdeği geliştirmeye başladı.
Debian, tamamen açık kaynak olan bir işletim sistemidir. En çok bilinen distrolardan biridir ve 20 yıldan uzun süredir geliştirilmektedir.
Debian, son derece stabil bir işletim sistemidir. Bunu sağlamak için bütün yazılımların son sürümleri kullanılmıyor olabilir. Neredeyse her platform için uygundur.
Red Hat Enterprise Linux, kısaca RHEL, Red Hat tarafından geliştirilen bir işletim sistemidir.
Düzenleme ve yeniden yayınlama konusunda katı kuralları olsa da hala kaynak kodu açıktır.
RPM paket yöneticisi kullanılır.
Genelde şirketlerin sunucularında kullanılır.
Ubuntu, en yaygın işletim sistemlerinden biridir.
Ubuntu, Debian tabanlı bir işletim sistemidir ve Debian’ın paket yöneticisini kullanır.
Her ortama uygundur ve her ortamda oldukça yaygındır.
Yeni başlayanlar için iyi bir seçenek olabilir.
Fedora, Red Hat tarafından desteklenen, topluluk tarafından geliştirilen özgür ve açık kaynak bir işletim sistemidir.
RPM paket yöneticisini kullanır.
RHEL’den daha kullanıcı dostudur.
Genelde masaüstü ve laptop ortamlarında kullanılır.
Linux Mint, Ubuntu tabanlı bir işletim sistemidir.
Ubuntu’dan daha hafiftir.
Masaüstü ve laptop ortamlarında kullanılır.
Yeni başlayanlar için önerilir.
Gentoo, gelişmiş kullanıcılar için geliştirilmiş ve oldukça özelleştirilebilir bir işletim sistemidir.
Portage paket yöneticisini kullanır.
Masaüstü ve laptop ortamlarında kullanılır.
Yeni başlayanlara önerilmez.
Arch Linux, hafif ve tamamen özelleştirilebilir bir işletim sistemidir.
Tamamen topluluk tarafından geliştirilir.
Gelişmiş kullanıcılara önerilir.
Bütün yazılımların son sürümlerini kullandığı için diğer sistemler kadar stabil olmayabilir. (Rolling Release Model)
Pacman paket yöneticisi kullanır.
Genelde masaüstü ve laptop ortamlarında kullanılır.
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
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 dosya1
i /home/user/Documents
e kopyaladık.
Bir kurala uyan birden fazla dosyayı kopyalamanın bazı yolları vardır. Bunlardan en temelleri:
*
: Herhangi bir string
?
: Bir karakter
[]
: [] arasına yazılan herhangi bir karakter
Ö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 dosya1
i /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 dosya1
i 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.
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