LPIC-1 Sertifikasyon Sınavına Hazırlık – Modül 101-500

   Merhaba arkadaşlar, bu makalemizde sizleri LPIC-1 sınavlarına hazırlamaya çalışacağım. Linux Professional Institute (LPI), dünyanın ilk ve en büyük satıcıdan bağımsız Linux sertifika kuruluşudur. Profesyonel kaynaklar ve beceri sertifikaları sağlayarak Linux ve açık kaynak topluluğunun üyelerinin kariyer fırsatlarını arttırmalarına yardımcı olmaya çalışırlar. LPI sınavları sırasıyla, LPI Essentials, LPI Web Development Essentials, LPIC-1, LPIC-2, LPIC-3, DevOps Tools ve BSD Specialist‘dan oluşmaktadır. 

LPIC-1, LPI çok seviyeli Linux profesyonel sertifika programındaki ilk sertifikadır. LPIC-1, adayın komut satırında bakım görevleri gerçekleştirme, Linux çalıştıran bir bilgisayar kurma ve yapılandırma ve temel ağ yapılandırmasını yapma yeteneğini doğrulaması için tasarlanmıştır. 

LPIC-1 Linux Kurs İçeriği;

LPIC-1 sınavı 101 konusu

LPIC-1 sınavı 201 konusu

LPIC-1 sertifikalı olmak için adayın şunları yapabilmesi gerekir :

LPIC-1 Sınav Özeti

Önkoşullar: Bu sertifika için herhangi bir ön koşul yoktur. 
Soru Sayısı: 60 
Sınav Süresi: 90 dk
Mevcut Sürüm: 5.0
Sınav kodu : 101-500 ve 102-500
Geçerlilik süresi: Tekrar alınmadığı veya daha yüksek bir seviyeye ulaşılmadığı takdirde 5​ yıl geçerlidir.
Maliyet: https://www.lpi.org/exam-pricing
Sınav Dilleri: OnVUE ve VUE Test Merkezi : İngilizce, Almanca, Japonca, Portekizce ve Felemenkçe
Sınav Merkezi İçin Bakınız:https://home.pearsonvue.com/Clients/LPI.aspx (Online Girebilirsiniz)

Kaynak: https://www.lpi.org/

Bu makaleden önce, LPI Essentials ile güzel bir başlangıç yapmıştık. Bu eğitimde ise, LPIC-1 kurs içeriğini ve daha fazlasını öğrenmiş olacaksınız. 

GNU/LINUX ile ilgili bilginiz yok ise lütfen bu eğitime devam etmeyin. Öncelikle, diğer eğitimlerden sırasıyla bitiriniz.

LPI Essentials Eğitimleri İçin Bakınız:

https://www.cozumpark.com/linux-essentials-sertifikasyon-sinavina-hazirlik-modul-1/ https://www.cozumpark.com/linux-essentials-sertifikasyon-sinavina-hazirlik-modul-2/ https://www.cozumpark.com/linux-essentials-sertifikasyon-sinavina-hazirlik-modul-3/ https://www.cozumpark.com/linux-essentials-sertifikasyon-sinavina-hazirlik-modul-4/ https://www.cozumpark.com/linux-essentials-sertifikasyon-sinavina-hazirlik-modul-5/

 Eğitime başlamadan önce en çok kullanılan komutlar ile uygulama yapmaya çalışacağım. Farklı komutlar ile aynı işlemler yapılabilir öncelikle bunu unutmayalım. En önemli noktalardan bir tanesi de işlemlerin uygulanmasıdır. Farklı örnekler ile mantığını anlayana kadar uygulayın. Yine de anlaşılmaz ise GOOGLE üzerinden arama yapabilir veya yorumlarda da sorabilirsiniz. Aksi halde kısa bir süre içinde unutursunuz. Bu noktada kendi dağıtımlarınızı kullanabilirsiniz. Tüm dağıtımların komutları aynı veya benzerdir. Bunlara çok takılmayalım.

Öğrenmenin tek yolu, her şeyden önce okumak, örnekleri incelemek ve alıştırma yapmaktır. Okumakla bilgiyi, bilgiyi kullandıkça deneyimi, deneyimi geliştirdikçe üretimi geliştirebiliriz. 
Hadi başlayalım 🙂 Öğrendiklerimizi öğretelim. Bilgi paylaştıkça çoğalır.

  • ÖNEMLİ !!!
  • Bu eğitimi uygulamalı olarak test etmeniz için, root ayrıcalıklarına sahip olmanız gerekmektedir.
  • Uygulamaları gerçek sistemlerde yapmayınız. 
  • Sanal makina üzerinde, Snapshot/Checkpoint alınız.
  • Konfigürasyon dosyalarını değiştirmeden önce dosya bazlı yedek alınız.

101.1 Sistem Mimarisi

Donanım Ayarlarını Belirleme ve Yapılandırma

  Elektronik hesaplamanın ilk yıllarından beri, iş ve kişisel bilgisayar üreticileri, makinelerine çeşitli donanım parçaları entegre ettiler ve bu parçalar da işletim sistemi tarafından desteklenmesi gerekmektedir. Endüstri tarafından talimat setleri ve cihaz iletişimi için standartlar oluşturulmadıkça, işletim sistemi geliştiricisinin bakış açısından bu çok zor olabilir. İşletim sistemi tarafından bir uygulamaya sağlanan standartlaştırılmış soyutlama katmanına benzer şekilde, bu standartlar belirli bir donanım modeline bağlı olmayan bir işletim sisteminin yazılmasını ve bakımını kolaylaştırır. Bununla birlikte, entegre temel donanımın karmaşıklığı bazen kaynakların işletim sistemine nasıl maruz kalması gerektiği konusunda ayarlamalar gerektirir, böylece doğru şekilde kurulabilir ve çalışabilir.

   Bu ayarlamalardan bazıları, kurulu bir işletim sistemi olmadan da yapılabilir. Çoğu makine, makine açıldığında çalıştırılabilen bir yapılandırma yardımcı programı sunar. 2000’lerin ortalarına kadar, yapılandırma yardımcı programı, x86 anakartlar’da bulunan temel yapılandırma rutinlerini içeren bellenim standardı olan BIOS’ta uygulanıyordu.2000’li yılların ilk on yılının sonundan itibaren, x86 mimarisine dayalı makineler, BIOS’u UEFIadlı yeni bir uygulama ile değiştirmeye başladı. Tanımlama, test etme, yapılandırma ve ürün yazılımı yükseltmeleri için daha gelişmiş özelliklere sahiptir. Değişikliğe rağmen, her iki uygulama da aynı temel amacı yerine getirdiğinden, yapılandırma yardımcı programını BIOS olarak adlandırmak nadir değildir.

   Sistem yapılandırma yardımcı programı, bilgisayar açıldığında belirli bir tuşa basıldıktan sonra sunulur. Hangi tuşa basılacağı üreticiden üreticiye değişir, ancak genellikle F2,F12 veya DEL gibi işlev tuşlarından biridir . Kullanılacak tuş kombinasyonu genellikle açılış ekranında görüntülenir.

   Makine birçok depolama (HDD) aygıtıyla donatılmışsa, hangisinin doğru önyükleyiciye sahip olduğunu ve aygıt önyükleme sırasındaki ilk giriş olması gerektiğini belirlemek önemlidir. BIOS önyükleme doğrulama listesinde yanlış aygıt ilk sırada yer alırsa işletim sistemi yüklenmeyebilir.

Linux’ta Cihaz Denetimi

   Cihazlar doğru bir şekilde tanımlandıktan sonra, ihtiyaç duydukları ilgili yazılım bileşenlerini ilişkilendirmek işletim sistemine bağlıdır. Bir donanım özelliği beklendiği gibi çalışmadığında, sorunun tam olarak nerede olduğunu belirlemek önemlidir. İşletim sistemi tarafından bir donanım parçası algılanmadığında, parçanın veya bağlı olduğu bağlantı noktasının arızalı olması muhtemeldir. Donanım parçası doğru bir şekilde algılandığında ancak yine de düzgün çalışmıyorsa işletim sistemi tarafında bir sorun olabilir. Bu nedenle, donanımla ilgili sorunlarla uğraşırken ilk adımlardan biri, işletim sisteminin cihazı doğru şekilde algılayıp algılamadığını kontrol etmektir. Bir Linux sistemindeki donanım kaynaklarını tanımlamanın iki temel yolu vardır: Özel komutları kullanmak veya özel dosya sistemlerindeki belirli dosyaları okumak.

