Ocak 15, 2020
Temel GNU/Linux Bilgisi
İzmir Fen Lisesi
@boratanrikulu
Bora Tanrıkulu
Linux nedir?
Bir çekirdek.
Linux Torvalds
tarafından 1991'de yazılmıştır.
(dipnot: "just for fun")
UNIX'den
esinlenerek, kapalı bir kaynak olan UNIX'e bir alternatif olması amacıyla yazılmıştır.
UNIX çatallanması (fork) değildir. Direkt alınmış hiç bir kod yoktur.
Çekirdek nedir?
İşletim sisteminin
bir bölümü.
İşletim sisteminin kalbidir diyebiliriz.
Fakat kalp tek başına bir vücud değildir, değil mi?
İşletim sistemleri
iki ana kısımdan oluşur.
Kernel (çekirdek) ve Shell (kabuk).
Kernel
uygulamalar ile donanım arasında çevirici görev görür. Çevirmendir.
Fiziksel donanımla yazılım arasındaki haberleşmeyi sağlar.
Shell
işletim sistemindeki uygulamaların, kernel ile haberleşmesinin arasında bulunan ara bir katmandır. Kernel'e kabuk üzerinden erişiriz.
İşletim sistemi.
O halde, hani nerede işletim sistemi?
GNU
Özgür yazılımı amaç edinmiş bu işletim sistemi, 1983 yılında
Richard Stallman
tarafından geliştirilmeye başlanmıştır.
Belli bir süre HURD çekirdeğini kullanan GNU;
1991'de Linux'un duyurulması ve Linux çekirdeğinin popülerlik kazanmasıyla, GNU işletim sisteminde, çekirdek olarak Linux'a geçiş yapılmıştır.
GNU (Hurd)
GNU/Linux
1991'den sonra.
Bu sebeplerden dolayı
yalnızca Linux demek yanlıştır.
GNU/Linux
olarak söylenmesi daha doğrudur.
GNU/Linux'a
neden ihtiyacımız var?
GNU/Linux'a
Neden İhtiyacımız Var ?
GNU/Linux'un size sağlayacağı bir çok avantaj var.
- Yüksek düzeyde özelleştirilebilmesi.
- Ücretsiz olması. (Her dağıtım ücretsiz değildir.)
- Hızlı ve Kararlıdır. (Donanım desteği olduğu taktirde.)
- GNU/Linux için zararlı yazılım sayısının az olması.
- Özgür Yazılım olması.
- Açık kaynak olduğu için, sorun tespitinin
ve çözümünün oldukça hızlı olması. (Community.) - Yardım bulabilmeniz için bir çok topluluğun olması;
bir şirkete bağlı değilsiniz, yalnız değilsiniz!
GNU/Linux
özgür bir yazılımdır.
Peki özgürlük nedir?
Hayır, hayır.
Yazılımsal olarak değil.
Gerçekten özgürlük nedir?
Bir şeyin özgür olması için bu 4 şartın yerine getirilmesi gerekir.
-
Çalıştırılabilirlik: İlgili şeyin istendiği şekilde ve doğrultuda çalıştırılabilmesi.
-
Değiştirilebilirlik: İlgili şeyin şeyin istendiği amaç doğrultusunda değiştirilebilmesi. İstediğimiz şekilde ekleme çıkarma yapılabilmesi.
-
Dağıtılabilirlik: İlgili şeyin herhangi biri tarafından tekrardan dağıtılabilir, toplulukla bunu paylaşabilmesi.
-
Değiştirip dağıtılabilirlik: İlgili şeyi istenildiği gibi çalıştırılması, o şeyi istediğimiz doğrultuda değiştirip ve geliştirip bu haliyle yeniden dağıtabiliriz.
Bu şartları yerine getiren
her şey özgürdür.
İster kitap olsun,
ister donanım,
ister yazılım,
ister bir bira..
Özgür yazılım,
ücretsiz anlamına gelmez.
Özgürlük şartılarında ücretsiz olmalıdır diye bir şart yoktur.
To understand the concept, you should think of “free” as in “free speech,” not as in “free beer”.
Özgürlüğün getirisi,
çeşitlilik.
Distro (dagıtım) nedir?
GNU/Linux isimli indirip kurabileceğiniz bir işletim sistemi aslında yoktur.
Bir çok distro vardır.
Distro, yani dağıtım, özgür yazılım felsefesinin çok alternatifli dünyasının bir sonucu olarak ortaya çıkmış, GNU/Linux'a özgü bir terimdir.
Binlerce dağıtım..
Ubuntu
Archlinux
Temel dagıtımlar
-
Debian
- Ubuntu
- Pardus
-
Red Hat
- CentOS
- Fedora
-
Slackware
-
Arch <3
- Manjaro
-
OpenSuse
Terminal nedir?
Terminal, işletim sisteminizi shell ile kullanmanızı sağlayan bir arayüzdür.
Girdi ve çıktı şeklinde çalışır.
Windows'ta bunun karşılığı CMD denebilir.
Windows'ta şuana kadar hiç CMD'ye girmeden hayatta kalabiliyorsanız, GNU/Linux dağıtımlarının bir çoğunda da terminale hiç uğramadan da hayatta kalınabilir.
Shell nedir ?
Shell işletim sistemlerinin servislerini kullanmak amacıyla kullanılan bir kullanıcı arabirimidir (user interface), bir programdır.
Kabuk (shell), çekirdek ile kullanıcı arasında ara görev görür.
Bir çok kabuk çeşidi vardır;
- sh
- bash
- zsh
- csh
- ksh
- tcsh
Temel komutlar
- ls (list)
- man (manuel, tldr)
- cd (change directory)
- pwd (print working directory)
- touch
- cat (tac)
- echo (>>, >)
- less (more)
- mkdir (make directory)
- mv (move)
- cp (copy, -r)
- rm (remove, -r)
- wget (curl)
- !!
- history
Terminal kısa yolları
- ctrl + a ile terminalde yazılı olan ifadenin ilk başına gidilir.
- ctrl + e ile terminalde yazılı olan ifadenin en sonuna gidilir.
-
ctrl + l ile terminal temizlenir.
ctrl + d ile terminalden çıkış sağlanır.
-
ctrl + shift + c ve ctrl + shift + v ile kopyalama - yapıştırma yapılır.
- ctrl + c ile çalışan uygulama durdurulabilir.
- ctrl + z çalışan uygulama arkaya atılır.
- ctrl + u o anda satıra yazılan herşeyi siler, temizler.
Terminal'de kullanılan metin düzenleyicileri
- Nano
- Vim
GNU/Linux'da
dosya sistem hiyerarşisi.
UNIX tabanlı ya da esinlenilmiş işletim sistemlerinin dosya sistem hiyerarşisi Windows işletim sisteminden oldukça farklıdır.
GNU/Linux sistemlerde bir dosya dizin hiyerarşisi vardır.
Bu hiyerarşinin en üstünde
"/" yani root(kök) dizini bulunur.
Bu, tüm sistemin referans noktasıdır.
"/" ile "/root" birbirinden farklıdır.
-
/ [root(kök) dizini]
Tüm dizinlerin üzerinde bulunan dizindir. Tüm dizinler buradan dallanarak oluşturulur.
-
/bin
Sisteminin temel komutlarının bulunduğu dizindir.
Kullandığımız çoğu komut bu dizin altında bulunur. (cat, mkdir, cp, ls, mv, rm)
-
/etc
Sistemin bütün yapılandırma dosyaları bu dizin altında bulunur. Yapılandırma dosyası; bir programın işleyişini kontrol etmek için kullanılan yerel bir dosyadır.
-
/home
Kullanıcıların kayıtlı dosyalarını, kişisel ayarlarını vb. içeren ev dizinleridir. Windows'daki Documents and Settings'e benzetebiliriz. Her bir yeni kullanıcı için alt dizin olarak altına oluşturulur.
- /home |-----> f |-----> boratanrikulu
-
/root
Root kullanıcısının home dizinidir. Diğer home dizinlerinden bi farkı yoktur.
-
/lib
Kernel modülleri ve paylaşılan kütüphane dosyaları bu klasörde bulunur. Var olan çekirdek modüllerini /lib/modules/[versiyon_numarası] içersinde bulabilirsiniz.
-
/var
Sistem değişkenlerini saklar. Home dizini kullanıcıların dosyalarını depolarken, /var dizini içinde de programların oluşturduğu veriler tutulur.
-
/opt
GNU/Linux dosya dizin hiyerarşisine uymayan programların kurulduğu dizindir. "Bağımlılık" kavramına uymayan bu programlar sistemden yalıtılmış halde /opt dizini altından çalışmayı sürdür.
GNU/Linux sistemlerde
herzaman bir dizin içersinde bulunursunuz.
Yani ağaç yapısının dışına çıkamazsınız.
Bir dosyanın yeri tarif ederken
kullanıdığımız iki türlü yol kavramı vardır.
Bunlar tam yol ve göreceli yoldur.
"/var/log" dizi altında olduğumuzu düşünelim.
Yani pwd komutunun çıktısı
Bu dizinin içersinde de
"http" diye bir dizin var.
/var/log
Bu dizine girmek istersek,
tüm adresini yazmadan,
yapmamız yeterlidir.
Buna göreceli yol denir.
cd http
Fakat eğer /var/log altında değilsek
ve /var/log/http'e girmek istiyorsak,
Buna da tam yol denir.
cd /var/log/http
Paket yöneticisi nedir?
Paket yöneticisi ile tek bir komut ile istediğiniz uygulamayı kullandığınız dağıtımın repo'larından direkt olarak çekip kurabilmenize olanak sağlayan,
El ile derlemeden, kolacak sisteminize paketleri kurabileceğiz bir programdır.
Paket yöneticisi yalnızca bir programdır ama dağıtımdan dağıtıma farklılık gösterir.
Her paket yöneticisi her dağıtımda kullanamazsınız.
Paket yöneticisi yalnızca bir programdır ama dağıtımdan dağıtıma farklılık gösterir.
Her paket yöneticisi her dağıtımda kullanamazsınız.
Örneğin, archlinux tabanlı dağıtımlarda Pacman isimli paket yöneticisi kullanılır.
Pacman dışında, archlinux tabanlı olmayadan dağıtımlarda kullanılan,
bir çok paket yöneticisi vardır.
- dnf(yum) - fedora
- apt - debian
- portage - gentoo
- zypper - opensuse
Paket yöneticilerinin kullanımları farklılık gösterebilir. Ancak temelde bütün paket yöneticileri aynı işi yaparlar.
Dağıtımın repolarında bulunan paketlerin sisteme indirilmesi, kurulması.
Örneğin archlinux tabanlı bir dağıtımda,
firefox'u kurmak istersek,
aşağıdaki gibi kurulumu yapabiliriz.
pacman -S firefox
sudo pacman -S firefox
| | | |_________ Parametre 2
| | |
| | |_____________ Parametre 1
| |
| |___________________ Paket yöneticisi
|
|_________________________ Yetki
Burada sudo ifadesini kullanma sebebimiz işlemin sistem dosyaları üzerinde
işlemler gerçekleşiyor olması.
Bu yüzden
komutun root yetkisi ile çalışması için komutun başına sudo ifadesini ekledik.
Repo kavramı.
Bu paketler nereden geliyor?
Peki bu paketler nereden geliyor?
İşte burada "repo" kavramı ortaya çıkar.
Her dağıtımın kendisine ait bir repo'su vardır.
Paket yöneticisi ile indirilip kurulan uygulamalar bu repo'lardan gelir.
vim /etc/apt/source.list
Kullanıcı nedir?
Grup nedir?
GNU/Linux'da yürütülecek tüm komutların
bir yetki sınırı vardır.
Bu yetki sınırı, kullanıcı kavramı ile belirlenir.
Ortak yetki sahipliği bulunan kullanıcıları
Bir grup haline getirerek, işlem kolaylığı sağlanır.
Bu da grup kavramını açıklar.
Sistem kullanıcı eklenmesi
"useradd" komutu ile yapılır.
Kullanıcıyı kendi istediğimiz şekilde eklemek amacıyla,
parametreler ile kullanıcıyı özelleştiririz.
Sisteme bir kullanıcı ekleyelim.
sudo useradd --create-home \
--shell /bin/zsh \
--groups users \
yenikullanici
Bu kullanıcıya bir parola verelim.
sudo passwd yenikullanici
Kullanıcıya root yetkili gruba ekleyelim.
sudo gpasswd --add yenikullanici wheel
Grupların root yetkisi sudoers dizininden belirlenir.
Sistemideki kullanıcılar "/etc/passwd" altında görülebilir.
Bu ifadeyi aşağıdaki gibi okuruz.
root:x:0:0::/root:/bin/bash
- root - kullanıcı adı.
- x - kullanıcının parolasını temsil eder.
- 0 - kullanıcının id'si. (uid)
- 0 - kullanıcının ait olduğu grubun id'si. (gid)
- /root - kullanıcının ev dizini.
- /bin/bash - kullanıcın varsayılan shell'i.
Sisteme bir grup ekleyelim.
sudo groupadd yenigrup
Oluşturduğumuz kullanıcıyı bu gruba ekleyelim.
sudo gpasswd --add yenikullanici yenigrup
Not : Burada --add parametresi oldukça kritiktir. Eğer kullanılmaz ise kullanıcıyı hali hazırda bulunduğu tüm gruplardan çıkarır
ve yeni gruba ekler.
Sistemideki gruplar "/etc/group" altında görülebilir.
Sistemdeki kullanıcıların parolaları "/etc/shadow"'da tutulur.
Buradaki veriler hash'lenmiştir.
Dosya ve dizin
farklı şeyler mi?
Hayır. Aynı.
GNU/Linux'ta her şey birer dosyadır.
Dizinler, dosyaların konumunu belirten
birer özel dosyadır.
Dizinler veri içeremez,
yalnızca konum belirtmek
amaçlı kullanılabilirler.
Dizinlerin bir türü yoktur, uzantısı yoktur.
Dosyaların ise bir türü vardır, uzantısı bulunabilir.
Dizin ve dosya isimleri aynı olamaz.
Dosya izinleri.
"ls" ile dosyalarının izin ve sahipliklerini inceleyebiliriz.
ls -l
Dosya ve dizin işlemlerine bakıldığında 10 karakterden oluşan bir yapı görünür.
Bu karakterler
- dosyalar için r[read] okumak, w[write] yazmak, x[execute] çalıştırmak
- dizinler için r[read] içeriğini görüntüleyebilmek, w[write] alt dosya ve dizinler oluşturabilmek, x[execute] cd ile içine girebilmek
izinlerini temsilen kullanılır.
Bunları aşağıdaki gibi üçerli olarak gruplandırarak incelemekte fayda vardır.
Yani bu örnektekinin;
- bir dizin olduğunu,
- dosya kullanıcısının okuma/yazma/çalıştırma,
- dosya grubunun okuma/çalıştırma,
- diğer herkesin de okuma/çalıştırma
iznine sahip olduğunu görüyoruz. Ayrıca bu dosyaların fsutil kullanıcısına ait olduğunu ve group'unun users olduğunu incelemiş olduk.
Sahipliğin değiştirilmesi.
chown yeni_sahip:yeni_group dosya_adi
İzinlerin değiştirimesi.
chmod kim=izin_yetkisi dosya_adi
İki türü var.
- Text
- Numerik
Text.
chmod o-rwx -R dizin/
Text | Class | Açıklama |
---|---|---|
u | Owner | Dosyaya sahip olan kullanıcı |
g | Group | Dosyanın ait olduğu grup |
o | Other | Diğer herkes |
a | All | Herkes (ugo ile aynı anlama gelir) |
Operator | Açıklama |
---|---|
+ | Yetkiyi ilgili kullanıcılara ekler |
- | Yetkiyi ilgili kullanıcılardan çıkarır |
= | Yetkiyi eşitler |
Numerik.
chmod 744 -R dizin/
İzin | Numara Karşılığı |
---|---|
r | 4 |
w | 2 |
x | 1 |
Numarasal izni görüntüleme.
stat -c %a dosya_adi
Dosyanı kilitlemek.
chattr +i dosya_adi
chattr -i dosya_adi