Dikkat: Bu yazıda geçen komutlar hem Linux tabanlı Centos hem de Linux tabanlı Red Hat (RHEL) işletim sisteminde geçerlidir.
Linux bir işletim sistemi çekirdeğidir. Bu çekirdek üzerine yazılan programlar ile işletim sistemi oluşturulur.
İşletim Sisteminin Görevleri:
- Donanim ile haberşelme,
- Süreç kontrolü,
- Hafıza yönetimi.
Sistem aşağıdaki sıraya göre açılır.
1.BIOS ve UEFI Nedir? Ne İşe Yarar?
- BIOS’un açılımı “Basic Input/Output System”dir yani “Temel Giriş/Çıkış Sistemi”dir.
- UEFI’nin açılımı “Unified Extensible Firmware Interface”dir yani “Birleşik Genişletilebilir Ürün Yazılımı Arabirimi”dir.
UEFI BIOS’un gelişmiş versiyonudur diyebiliriz.
BIOS/UEFI sistem açılışını ardından da işletim sisteminin yüklenmesini sağlar.
- Bilgisayar açılır.
- Ana kart üzerindeki sistemler algılanıp test edilir (POST).
- Grafik kartı çalıştırılır (donanım yüklemesi) ve işletim sisteminin yükleneceği duruma getirilir.
- Boot order sıralamasındaki ilk diski bulup, disk üzerindeki ilk 512 byte’lık kısımda bulunan koda erişir. Bu kod kaç adet partition bulunduğu, bu partitionların başlangıç adresleri ve boot loader yazılımı gibi verileri içerir.
- Boot loader programını (GRUB, GRand Unified Boot Loader) okur ve RAM üzerine aktarıp görevi GRUB’a devreder.
2.GRUB Nedir? Ne İşe Yarar?
GRUB’un açılımı “GRand Unified Boot Loader” yani “Büyük Birleşik Önyükleyici”dir. Sistem açılışında BIOS bu kodu okur.
GRUB’un amacı linux çekirdeğini yüklemektir. İki temel yüklenme aşaması içerir.
- Stage 1 (bootstrap, önyükleme) = İkinci aşamayı yüklemek ile görevlidir. Bootstrap kendini hafızaya yükler ve daha gelişmiş ikinci aşama önyükleme programını çalıştırır. Birinci aşamada çalışan kod ikinci aşamada çalışacak kodun disk üzerinde nerede olduğunu bilmek zorundadır. Bunun için bu bilgi özel bir bölgeye yazılır. Bu işlemi grub programı yapmaktadır.
- Stage 2 = Görevi işletim sistemi çekirdeğini yüklemektir. Bu programa bir yapılandırma dosyası içerisinde işletim sistemini bulacağı yer bildirilmelidir. İkinci aşamada GRUB, hangi diskin hangi bölümünün ne tip bir işletim sistemi içerdiğini önceden hazırlanan bir yapılandırma (konfigürasyon) dosyası içinden okur. Bu bize ekranda verilir. Eğer bilgisayarımızda birden fazla işletim sistemi var ise burada birini seçebiliriz. Bu şekilde Windows 7, Windows 10, CentOS, Red Hat gibi birden fazla işletim sistemi yüklü olan bilgisayarımızı istediğimiz işletim sistemi ile açabiliriz.
Yükleme işlemi işletim sisteminin kernelinin diskten okunup RAM üzerine aktarılması ile başlar. Bu noktada artık GRUB görevi kernele devreder ve sistemin yönetimi artık kerneldedir.
GRUB yazılımı “/boot” dizini altında bulunmaktadır. Sizde Linux tabanlı CentOS işletim sisteminde aşağıdaki gibi “ls –al /boot/grub” komutu ile kontrol edebilirsiniz.
Linux tabanlı işletim sistemleri daha önce yüklenmiş olan diğer işletim sistemlerini bulup konfigürasyon dosyasındaki listeye ekleyebilirler.
3.init Nedir Ne İşe Yarar?
İşletim sistemi çekirdeği yüklendikten sonra işletim sistemin yüklenmesini sağlayacak program çalıştırılır. Varsayılan olarak bu program “init programı”dır. Bu program sistemde çalışan ilk süreçtir ve diğer tüm süreçlerin çalıştırılmasını sağlar.
init sürecinin süreç kimlik numarası (PID) her zaman 1 (bir)’dir. Sizde Linux tabanlı CentOS işletim sisteminde aşağıdaki gibi “top” komutu ile kontrol edebilirsiniz.
/etc/inittab Dosyası: init sisteme ait süreçlerin tamamının ana sürecidir. Linux tabanlı CentOS işletim sisteminde “ls –al /etc | more” komutu ile inittab dosyası görülebilir.
init programının temel görevi “/etc/inittab” yapılandırma dosyasına bakarak gerekli programları çalıştırmaktır. inittab dosyası temelde hangi çalışma seviyesinde hangi programların çalıştırılacağı gibi bilgileri içerir.
Linux Çalışma Seviyeleri:
Seviye 0 : Sistemi kapatmak için kullanılır. Bu çalışma seviyesine geçildiği takdirde çalışan tüm programlar öldürülerek (kill) gerekli kapanma işlemleri yapılır ve linux makine güvenli bir şekilde kapatılacak duruma getirilir.
Seviye 1 : Linux işletim sistemi tek kullanıcılı modda çalışır. Bu mod çoğunlukla bakım ve kurtarma için kullanılır. Varsayılan olarak ağ ayarları geçerli değildir.
Seviye 2 : Linux işletim sistemi çok kullanıcılı modda çalışır fakat NFS sunucuları çalıştırılmaz ve NFS dosya sistemleri bağlanmaz.
Seviye 3 : Linux işletim sistemini çok kullanıcılı modda çalışır. İkinci seviyeden fark olarak NFS desteği bulunmaktadır.
Seviye 4 : Hiç bir şey tanımlanmamıştır.
Seviye 5 : Üçüncü seviyenin yanı sıra, X Window sisteminin çalışmasını sağlar.
Seviye 6 : Sistemi reboot etmek için kullanılır.
init programı çekirdeğin yüklenme aşamasının son adımı olarak yüklendikten sonra “/etc/inittab” dosyasında “initdefault” tanımını arar. Bu tanım geçilmesi gereken çalışma seviyesini belirtir.
Tek kullanıcılı çalışma seviyesinde init /dev/console cihazı ile etkileşimli olarak çalışan bir kabuk çalıştırır. Bu kabuk root yetkili kullanıcısının yetkileri ile çalışmaktadır.
Çok kullanıcılı bir çalışma seviyesine geçildiği takdirde init programı boot ve bootwait tanımlamaları ile belirtilen programları çalıştırır. Bu programlar çoğunlukla sistemi hazırlayan scriptlerdir. Bu scriptler sayesinde gerekli çekirdek modülleri yüklenir, dosya sistemleri bağlanır ve klavye ve font ayarları yapılır. init programı daha sonra geçilecek çalışma seviyesinde çalıştırılması gereken programları çalıştırır.
/etc/inittab Dosyası Formatı:
inittab dosyası aşağıdaki formata sahiptir.
id: çalışma_seviyesi: işlem: komut
Linux tabanlı CentOS işletim sisteminde “cat /etc/inittab” komutu ile inittab dosyasının içeriği görülebilir.
id : 1 ile 4 karakter arasında bir isimdir. Ve her satır için tek olmak zorundadır. (Not : getty süreçleri için id tanımlaması programın ilişkilendirildiği tty ile ilgili olmalıdır. Yani tty1 konsolu için çalışacak getty programını tanımlayan id 1 olmak zorundadır.)
çalışma_seviyesi : Belirtilen işlemin uygulanacağı çalışma seviyelerini belirtilir. Birden fazla çalışma seviyesi belirtilebilir.
işlem : Yapılacak işlemi belirler. Bu işlem türleri ise aşağıdaki gibidir;
- sysinit : Sistem açılırken ilk olarak çalıştırılır. Çalışma seviyeleri göz ardı edilir.
- boot : Sistem açılırken çalıştırılır.
- bootwait : Sistem açılırken çalıştırılır ve init komutun sonlanmasını bekler.
- once : Çalışma seviyesine geçildiğinde bir kez çalıştırılır.
- wait : Komut , çalışma seviyesine geçildiğinde bir kez çalıştırılır ve init komutun sonlanmasını bekler.
- respawn : Belirtilen komut sona erdiği takdirde yeniden çalıştırılır. (Özellikle getty süreçleri için kullanılır.)
- initdefault : Varsayılan sistem çalışma seviyesini belirtir. Çalışma seviyesi kısmında tek bir seviye belirtilebilir. Komut kısmı göz ardı edilir.
- ctrlaltdel : CTRL-ALT-DEL tuşlarına basıldığında gerçekleştirilecek işlemi belirtir.
komut : Çalıştırılacak komutu belirtir.
/etc/rc.d/rc.sysinit Dosyası:
Bu dosya Linux tabanlı CentOS işletim sisteminde “ls -al /etc/rc.d” komutu ile görülebilir. Bu dosya bir script’tir.
rc.sysinit scripti sistem açılırken çalıştırılan ve sistemi kullanıma hazırlayan temel scripttir. init programı ilk olarak rc.sysinit scriptini çalıştırmaktadır. rc.sysinit scriptinin temel görevleri aşağıdaki gibidir :
- Sisteminin isminin tanımlar,
- Çekirdek parametrelerini ayarlar,
- Klavye ve sistem fontunun ayarlar,
- USB kontrolörünün başlatır,
- Dosya sistemlerinin bağlar ve kontrol eder,
- LVM ve RAID cihazların aktive eder,
- Takas alanlarının aktive eder,
- Kullanıcı kotalarının aktive eder.
Her çalışma seviyesi için /etc/inittab dosyasında rc scriptinin çağırılmasını sağlayan bir satır bulunmaktadır.
Servislerin başlatılabilmesi veya sonlandırılabilmesi için scriptler kullanılmaktadır. Her çalışma seviyesi bu scriptlerin bulunduğu bir dizine sahiptir. Bu dizinler /etc/rc.d dizini altında rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d ve rc6.d şeklinde bulunurlar.
Bu dizinlerde K ile başlayan dosyalar çalışma seviyesine geçildiğinde durdurulacak servisleri belirtmektedir. S ile başlayan dosyalar ise çalışma seviyesine geçildiğinde çalıştırılacak servisleri belirtmektedir. Örneğin “ls -al /etc/rc.d/rc0.d” komutu ile 0 seviyesine ait çalıştırılacak ve durdurulacak servislere ilişkin script’leri görebiliriz.
K veya S harfinden sonra gelen sayılar göre küçükten büyüğe doğru scriptlerin çalıştırılma sırasını belirtir.
Bir çalışma seviyesine geçildiğinde rc scripti ilk olarak durdurma scriptlerini daha sonra başlatma scriptlerini çalıştırılır.
Red Hat Linux dağıtımlarında servislerin kapatılıp açılmasını sağlayan scriptler /etc/rc.d/init.d dizini altında bulunmaktadır.
Çalışma seviyelerinin dizinlerinde bulunan bu scriptler “/etc/rc.d/init.d” altındaki script’lere ait sembolik linklerdir.