Denetim Komutları

   Bir Linux sisteminde bağlı cihazları tanımlamak için iki temel komut şunlardır. Bunlardan ilki lspci komutudur. Komutu çalıştırıldığı zaman, şu anda PCI veri yoluna bağlı olan tüm cihazları gösterir. PCI aygıtları, bir disk denetleyicisi gibi ana karta takılı bir bileşen veya harici bir grafik kartı gibi bir PCI yuvasına takılan bir genişletme kartı olabilir.

Diğer kullanacağımız komut ise lsusb olacaktır. Komutu çalıştırıldığı zaman, şu anda makineye bağlı olan USB aygıtlarını listeler. Neredeyse akla gelebilecek her amaç için USB aygıtları mevcut olsa da, USB arabirimi büyük ölçüde giriş aygıtlarını (klavyeler, işaretleme aygıtları) ve çıkarılabilir depolama ortamını bağlamak için kullanılır.

Komutların çıktısı lspci ve lsusb işletim sistemi tarafından tanımlanan tüm PCI ve USB aygıtlarının bir listesinden oluşur. Ancak, her donanım parçası, ilgili aygıtı kontrol etmek için bir yazılım bileşeni gerektirdiğinden, aygıt henüz tam olarak çalışmayabilir. Bu yazılım bileşenine çekirdek modülü denir ve resmi Linux çekirdeğinin bir parçası olabilir veya diğer kaynaklardan ayrı olarak eklenebilir.

Donanım aygıtlarıyla ilgili Linux çekirdek modüllerine diğer işletim sistemlerinde olduğu gibi sürücüler(driver) de denilmektedir . Ancak Linux için sürücüler her zaman aygıtın üreticisi tarafından sağlanmaz. Bazı üreticiler ayrı olarak kurulacak kendi ikili sürücülerini sağlarken, birçok sürücü bağımsız geliştiriciler tarafından yazılmıştır. Tarihsel olarak, örneğin Windows üzerinde çalışan parçalar, Linux için bir karşılık gelen çekirdek modülüne sahip olmayabilir. Günümüzde Linux tabanlı işletim sistemleri güçlü donanım desteğine sahiptir ve çoğu cihaz zahmetsizce çalışmaktadır.

Doğrudan donanımla ilgili komutlar genellikle yürütmek için kök ayrıcalıkları gerektirir veya normal bir kullanıcı tarafından yürütüldüğünde yalnızca sınırlı bilgi gösterir, bu nedenle root olarak oturum açmak veya sudo komutu ile yürütmek gerektirir.

Bu tür komutların çıktısı onlarca satır uzunluğunda olabilir, bu nedenle önceki ve sonraki örnekler yalnızca ilgilenilen bölümleri içerirHer satırın başındaki onaltılık sayılar, karşılık gelen PCI aygıtının benzersiz adresleridir. 

lspci 

 lspci komut ile birlikte,  adresi seçeneği verilmişse, belirli bir aygıt hakkında daha fazla ayrıntı gösterir. Bu örnekte, ethernet hakkında daha fazla bilgi almaya çalışalım.

lspci -s 02:01.0 -v 

Yukarıda ki görselde Ethernet hakkında daha fazla bilgi almaya çalıştığımızda erişim engeli aldık. Normal bir kullanıcı tarafından yürütüldüğünde yalnızca sınırlı bilgi gösterilir. 

sudo lspci -s 02:01.0 -v

Çıktı artık adresteki aygıtın daha birçok ayrıntısını gösteriyor.  Subsystem cihazın markası ve modeliyle ilişkilidir. kernel driver in use  ise çekirdek modülüdür. Toplanan tüm bilgilerden, aşağıdakileri varsaymak doğrudur.

  1. Cihaz belirlendi.
  2. Eşleşen bir çekirdek modülü yüklendi.
  3. Cihaz kullanıma hazır olmalıdır.

lsusb komutu, lspci öğesine benzer, ancak yalnızca USB bilgilerini listeler.

lsusb 

lspci seçeneğinde olduğu gibi , -v daha ayrıntılı çıktı görüntüler. Birden fazla USB olduğu zaman, -d seçeneği ve kimliği belirtilerek inceleme için belirli bir cihaz seçilebilir.

lsusb -v -d 1781:0c9f 

Kernel Modules

Kernel modülü, işletim sisteminin bir uzantısıdır . Modül, işletim sisteminin aynı ayrıcalık seviyesinde (en yüksek) bulunur ve bu nedenle sistemin her kaynağına erişebilir. Linux altında bir modül, kullanıcı süreçleri ve işletim sisteminin diğer bölümleriyle iletişim kurmak için iyi tanımlanmış bir arayüze sahip bir C programından başka bir şey değildir.

Çekirdek modülü yerine aygıt sürücüsü terimi’de kullanılmaktadır.

Standart bir Linux sisteminde herhangi bir zamanda çok sayıda yüklü çekirdek modülüne sahip olmakla birlikte, kendimiz de modül ekleyebiliriz. Linux’da donanımlar kernel sürücüleri tarafından kullanılırlar. Bu modüller genellikle lib/modules dizini altında .ko uzantısı şeklinde bulunurlar ve açılış anında yüklenirler. 

find / -iname *.ko -print 2>/dev/null |nl

Kernel’in fonksiyonelliğini sistemi yeniden başlatmadan modüller sayesinde arttırılabilir. Bir aygıt sürücüsünü düşünecek olursak, sürücü ile kernel, sistem ve donanım arasındaki bağlantıyı sağlayacaktır. Fakat bu işlem için kernel’e eklenti yapmamız gerekecektir. Kernel’e yapılacak her hangi bir müdahalede, kernel’in tekrar derlenmesi ve sistemin yeniden başlatılması gerekir. İşte buna benzer durumlarda modüller kullanılmaktadır.

Modüllere, eklemek, kaldırmak, listelemek, özellikleri kontrol etmek, bağımlılıkları ve takma adları çözme gibi etkileşim kurmanın bir çok yolu vardır. Linux çekirdek modülleriyle ortak görevleri yerine getirmek için kmod paketindeki komutları kullanılmaktır. 

kmod

Örneğin lsmod komutu, şu anda yüklü olan tüm modülleri gösterir.

lsmod

lsmod komutun çıktısı üç sütuna bölünmüştür:

Bir aygıt sürücüsü (modül) sorunlara neden oluyorsa, /etc/modprobe.d/blacklist.conf konfigürasyon dosyasına modülün yüklenmesini engellemek için kullanılabilir.

Linux sistemlerde genelde varsayılan dosyayı değiştirmek yerine, yeni bir yapılandırma dosyası oluşturmak daha doğrudur.

Bilgi Dosyaları ve Cihaz Dosyaları

lspcı, lsusb ve lsmod komutları, işletim sistemi tarafından depolanan donanım bilgilerini okumak için ön uç görevi görür. Bu tür bilgiler /proc ve /sys dizinlerindeki özel dosyalarda saklanır. Bu dizinler, bir aygıt bölümünde bulunmayan dosya sistemlerine bağlama noktalarıdır, ancak yalnızca çekirdek tarafından çalışma zamanı yapılandırmasını ve çalışan işlemlerle ilgili bilgileri depolamak için kullanılan RAM alanında bulunur. Bu tür dosya sistemleri geleneksel dosya depolama için tasarlanmamıştır, bu nedenle sözde dosya sistemleri olarak adlandırılırlar ve yalnızca sistem çalışırken var olurlar. /proc dizini, çalışan işlemler ve donanım kaynakları hakkında bilgi içeren dosyalar içerir. 

Donanımı denetlemek için /proc dosyasındaki önemli dosyalardan bazıları şunlardır:

Örneğin, makinanın cpu bilgilerine bakalım.

cat /proc/cpuinfo

/sys dizinindeki dosyalar /proc dizinindekilere benzer rollere sahiptir. Bununla birlikte, /sys dizini, donanımla ilgili aygıt bilgilerini ve çekirdek verilerini depolamak için özel bir amaca sahipken, /proc ayrıca çalışan işlemler ve yapılandırma dahil olmak üzere çeşitli çekirdek veri yapıları hakkında bilgi içerir.

Standart bir Linux sistemindeki aygıtlarla doğrudan ilgili başka bir dizin /dev’dir.  /dev içindeki her bir dosya sistem aygıtıyla, özellikle de depolama aygıtlarıyla ilişkilendirilir. Eski bir IDE sabit sürücüsü, örneğin anakartın ilk IDE kanalına bağlandığında, /dev/hda dosyasıyla temsil edilir. /dev/sda gibi başlayanlar için ise scsi disk aygıtları içindir. Ancak şimdi genel olarak çıkarılabilir aygıtlara ve SATA aygıtlarına atıfta bulunmaktadır.

ls -l /dev/sd* 

Çıkarılabilir aygıtlar /dev dosyasında karşılık gelen ve aygıtları oluşturan udev alt sistemi tarafından işlenir. Linux çekirdeği donanım algılama olayını yakalar ve udev işlemine iletir, bu işlem daha sonra aygıtı tanımlar ve önceden tanımlanmış kuralları kullanarak /dev dosyasında karşılık gelen dosyaları dinamik olarak oluşturur.

Mevcut Linux dağıtımlarında udev, makine açılırken halihazırda mevcut olan aygıtların (coldplug detection) ve sistem çalışırken tanımlanan aygıtların (hotplug detection) tanımlanmasından ve yapılandırılmasından sorumludur. udev, /sys içine monte edilmiş donanımla ilgili bilgiler için sözde dosya sistemi olan sysfs’ye dayanır.

Hotplug, sistem çalışırken bir USB aygıtı takıldığında algılanmasını ve yapılandırılmasını ifade etmek için kullanılan terimdir.

Depolama aygıtları

Linux’ta, depolama aygıtlarına genel olarak blok aygıtlar denir, çünkü veriler bu aygıtlara ve bu aygıtlardan farklı boyut ve konumlara sahip arabelleğe alınmış veri bloklarında okunur. Her blok cihazı, /dev cihaz tipine (IDE, SATA, SCSI, vb.) ve bölümlerine bağlı olarak dosyanın adı ile dizindeki bir dosya ile tanımlanır.

 Örneğin, CD/DVD ve disket aygıtlarının adları şu şekilde verilecektir. ikinci IDE kanalına bağlı bir CD/DVD sürücüne /dev/hdc/  tanımlarken birinci IDE kanalındaki ana ve bağımlı aygıtlar (dev/hda ve /dev/hdb) için ayrılmıştırEski bir disket sürücüsü /dev/fd0, /dev/fd1, vb. olarak tanımlanacaktır .

Linux çekirdeği sürüm 2.4’ten itibaren, çoğu depolama aygıtı, donanım türlerinden bağımsız olarak artık SCSI aygıtlarıymış gibi tanımlanır. IDE, SSD ve USB blok cihazlarının önüne sd. IDE diskleri için sd ön ek kullanılacaktır. Ancak sürücünün master veya slave olmasına bağlı olarak üçüncü harf seçilecektir 

Bölümler sayısal olarak listelenir ve /dev/sda1, /dev/sda2 /dev/sda3 gibi tanımlanır. Toparlamak gerekirse, 

Ancak bazı istisnası durumlar vardır. Bunlar, bellek kartlarında (SD kartlar) ve NVMe aygıtlarında (PCI Express veri yoluna bağlı SSD) oluşur. SD kartlar için, bölümler /dev/mmcblk0p1, /dev/mmcblk0p2, gibi tanımlanırken, NVMe cihazlar içinde  bölümler dev/nvme0n1p1, /dev/nvme0n1p2 gibi  nvme ön eki ve alır.

Eğer kendi sisteminizdeki blok cihazları listelemek isterseniz lsblk komutunu kullanabilirsiniz. lsblk, aygıtlarla ilgili ayrıntıları görüntülemek için kullanılır ve bu blok aygıtlar  temelde bilgisayara bağlı aygıtları temsil eden dosyalardır. Görüntülediği bilgileri elde etmek için /sys sanal dosya sistemini ve udev db’yi sorgular. Temel olarak çıktıyı ağaç benzeri bir yapıda görüntüler.

lsblk komutunu kullanmak için, util-linux paketi yüklü olması gerekmektedir. Dağıtımların çoğunda önceden yüklü olmuş olarak gelir. 

lsblk 

101.2 Sistemi önyükleyin

Makineyi kontrol etmek için, işletim sisteminin ana bileşeni olan çekirdek, BIOS veya UEFI gibi önceden yüklenmiş bir firmware tarafından yüklenenbootloaderadlı bir program tarafından yüklenmelidir. Önyükleyici, hangi bölümün kök dosya sistemini içerdiği veya işletim sisteminin hangi modda çalışması gerektiği gibi parametreleri çekirdeğe iletecek şekilde özelleştirilebilir. Çekirdek yüklendikten sonra, donanımı tanımlayan ve yapılandıran önyükleme işlemine devam eder. Son olarak, çekirdek, sistem hizmetlerini başlatmak ve yönetmekten sorumlu yardımcı programı çağırır.

BIOS veya UEFI

Önyükleyiciyi çalıştırmak için x86 makineleri tarafından yürütülen prosedürler, BIOS veya UEFI kullanıp kullanmadıklarından farklıdır. Temel Giriş/Çıkış Sistemi için kısa olan BIOS, bilgisayar her açıldığında çalıştırılan, anakarta bağlı geçici olmayan bir bellek yongasında depolanan bir programdır. Bu tür bir programa firmware adı verilir. Depolama konumu sistemin sahip olabileceği diğer depolama aygıtlarından ayrıdır. BIOS, ilk depolama aygıtındaki ilk 440 baytın — BIOS yapılandırma yardımcı programında tanımlanan sırayı izleyerek önyükleyicinin ilk aşaması olduğunu varsayar. Bir depolama aygıtının ilk 512 baytı, standart DOS bölüm şemasını kullanan depolama aygıtlarının MBR olarak adlandırılır ve önyükleyicinin ilk aşamasına ek olarak bölüm tablosunu içerir. MBR doğru verileri içermiyorsa, alternatif bir yöntem kullanılmadığı sürece sistem önyükleme yapamaz.

  1. POST (açılışta kendi kendine test) işlemi, makine açılır açılmaz basit donanım arızalarını tespit etmek için yürütülür.
  2. BIOS, video çıkışı, klavye ve depolama ortamı gibi sistemi yüklemek için temel bileşenleri etkinleştirir.
  3. BIOS, önyükleyicinin ilk aşamasını MBR’den yükler (BIOS yapılandırma yardımcı programında tanımlandığı gibi ilk aygıtın ilk 440 baytı).
  4. Önyükleyicinin ilk aşaması, önyükleme seçeneklerini sunmaktan ve çekirdeği yüklemekten sorumlu olan önyükleyicinin ikinci aşamasını çağırır.

UEFI, bazı önemli noktalarda bıos’tan farklıdır. BIOS olarak UEFI aynı zamanda bir firmware’dır, ancak bölümleri tanımlayabilir ve bunlarda bulunan birçok dosya sistemini okuyabilir. UEFI, yalnızca anakarta bağlı geçici olmayan belleğinde (NVRAM) depolanan ayarları dikkate alarak MBR’ye güvenmez. Bu tanımlar, otomatik olarak yürütülecek veya bir önyükleme menüsünden çağrılacak olan EFI uygulamaları adı verilen UEFI uyumlu programların konumunu gösterir. EFI uygulamaları önyükleyiciler, işletim sistemi seçicileri, sistem tanılama ve onarım araçları vb. olabilir. 

EFI uygulamalarını içeren bölüme EFI Sistem Bölümü veya yalnızca ESP adı verilir. Bu bölüm, kök dosya sistemi veya kullanıcı veri dosya sistemleri gibi diğer sistem dosya sistemleriyle paylaşılmamalıdır. ESP bölümündeki EFI dizini, nvram’a kaydedilen girdilerin işaret ettiği uygulamaları içerir.

  1. POST (açılışta kendi kendine test) işlemi, makine açılır açılmaz basit donanım arızalarını tespit etmek için yürütülür.
  2. UEFI, sistemi yüklemek için video çıkışı, klavye ve depolama ortamı gibi temel bileşenleri etkinleştirir.
  3. UEFI ürün yazılımı, ESP bölümünün dosya sisteminde depolanan önceden tanımlanmış EFI uygulamasını çalıştırmak için nvram’da depolanan tanımları okur. Genellikle, önceden tanımlanmış EFI uygulaması bir önyükleyicidir.
  4. Önceden tanımlanmış EFI uygulaması bir önyükleyici ise, işletim sistemini başlatmak için çekirdeği yükleyecektir.

UEFI standardı, yalnızca imzalı EFI uygulamalarının, yani donanım üreticisi tarafından yetkilendirilmiş EFI uygulamalarının yürütülmesine izin veren Güvenli Önyükleme adlı bir özelliği de destekler. Bu özellik, kötü amaçlı yazılımlara karşı korumayı artırır, ancak üretici garantisi kapsamında olmayan işletim sistemlerinin yüklenmesini zorlaştırabilir.

Önyükleyici (Bootloader)

X86 mimarisinde Linux için en popüler önyükleyici Grub’dur (Grand Unified Bootloader). BIOS veya UEFI tarafından çağrılır çağrılmaz GRUB, önyüklenebilir işletim sistemlerinin bir listesini görüntüler.

 Bazen liste otomatik olarak görünmez, ancak GRUB BIOS tarafından çağrılırken Shift tuşuna basılarak çağrılabilir. UEFI sistemlerinde bunun yerine Esc tuşu kullanılmalıdır.

GRUB menüsünden, kurulu çekirdeklerden hangisinin yüklenmesi gerektiğini seçmek ve ona yeni parametreler aktarmak mümkündür. Çoğu çekirdek parametresi option=value öğesini takip eder. En kullanışlı çekirdek parametrelerinden bazıları şunlardır:

Çekirdek Önyükleme Parametreleri Hakkında bakınız:

https://wiki.ubuntu.com/Kernel/KernelBootParameters

Çekirdek parametrelerinin değiştirilmesi genellikle gerekli değildir, ancak işletim sistemi ile ilgili sorunları tespit etmek ve çözmek için faydalı olabilir. Çekirdek parametreleri , yeniden başlatmalarda kalıcı olmaları  için /etc/default/grub dosyasına  eklenmelidir. Ancak Komut tarafından gerçekleştirilen GRUB_CMDLINE_LINUX her değişiklikte, önyükleyici için yeni bir yapılandırma dosyası oluşturulmalıdır. İlk olarak İşletim sistemi çalıştığında, mevcut oturumu yüklemek için kullanılan çekirdek parametreleri dosyada okuyalım.

cat /proc/cmdline

Aşağıdaki kullandığınız sistemde, mevcut oturumu yüklemek için çekirdek parametrelerini görebilirsiniz.

Aslında grub önyükleme sırasında, yukarıdakine ek olarak daha fazla özelleştirebiliriz. 

Belirli bir çekirdek önyükleme parametresini kullanmayı denemeniz önerildiğinde, genellikle parametreyi test için geçici olarak eklemek iyi bir fikirdir. Parametre eklemenin istenen etkiye sahip olduğunu belirledikten sonra, kalıcı olarak ekleyebilirsiniz.

Önyükleme ekranının gözükmemesi ve maksimum kullanılan çekirdek sayısının kısıtlanması.

Şimdi bir kaç örnek yapalım. Mantığı aynıdır örneklere bakarak diğer değişiklikleri test edip gerçekleştirebilirsiniz. Şimdi önyükleme ekranındaki yazıları ve maksimum cpu kullanımını kısıtlayalım. Sistem önyükleme ekranında bir çok yazı akıp geçmektedir. Bunlar aşağıdaki gibi önyükleme iletileridir.

Yapılandırma dosyalarına müdahale etmeden önce her zaman yedeklemeyi unutmayın.

Aslında bu ekranı kapatmak sunucu tarafında pekte mantıklı değildir, çünkü açılışta hata görme ihtimalinizi ortadan kaldırırsınız. Ancak son kullanıcı tarafında pekte hoş gözükmeyebilir, bu tür durumlarda kullanmak daha doğru olacaktır. Diğer bir yapacağımız işlem ise işlemci çekirdeği kullanımı kısıtlamaktı. Öncelikle, sistemimizdeki toplam çekirdek sayısına bakalım.

cat /proc/cpuinfo|grep -w "cpu"

Yukarıda işlemci çekirdek sayısının 2 olduğunu görebiliyoruz. 

Önyükleme ekranındaki yazıları ve işlemci çekirdek kullanım sayısını 1’e düşürmek için, editör ile grub konfigürasyon dosyasını açalım.

vi editörü zor geliyor ise nano editörünü kullanabilirsiniz.

sudo vi /etc/default/grub

Yukarıda nasıl kullanacağını anlatmıştım, o yüzden uygulayacağım işlemlere göre aşağıdaki satırları ekliyorum.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="maxcpus=1"

Dosyayı kayıt edip çıkalım.

:wq!

grup konfigürasyon dosyasının geçerli olması için, güncellememiz gerekmektedir. Aşağıdaki komut satırı ile güncelleme işlemini gerçekleştirebilirsiniz.

sudo update-grub

Güncelleme işlemi bittikten sonra, değişikliklerin geçerli olması için sisteminizi yeniden başlatmanız gerekmektedir.

sudo reboot now

Açılıştan sonra önyükleme ekranının bir çoğunun gittiğini görebilirsiniz. Şimdi işlemcide kullanılan, çekirdek sayısına bakalım.

cat /proc/cpuinfo|grep -w "cpu"

Şimdi bir kaç örnek daha yapıp, diğer konuya geçelim. 

Grub Bekleme Süresini Değiştirme

İşletim sistemi açılırken grub ekranındaki süreyi aşağıdaki adımlar ile değiştirebiliriz. İlk olarak metin editörü ile aşağıdaki dosyayı açalım. 

sudo vi /etc/default/grub

Görselde ki değeri 5 yerine 20 yazarak saniye şeklinde ayarlamış oluyoruz. 

GRUB_TIMEOUT=20 

Son olarak grub’u ayarlarını güncelleyelim. 

sudo update-grub 

Sunucumuzu yeniden başlattıktan sonra istediğimiz şekilde değişikliklerin kayıt olduğunu görebiliyoruz. 

sudo reboot now 

Grub Tüm Menülere Parola Koyma

Grub ekranından root veya diğer kullanıcıların parolaları kolay bir şekilde değiştirilebildiği için, genelde bu işlemi zorlaştırmak için grub ekranı şifrelenir. Grub ile oynamak sisteminizi önyüklenemez hale getirebilir. Bu yüzden yapılan işlemleri çok dikkatli yapınız.  İlk olarak parolanın açık halde olması güvensiz olacağı için, aşağıdaki komut ile uzun alfasayısal bir koda dönüştürelim ve otomatik oluşan hash kodu kopyalayalım. 

sudo grub-mkpasswd-pbkdf2 

Görseldeki dizini editör ile açalım. 

sudo vi /etc/grub.d/00_header 

 En alt satıra inelim ve metinleri ekleyelim. (Oluşturulan şifreyi password_pbkdf2 kısmına kullanıcı adı yazdıktan sonra grub. ile başlayan kısımdan itibaren hepsini yapıştırıyoruz.) 

cat << EOF
set superusers=”kullanıcı_adi”
password_pbkdf2 kullanıcı_adi hash
EOF 

Grub ayarlarını güncelleyelim. 

sudo update-grub 

Sunucuyu yeniden başlattıktan sonra tüm menülerde parola isteyecektir. 

sudo shutdown -r now

 Grub Belirli Menülere Parola Koyma

 Şimdi de önyükleme hariç diğer seçeneklere parola koyalım. Yukarıdaki işlemler aynı şekilde kalması gerekmektedir. Biz sadece ön yükleme kısmını hariç tutacağız. İlk olarak görseldeki dosyayı editör ile açalım. 

sudo vi /etc/grub.d/10_linux

Görseldeki işaretli kısma –unrestricted metnini ekliyoruz. 

--unrestricted 

Grub’ı tekrar güncelleyelim. 

sudo update-grub 

Sunucumuzu  yeniden başlatıyoruz. 

sudo reboot now 

Sistem Başlatma

  Bir sistemi başlatmak çekirdek dışında, işletim sistemi beklenen özelliklerini sağlayan diğer bileşenlere bağlıdır. Bu bileşenlerin çoğu, basit kabuk komut dosyalarından daha karmaşık hizmet programlarına kadar değişen, sistem başlatma işlemi sırasında yüklenir. Komut dosyaları genellikle sistem başlatma işlemi sırasında çalışacak ve sona erecek kısa ömürlü görevleri gerçekleştirmek için kullanılır. DAEMON olarak da bilinen hizmetler, işletim sisteminin kendine özgü yönlerinden sorumlu olabileceğinden her zaman etkin olabilir.

 En farklı özelliklere sahip başlangıç ​​komut dosyalarının ve arka plan programlarının bir Linux dağıtımına yerleştirilebileceği yolların çeşitliliği çok büyüktür; Bu, tüm Linux dağıtımlarının bakımcılarının ve kullanıcılarının beklentilerini karşılayan tek bir çözümün geliştirilmesini tarihsel olarak engelleyen bir gerçektir. Ancak, dağıtım yöneticilerinin bu işlevi gerçekleştirmek için seçtikleri herhangi bir araç en azından sistem hizmetlerini başlatabilecek, durdurabilecek ve yeniden başlatabilecektir. Bu eylemler, örneğin bir yazılım güncellemesinden sonra genellikle sistemin kendisi tarafından gerçekleştirilir, ancak sistem yöneticisinin, yapılandırma dosyasında değişiklik yaptıktan sonra neredeyse her zaman hizmeti manuel olarak yeniden başlatması gerekir.

İşletim sisteminin başlatılması, önyükleyici çekirdeği RAM’e yüklediğinde başlar. Ardından çekirdek, CPU’nun sorumluluğunu üstlenecek ve temel donanım yapılandırması ve bellek adresleme gibi işletim sisteminin temel özelliklerini algılamaya ve kurmaya başlayacaktır.

Çekirdek daha sonra initramfs’i (ilk RAM dosya sistemi) açacaktır. initramfs, önyükleme işlemi sırasında geçici bir kök dosya sistemi olarak kullanılan bir dosya sistemini içeren bir arşivdir. Bir initramfs dosyasının temel amacı, çekirdeğin işletim sisteminin “gerçek” kök dosya sistemine erişebilmesi için gerekli modülleri sağlamaktır.

Kök dosya sistemi kullanılabilir olur olmaz, çekirdek içinde yapılandırılan tüm dosya sistemlerini  /etc/fstab bağlayacak ve ardından  init adında bir yardımcı program olan ilk programı çalıştıracaktır. init, programı tüm başlatma komut dosyalarını ve sistem arka plan programlarını çalıştırmaktan sorumludur. Bu tür sistem başlatıcıların geleneksel init dışında, systemd ve Upstart gibi farklı uygulamaları vardır . Başlatma programı yüklendikten sonra, initramfs RAM’den kaldırılır.

Şimdi linux sistem yöneticilerinden (SysV, Systemd and Upstart) kısaca bahsedelim.

SysV standard

SysVinit standardına dayalı bir hizmet yöneticisi, çalışma seviyeleri kavramını kullanarak hangi arka plan programlarının ve kaynakların kullanılabilir olacağını kontrol eder . Çalışma seviyeleri 0’dan 6’ya kadar numaralandırılmıştır ve dağıtım görevlileri tarafından belirli amaçları yerine getirmek üzere tasarlanmıştır. Tüm dağıtımlar arasında paylaşılan tek çalışma seviyesi tanımları 0, 1 ve 6 çalışma seviyeleridir.

systemd

systemd, SysV komutları ve çalışma seviyeleri için bir uyumluluk katmanına sahip modern bir sistem ve hizmet yöneticisidir. systemd eşzamanlı bir yapıya sahiptir, servis aktivasyonu, isteğe bağlı arka plan programı yürütme, cgroups ile süreç izleme , anlık görüntü desteği, sistem oturumu kurtarma, bağlama noktası kontrolü ve bağımlılık tabanlı servis kontrolü için soketler ve D-Bus kullanır. Son yıllarda çoğu büyük Linux dağıtımı, sistemd’yi varsayılan sistem yöneticisi olarak yavaş yavaş benimsedi.

Upstart

Systemd gibi, Upstart da init’in yerine geçer. Upstart’ın odak noktası, sistem hizmetlerinin yükleme sürecini paralelleştirerek önyükleme sürecini hızlandırmaktır. Upstart, önceki sürümlerde Ubuntu tabanlı dağıtımlar tarafından kullanılıyordu, ancak bugün yerini systemd’ye bıraktı.

Sistemi yönetmek için, kullanmakta olduğunuz sistem yöneticisini bilmelisiniz. Mevcut sistem yöneticinizi belirlemenin en kolay yolu “pstree” komutunu kullanmak ve sisteminizde çalışan ilk işlemi kontrol etmektir.

pstree|head -1

Başlatma Denetimi

Önyükleme işlemi sırasında hatalar oluşabilir, ancak işletim sistemini tamamen durdurmak için çok kritik olmayabilirler. Bununla birlikte, bu hatalar sistemin beklenen davranışını tehlikeye atabilir. Tüm hatalar, hatanın ne zaman ve nasıl oluştuğu hakkında değerli bilgiler içerdiğinden, gelecekteki araştırmalar için kullanılabilecek mesajlarla sonuçlanır. Hiçbir hata mesajı oluşturulmasa bile, önyükleme işlemi sırasında toplanan bilgiler, ayarlama ve yapılandırma amaçları için yararlı olabilir.

Çekirdeğin, önyükleme mesajları da dahil olmak üzere mesajlarını depoladığı bellek alanına çekirdek halka arabelleği denir. İletiler, örneğin bir animasyonun görüntülenmesi gibi başlatma işlemi sırasında görüntülenmeseler bile çekirdek halkası arabelleğinde tutulur. Ancak sistem kapatıldığında veya “dmesg -c” komutu yürütüldüğünde çekirdek halka arabelleği tüm mesajları kaybeder. Herhangi bir seçenek olmadan dmesg komutu, çekirdek halka arabelleğinde mevcut mesajları görüntüler:

dmesg

dmesg çıktısı yüzlerce satır uzunluğunda olabilir, bu nedenle önceki liste yalnızca sistemd hizmet yöneticisini çağıran çekirdeği gösteren alıntıyı içerir. Satırların başındaki değerler, çekirdek yükünün başladığı zamana göre saniye miktarıdır.

Komutu seçenek olmadan çalıştırmak, bizim bazı yönetim görevlerini yerine getirmemize pek olanak sağlamaz. Bu yüzden Linux üzerinde, human yani insanların daha kolay anlayabileceği seçenek bir çok komutta bulunmaktadır. -H seçeneği ile less komutu gibi dosya içinde gezinmemizi sağlar. Çıkmak için q tuşuna basmanız yeterlidir.

dmesg -H

Bir dmesg analizi gerçekleştirmenin diğer bir alternatifi,  -w seçeneğidir. Bu sayede, oluşacak yeni mesajları bekler. Şimdi aşağıdaki komutu çalıştıralım.

dmesg -w

Yeni mesajları anlık olarak beklerken, cihaza yeni bir CD/DVD ekleyelim. Ekledikten sonra, anlık olarak aşağıdaki görseldeki gibi bize logları gösterecektir.

Listenin bol ve kalabalık olduğu gözünüze çarpmıştır. Sistemde olan her şeyi dahili olarak analiz etmemek için çıktıyı yalnızca hatalarla ve uyarılarla sınırlamak mümkündür ve bunun için dmesg komutunun sekiz tane desteklenen günlük seviyeleri vardır. Şimdi bunlara bakalım.

İhtiyacımıza göre,  tek seviye veya birden fazla seviyeyi aynı anda kullanabiliriz.

sudo dmesg --level emerg
sudo dmesg --level err --level warn

-T parametresi kullanarak ne zaman bir hata veya uyarı oluştuğunu ayrıntılı olarak bilmek mümkündür. Bunu isteğe bağlı olarak cihazı, bir kelimeyi veya seviyeye göre arama gerçekleştirebilirsiniz.

sudo dmesg -T --level warn
sudo dmesg -T|grep -i ens33

systemd tabanlı sistemlerde,  journalctl komutu başlatma iletilerini -b, –boot, -k veya –dmesg seçenekleriyle gösterir. journalctl –list-boots komutu geçerli önyüklemeye göre önyükleme numaralarının bir listesini, bunların tanımlama karmasını ve karşılık gelen ilk ve son iletilerin zaman damgalarını gösterir.

journalctl --list-boots 

Önceki başlatma günlükleri, sisteme dayalı sistemlerde de tutulur, bu nedenle önceki işletim sistemi oturumlarından gelen iletiler yine de denetlenebilir. -b ve 0 seçenekleri sağlanırsa, en son önyükleme için mesajlar gösterilir. Eğer  -b ve seçenekleri sağlanırsa, bir önceki başlatmadan gelen mesajları gösterecektir.  Aşağıda, son başlatma işlemi için systemd hizmet yöneticisini çağıran çekirdeği göstermektedir:

journalctl -b 0 

Aslında bu bilgiler zamanı geldiğinde hayat kurtarıcı olacaktır. Bu kısımları biraz kurcalamak her zaman faydalı olacaktır. Örneğin, açılış sırasında ethernet kartınızın aktif olma ve ip alma süreçlerine bakınız. 

İlk olarak ethernet kartınızın adını öğrenin.

networkctl

Sonrasında açılış sırasında ki süreçten ethernet kartınızı grep ile filtreleme yapınız.

journaltctl -b 0|grep ens33 

  Önyükleme işlemleri her zaman başarılı olmayabilir, grep komutu ile biraz mantık yürütüp filtreleme yapmak her zaman yardımcı olacaktır. Başlatma ve işletim sistemi tarafından yayınlanan diğer mesajlar /var/log/ dizini içindeki dosyalarda saklanır. Kritik bir hata meydana gelirse ve işletim sistemi, çekirdeği ve initramf‘leri yükledikten sonra başlatma işlemine devam edemezse, sistemi başlatmak ve ilgili dosya sistemine erişmek için alternatif bir önyükleme ortamı(LİVECD vb.) kullanılabilir. Ardından, /var/log/ altındaki dosyalar, önyükleme işleminin kesintiye uğramasına neden olan sebepler. aranabilir.

systemd’nin günlük mesajları ham metinde saklanmadığından, bunları okumak için journalctl komutu gerekir.

Yukarıda logları incelemekten bahsetsem de, bu farklı senaryolarda olabilir. Örneğin, sistemi ayağa kaldırmayı başaramadınız ancak içinden önemli dosyaları almanızda gerekebilir. O yüzden en azından yol göstermesi adına bundan bahsedelim. Aşağıda ki bir kaç adımı takip etmeniz yeterlidir.

  1. Linux ISO Live Dosyası (Aşağıdaki görselde Ubuntu Desktop ISO’su kullanılmıştır.)
  2. Sanal makina için, indirdiğiniz iso’yu gösterin. Fiziksel bir makina için indirdiğini isoyu USB veya CD’ye yazıp boot edin.

Her şey yolunda ise bir Grafik ekran sizi karşılayacaktır. Files kısmını açıp, Other Locations seçeneğini seçin. Artık tüm bölümleri görebilirsiniz. Boyutu düşük olan tahmin edeceğiniz gibi boot dizini. Diğerine tıkladığım anda, sisteme mount olacak ve kök dizine geçecektir. Bu işlem komut satırından da kolay bir şekilde yapılabilir. Ancak genele hitap etmek her zaman iyidir. 🙂

Artık istediğiniz dosyalarınızı kolay bir şekilde alabilirsiniz.

Hazır sistemi önyüklenebilir bir araç ile açmışken logları’da nasıl açabileceğimize bakalım. Bir terminal açalım ve diskin mount olduğu yola bakalım.

df -h 

journalctl komutu ile -D seçeneğini ekleyerek bir dizin yolu belirtip log dosyalarını okuyabiliriz. Yukarıda yolu bulduktan sonra devamında aşağıdaki görseldeki gibi /var/log/journal olarak yolun devamını ekleyip, Enter tuşuna basıyorum.

journalctl -D path 

Günlükleri açtıktan sonra, tüm kayıtları inceleyebilirsiniz. Shift + G tuş kombinasyonları yaparak en güncel zamandan incelemeye başlayabilirsiniz. 

grep ile filtreleme yaparak zamandan kazanabilirsiniz.

journactl kullanmanız için, systemd versiyonlarının uyması gerekmektedir. İnceleyeceğiniz sistemin ile aynı LiveCD kullanmak sorununuzu çözecektir.

101.3 Çalışma seviyelerini | Önyükleme hedeflerini değiştirin ve sistemi kapatın veya yeniden başlatın

Unix tasarım ilkelerini izleyen işletim sistemleri arasında ortak bir özellik ise, sistemin farklı işlevlerini kontrol etmek için ayrı süreçlerin kullanılmasıdır. Daemons  (arka plan program veya daha genel olarak hizmetler ) olarak adlandırılan bu süreçler, ağ uygulama hizmetleri (HTTP sunucusu, dosya paylaşımı, e-mail vb.) gibi işletim sisteminin altında yatan genişletilmiş özelliklerden de sorumludur. Linux monolitik bir çekirdek kullanmasına rağmen, işletim sisteminin birçok düşük seviye yönü, yük dengeleme ve güvenlik duvarı yapılandırması gibi arka plan programlarından etkilenir.

Hangi daemon (arka plan programı) aktif olması gerektiği sistemin amacına bağlıdır. Etkin servisler kümesi de çalışma zamanında değiştirilebilir olmalıdır, böylece tüm sistemi yeniden başlatmak zorunda kalmadan hizmetler başlatılabilir ve durdurulabilir. Bu sorunu çözmek için, her büyük Linux dağıtımı, sistemi kontrol etmek için bir tür hizmet yönetimi yardımcı programı sunar.

Hizmetler, kabuk komut dosyaları veya bir program ve onun destekleyici yapılandırma dosyaları tarafından kontrol edilebilir. İlk yöntem, System V veya yalnızca SysV olarak da bilinen SysVinit standardı tarafından uygulanır. İkinci yöntem systemd ve Upstart tarafından uygulanır. Tarihsel olarak, SysV tabanlı hizmet yöneticileri Linux dağıtımları tarafından en çok kullanılanlardı. Günümüzde, systemd tabanlı hizmet yöneticileri çoğu Linux dağıtımında daha sık bulunur. Hizmet yöneticisi, önyükleme işlemi sırasında çekirdek tarafından başlatılan ilk programdır, bu nedenle pıd’si (işlem kimlik numarası) her zaman 1’dir.

SysVinit

SysVinit tabanlı sistemlerde init , Linux çekirdeği yüklendikten sonra yürütülen ilk işlemdir. Linux çekirdeği boot işlemini gerçekleştirdikten sonra, her çalışma seviyesinin bilgileri için init programını veya dosyasını çalıştırır. Bunlar, donanımınızı başlatma, ağ kurma, grafik masaüstünüzü başlatma gibi bir çok  başlangıç ​​komut dosyalarıdır.

Bu program, /etc/init.d (bazı sürümlerde /etc/inittab) dosyasından gerekli yüklemeleri gerçekleştirir ve sistem aldığı bilgilerle belirtilen seviyede çalışır.

ls /etc/init.d

Çalışma seviyelerini ve ilişkili arka plan programlarını yönetmekten sorumlu program /sbin/init ‘dir. Linux işletim sistemi bilgisayarda başlatıldığı zaman ilk işlem dosyası olarak /sbin/init programı başlatılır./sbin/init başlatılacak diğer tüm işlemlerin başlangıcıdır.

ls -l /sbin/init 

Linux işletim sistemi 7 farklı kipte çalışmayı destekler. Bu çalışma kiplerinden ilki (runlevel 0 halt) olduğu gibi,  sonuncusu ise (runlevel 6 reboot) sistemin kendini yeniden yükleme durumudur. Diğer 5 seviye ise sistemin farklı biçimlerde açması anlamına gelmektedir. Aşağıda çalışma seviyeleri listelenmiştir.

Her çalışma düzeyini ayarlamak için init tarafından kullanılan komut dosyaları /etc/init.d/ dizininde saklanır. Her çalışma seviyesinin /etc/rc ile başlayan  ilişkili bir dizini vardır.

Hangi seviyede çalıştığınızı, terminalde runlevel komutuyla öğrenebilirsiniz.

runlevel 

Yukarıdaki çıktıdaki N harfi, son önyüklemeden bu yana çalışma seviyesinin değişmediğini gösterir. Örnekte, çalışma düzeyi 5, sistemin geçerli çalışma düzeyidir. 

Her bir RC dizini içerisinde açılış sırasında çalıştırılması gereken programların linkleri yer almaktadır. Örneğin, bizim için 5. çalışma seviyesi seçili ise rc5.d içerisinde yer alan servislerin linkleri tek tek çalıştırılacaktır. 

ls -l /etc/rc5.d/

İhtiyacınıza göre seviyeler arasında kolaylıkla geçiş yapabilirsiniz. Örneğin, bir çalışma seviyesi ağ oluşturmayı ve grafik masaüstünü başlatabilirken(runlevel5), başka bir çalışma seviyesi ağ oluşturmayı devre dışı bırakıp grafik masaüstünü atlayabilir(runlevel3). Bu, farklı hizmetleri manuel olarak başlatmadan ve durdurmadan, tek bir komutla “grafik masaüstü modun’dan “ağ bağlantısı olmadan metin konsolu moduna” geçebileceğiniz anlamına gelir.

Bunun için, hangi seviyede çalışmak istediğinizi belirtmeniz yeterlidir. 

sudo init 3

Komutu çalıştırdıktan sonra, metin konsoluna yani çalışma seviyesi 3’e döndüğünü görebilirsiniz.

Eski grafik arayüzüne getirmek için tekrar 5. çalışma seviyesine geçebilirsiniz.

Çalışma seviyesini değiştirmek için init veya telinit  komutunu kullanabilirsiniz.

Aynı şekilde sistem bakım modu olan level 1’e göz atmakta fayda var.

SystemV konusuna değişmişken servislerin nasıl yönetildiğinden bahsetmeden olmaz. Günümüzde bildiğiniz gibi, son dağıtımlar Systemd sistem yöneticisini kullanır. Ancak eski dağıtımlar geçmişte  SysVinit sistem yöneticisini kullanıyordu. Servisleri yönetme komutlarını öğrenmeden önce, kullanmakta olduğunuz sistem yöneticisini bilmelisiniz. Mevcut sistem yöneticinizi belirlemenin en kolay yolu “pstree” komutunu kullanmak ve sisteminizde çalışan ilk işlemi kontrol etmektir.

pstree|head -1 

Yukarıda eğer “systemd” görürseniz, şu anda systemd kullanıyorsunuz demektir. Ancak “ init ” görüyorsanız SysVinit kullanıyorsunuz demektir.

Biz, SysVinit sistem yöneticisini kullandığımızı varsayarak, neler yapabileceğimize bakalım. Bir SystemV init sistemindeyken Linux’ta hizmetleri listelemenin en kolay yolu, “service” komutunu ve ardından “–status-all” seçeneğini kullanmaktır. Bu şekilde, alfabetik sıralamaya göre sisteminizde eksiksiz bir hizmet listesi sunulacaktır.

service --status-all 

Gördüğünüz gibi, her hizmetten önce parantez içindeki semboller listelenmiştir. Bu semboller şu anlama gelir:

Sistemin bazı hizmetler çalışıp çalışmadığı anlayamaması, tamamen init betiğinin uygulanmasına bağlıdır. Bazı betiklerde, “status” komutunun kullanmadığı için bu tür durumlar olabilir.

Mevcut hizmet listesini listelemenin bir başka yolu da, bir Linux sistemindeki tüm komut dosyalarını içeren /etc/init.d dizinine bakmaktır.

ls -l /etc/init.d/* 

Servisleri listelemeyi öğrendiğimize göre, şimdi bunları nasıl yönetebileceğimize bakalım. İlk olarak hangi aksiyonlarda kullanabileceğimizi anlamak için aşağıdaki listeyi okuyalım.

SubcommandUsed To
{service} statusGeçerli hizmet durumunu yazdırın.
{service} startHizmeti hemen başlatın.
{service} stopHizmeti hemen durdurun.
{service} restartHizmeti hemen yeniden başlatın.
{service} reloadHizmet çalışırken yapılandırma dosyalarını yeniden okuyun.

Özel bir durum olarak, servisi önce stop komutu, ardından start komutunu otomatik olarak aşağıdaki komut satırı ile gerçekleştirebilirsiniz.

sudo service <service_name> --full-restart 

Yukarıdaki seçenekleri bir servis üzerinde kolayca uygulayabilirsiniz. Aşağıdaki cron servisi üzerinde örnekleme yapılmıştır.

cron çeşitli Unix ve Unix benzeri sistemlerde iş düzenlemeye yarayan bir komuttur.

servis durdurma

crontab hizmetini durdurmak için şunu girin:

service cron stop

servis başlatma

crontab hizmetini başlatmak için şunu girin:

service cron start

servis durumu

corntab hizmetinin mevcut durumunu almak için şunu girin:

service cron status

servis yeniden başlatma

cron hizmetini yeniden başlatmak için şunu girin:

service cron restart

systemd

systemd şu anda,  systemd tarafından birimler olarak adlandırılan sistem kaynaklarını ve hizmetlerini yönetmek için en yaygın kullanılan araçlar kümesidir. Bir birim, bir ad, bir tür ve karşılık gelen bir yapılandırma dosyasından oluşur. Örneğin, Red Hat tabanlı dağıtımlarda bir httpd sunucu (Apache web sunucusu gibi) işlemi için httpd.service olacak ve yapılandırma dosyası da çağrılacaktır. Ancak Debian tabanlı dağıtımlarda bu birim  Apache2.service olarak adlandırılır.

  1. service = Başlatılabilen, kesilebilen ve yeniden yüklenebilen aktif sistem kaynakları için en yaygın birim türü.
  2. socket = Soket birimi türü, bir dosya sistemi soketi veya bir ağ soketi olabilir. Tüm soket birimleri, soket bir istek aldığında yüklenen ilgili bir hizmet birimine sahiptir.
  3. device = Bir aygıt birimi, çekirdek tarafından tanımlanan bir donanım aygıtıyla ilişkilendirilir. Bir cihaz, yalnızca bu amaç için bir udev kuralı varsa, sistemd birimi olarak alınacaktır. Udev kuralından gelen özelliklerin cihaz birimi için parametre olarak kullanılabilmesi koşuluyla, belirli donanım algılandığında yapılandırma bağımlılıklarını çözmek için bir cihaz birimi kullanılabilir.
  4. mount = Bir bağlama birimi, /etc/fstab dosya sistemindeki bir girişe benzer şekilde bir bağlama noktası tanımıdır.
  5. automount = Bir otomatik bağlama birimi de dosya sisteminde bir bağlama noktası tanımıdır, ancak otomatik olarak monte edilir. Her otomatik bağlama birimi, otomatik bağlama bağlama noktasına erişildiğinde başlatılan karşılık gelen bir bağlama birimine sahiptir.
  6. target = Hedef birim, tek bir birim olarak yönetilen diğer birimlerin gruplandırılmasıdır.
  7. snapshot = Anlık görüntü birimi, sistem yöneticisinin kaydedilmiş bir durumudur (her Linux dağıtımında bulunmaz).

Systemd birimlerini kontrol etmek için ana komut systemctl’dir. Komut systemctl, birim etkinleştirme, devre dışı bırakma, yürütme, kesinti, izleme vb. İle ilgili tüm görevleri yürütmek için kullanılır. Systemctl aktif olarak kullanıldığı için bu kısımda biraz detaya girelim.

Systemctl Tüm Servislerin İncelenmesi

systemd servislerini yönetmek, durdurmak, başlatmak ve durumlarını kontrol etmek gibi işlemlerin yapılmasını sağlayan ana komuttur.  Günümüzde bildiğiniz gibi, son dağıtımlar Systemd sistem yöneticisini kullanır. Ancak eski dağıtımlar geçmişte  SysVinit sistem yöneticisini kullanıyordu. Servisleri listeleme komutlarını öğrenmeden önce, kullanmakta olduğunuz sistem yöneticisini bilmelisiniz. Mevcut sistem yöneticinizi belirlemenin en kolay yolu “pstree” komutunu kullanmak ve sisteminizde çalışan ilk işlemi kontrol etmektir.

pstree|head -1 

Yukarıda eğer “systemd” görürseniz, şu anda systemd kullanıyorsunuz demektir. Ancak “ init ” görüyorsanız SysVinit kullanıyorsunuz demektir.

Artık systemd sistem yöneticisini kullandığımıza göre neler yapabileceğimize bakalım. systemctl komutunu herhangi bir argüman olmadan çalıştırdığınızda, yüklenen tüm systemd birimlerinin bir listesini görüntüler.

systemctl

Ancak bu çok karmaşık gelecektir. Biraz daha süzmeye çalışalım. Sisteminize yüklenen tüm hizmetleri aktif, pasif, başarısız durumlarını listelemek için –type parametresini kullanın.

systemctl --type=service

Şimdi de, hem çalışan hem de çıkmış olan yüklü ancak etkin tüm hizmetleri listelemek için , aşağıdaki gibi “active –state=active”  seçeneği eklemelisiniz. 

systemctl --type=service --state=active

Komutu yürüttükten sonra, sisteminizde tüm aktif çalışan servisleri inceleyebiliyoruz. Akabinde space tuşuna basıp en aşağı indiğimiz zaman, 59 yüklü birimin listelendiğini görüyoruz.

active exited yazanlarının bir sorun olduğunu düşünmeyin. Örneğin, birim dosyası ayarları “RemainAfterExit=true,” ayarlanırsa çıkan bir hizmet  active olarak rapor edilir. Örnek: Ubuntu sunucumda ufw hizmet, sistem başlangıcında güvenlik duvarını başlatır, görevi gerçekleştirir ve ardından çıkan bir hizmettir. Sonuçta, güvenlik duvarı yerinde olur ve gayet iyi çalışır.

Çalışan tüm servisleri (yani tüm yüklü ve aktif olarak çalışan servislere) görmek için aşağıdaki komutu çalıştırın.

Eğer aşağıdaki komutu kullanırsanız, çalışıp çıkan yani exited olan servisler görülemez.

systemctl --type=service --state=running 

Komutu yürüttükten sonra, space tuşuna basıp en aşağı indiğimiz zaman, 36 yüklü birimin listelendiğini görüyoruz.

Etkin hizmetleri listelemek için, aşağıdaki komutu çalıştırın.

Bir birim enabled ise, sistemin başlangıçta onu başlatacağı anlamına gelir. 

systemctl list-unit-files --state=enabled

Etkin olmayan hizmetleri listelemek için, aşağıdaki komutu çalıştırın.

systemctl list-unit-files --state=disabled 

Systemctl Ayrıntılı Servis Yönetimi

systemctl kullanarak , yönetilen adanmış sunucudaki herhangi bir systemd hizmetinin durumunu kontrol edebiliriz . Durum komutu, bir hizmet hakkında bilgi sağlar. Ayrıca, çalışma durumunu veya neden çalışmadığına veya bir hizmetin istenmeden durdurulup durdurulmadığına ilişkin ayrıntıları da listeler.

systemctl status ufw.service

Bu birim, .service uzantısı olmadan çağrılabilir. systemctl, .service sonekine sahip dosyaları arayacağı için komut bu şekilde de kullanılabilir.

systemctl start ufw 

Belirli bir hizmeti başlatın.

systemctl start ufw

Belirli bir hizmeti durdurun.

systemctl stop ufw

Çalışan bir hizmet , aşağıdaki komut kullanılarak manuel olarak durdurulup başlatılmasını önlemek için restart komutu kullanılarak yeniden başlatılabilir.

sudo systemctl restart ssh

Herhangi bir yapılandırma değişikliği yaptıysanız, uygulamak için bir hizmeti yeniden başlatmamız gerekmez. Bunun yerine, çalışan hizmette herhangi bir değişikliği uygulayan hizmeti yeniden başlatmak için yeniden yükle komutunu kullanabiliriz.

Her servis yeniden yüklenemez. Bazı servisler için bu geçerli değildir.

sudo systemctl reload ssh

İki komuttan hangisini kullanmamız gerektiğinden emin değilsek, yeniden yükle-veya yeniden başlat komutunu kullanarak bunu bizim için otomatik olarak belirleyecek ek bir seçenek var .

sudo systemctl reload-or-restart ssh 

Bir sunucuda çalıştırmak için gereken hizmetlerin sayısı nedeniyle bunları manuel olarak başlatmak uygun bir yöntem değildir. Etkinleştirme ve devre dışı bırakma komutlarının devreye girdiği yer burasıdır. Sistem başlatıldığında veya yeniden başlatıldığında systemd hizmetinin nasıl yanıt vereceğini değiştirebiliriz. Hizmet ayarlarını günceller ve ardından sisteme, sunucu açıldığında belirli hizmetin otomatik olarak başlatılması gerektiğini söyler. 

Hizmeti başlatmak için kullanacağınız servis adını yazıp, aşağıdaki komutu satırını çalıştırmanız yeterlidir.

sudo systemctl enable ufw

Hizmeti durdurmak için kullanacağınız servis adını yazıp, aşağıdaki komutu satırını çalıştırmanız yeterlidir.

sudo systemctl disabled ufw

Devre dışı bırakma komutu, bir hizmetin önyükleme sırasında otomatik olarak başlatılmasını engelleyerek manuel olarak başlatılana kadar devre dışı bırakır.

Upstart

Upstart, işlemlerin paralel başlatılmasını kolaylaştırmak için Ubuntu Linux dağıtımı için geliştirilmişti. Ancak Ubuntu, Upstart’tan systemd’ye geçtiği 2015’ten beri Upstart’ı kullanmayı bıraktı. Yine de bilgimiz olmasında fayda var.

 Upstart tarafından kullanılan başlatma komut dosyaları /etc/init/ dizininde bulunur. Sistem servisleri, servislerin mevcut durumunu ve varsa PID numaralarını da gösteren initctl list komutu ile listelenebilir .

initctl list

Her Upstart eyleminin kendi bağımsız komutu vardır. Örneğin, altıncı bir sanal terminal başlatmak için start komutu kullanılabilir.

start tty6

Bir kaynağın mevcut durumu status komutla doğrulanabilir.

status tty6

Ve bir hizmetin kesilmesi stop komutla yapılır.

 stop tty6

Kapatma ve Yeniden Başlatma

   Sistemi kapatmak veya yeniden başlatmak için kullanılan çok geleneksel olan komutumuzun adı tabi ki shutdown. shutdown komutu, kapatma işlemine ek işlevler ekler, oturum açmış tüm kullanıcıları kabuk oturumlarında bir uyarı mesajıyla otomatik olarak bilgilendirir ve yeni oturum açmalar engellenir. shutdown komutu, SysV veya systemd prosedürlerine aracı görevi görür, yani sistem tarafından benimsenen hizmetler yöneticisinde ilgili eylemi çağırarak istenen eylemi gerçekleştirir.

Kapatma gerçekleştirildikten sonra, tüm işlemler SIGTERM sinyalini, ardından SIGKILL sinyalini alır, ardından sistem kapanır veya çalışma seviyesini değiştirir. Varsayılan olarak, -h veya -r seçenekleri kullanılmadığında, sistem çalışma düzeyi 1’e, yani tek kullanıcı moduna geçer.

Biraz düşünürsek, en azından loglar’dan bir şeyler görebiliriz. journalctl aracı ile sistem önyükleme iletilerinden 1 öncekini günlük kayıtlarını açalım.

journalctl -b 1

 Varsayılan kapatma seçeneklerini değiştirmek için komut aşağıdaki sözdizimiyle yürütülmelidir:

shutdown [option] time [message]

 Zaman parametresi, aşağıdaki biçimleri kabul ederek istenen eylemin ne zaman gerçekleştirileceğini tanımlar.

Shutdown komutunu herhangi bir parametre vermeden tetiklerseniz, sunucu 1 dakika sonra kapatılır.

shutdown 12:33
shutdown +5
shutdown 0
shutdown -r

 -r  now veya  0 = Sunucunuzu hemen yeniden başlatır.

shutdown -r 0

-c kapatma işlemlerini iptal eder.

shutdown -c

Systemctl komutu, systemd kullanan sistemlerde makineyi kapatmak veya yeniden başlatmak için de kullanılabilir. Sistemi yeniden başlatmak için systemctl reboot komutu kullanılmalıdır. Sistemi kapatmak için  ise systemctl poweroff komutu kullanılmalıdır. Sıradan kullanıcılar bu tür prosedürleri gerçekleştiremediğinden, her iki komutun da çalışması için kök ayrıcalıkları gerekir.

systemctl reboot
systemctl poweroff

Tüm bakım faaliyetleri sistemin kapatılmasını veya yeniden başlatılmasını gerektirmez. Ancak, sistemin durumunu tek kullanıcı moduna değiştirmek gerektiğinde, oturum açmış kullanıcıları, faaliyetlerinin aniden sona ermesinden zarar görmemeleri için uyarmak önemlidir.

   Sistemi kapatırken veya yeniden başlatırken kapatma komutunun yaptığına benzer şekilde, wall komutu oturum açmış tüm kullanıcıların terminal oturumlarına mesaj gönderebilir. Bunu yapmak için, sistem yöneticisinin yalnızca bir dosya sağlaması veya mesajı doğrudan wall komutuna parametre olarak yazması gerekir.

wall "yazılacak bilgi mesaj" 

who komutu, sistem oturum açmış olan kullanıcıları biçimlendirilmiş bir liste şeklinde sunar. Buradaki çıktılardan yola çıkarak kullanıcılara write komutu ile toplu yerine bireysel olarak mesaj gönderebiliriz.

İlk olarak mesaj göndereceğimiz kişiyi bulmak için, who komutunu çalıştıralım.

who

Şimdi ise, write komutunu kullanıcı adını, terminal adını yazıp çalıştırdıktan sonra. Göndereceğiniz mesajı yazmanız yeterlidir.

Terminal adı tty olanlar sunucu konsolundan, pts yazan kullanıcılar ise uzaktan bağlantı olduğunu ifade etmektedir.

write mehmet.oz pts/0 

LPIC-1 ilk modülünde, Sistem Mimarisi, Donanımlar, Kernel, Sistem yöneticiler, Sistem çalışma seviyeleri gibi bir çok konularına değindik. Umarım faydalı olmuştur. LPIC-1 ikinci modülünde görüşmek dileğiyle. Sağlıcakla kalın.

Exit mobile version