Linux Botlar

Görünüşe göre, önyükleme işleminde pek bir şey yok:

1. Bir önyükleyici, üzerinde çekirdek görüntüsünü bulur. disk, belleğe yükler ve başlatır.
2. Çekirdek cihazları ve onun sürücüleri başlatmak.
3. Çekirdek, kök dosyayı bağlarsystem.
4. Çekirdek Program Adında init başlar.
5. init hareket Süreçlerin kalan ayarlar.
6. önyükleme sırası parçası olarak başlar init son Süreçler giriş için izin verir.

Önyükleme sürecinin her aşamasının belirlenmesi, önyükleme sorunlarını çözme ve system bir bütün olarak. Başlamak için, başlangıç ​​ekranı olan veya bilgisayarın açılışta kendi kendini sınamasını yaptıktan sonra hangi işlemin yapıldığını soran önyükleme yükleyicisini sıfırlayın. system koşmak. Bir seçim yaptıktan sonra, önyükleyici aşağıdakileri çalıştırır: Linux çekirdek, kontrolün verilmesi system çekirdeğe.

Başka bir yerde bu kitapta hangi bu makaleden alınmıştır çekirdeğin ayrıntılı bir tartışma vardır. Bu makalede yer almaktadır Çekirdek başlatma aşaması, çekirdeğin, üzerinde bulunan donanımla ilgili bir dizi mesaj yazdırdığı aşama system. Çekirdek, kernelin bağlandığını bildiren bir mesaj görüntüledikten hemen sonra init'e başlar. kök dosyasystem:

VFS: Atlı kök (ext2 dosyalarısystem) Sadece oku.

Kısa süre sonra, init'in başlamasıyla ilgili bir mesaj göreceksiniz, ardından system hizmet başlangıç ​​mesajları ve son olarak bir tür giriş istemi alırsınız.

NOT üzerinde katolik kardinal şapkası Linux, başlangıç ​​notu özellikle açıktır, çünkü sizi Red Hat'e "hoş geldiniz" Linux. ” Bundan sonraki tüm mesajlar, ekranın sağ tarafında parantez içinde başarı veya başarısızlık gösterir.

o olan önyükleme sırası bir parçası olduğundan init Bu bölümün çoğu, en kontrole sahip.
init

init ile ilgili özel bir şey yoktur. Bu, tıpkı diğerleri gibi bir programdır. Linux systemve onu / sbin içinde diğerlerinin yanında bulacaksın system ikili dosyalar. İnit'in temel amacı, belirli bir sıradaki diğer programları başlatmak ve durdurmaktır. Bilmeniz gereken tek şey bu dizinin nasıl çalıştığıdır.

Birkaç farklı varyasyon var, ancak çoğu Linux dağıtımlar kullanır System V stili burada tartışıldı. Bazı dağıtımlar BSD init'e benzeyen daha basit bir sürüm kullanır, ancak bununla karşılaşmanız pek olası değildir.

çalışma_seviyeleri

Herhangi bir zamanda bir Linux system, belirli bir temel işlem kümesi çalışıyor. Bu durumu machine, çalışma seviyesi olarak adlandırılır ve 0'dan 6'ya kadar bir sayı ile gösterilir. system zamanının çoğunu tek bir çalışma seviyesinde geçirir. Ancak, kapattığınızda machine down, init, sonlandırmak için farklı bir çalışma düzeyine geçer. system hizmetleri düzenli bir şekilde ve çekirdeğe durmasını söylemek için. Yine başka bir çalışma seviyesi, tek kullanıcı içindir mode, Sonra tartışılacak.

Çalışma seviyeleri hakkında bilgi edinmenin en kolay yolu init yapılandırma dosyasını /etc/inittab.conf dosyasını incelemektir. Aşağıdaki gibi bir satır arayın:

id: 5: initdefault:

Bu çizgi, default çalışma seviyesi system 5'tir. inittab dosyasındaki tüm satırlar bu formu alır, dört alan iki nokta üst üste ile ayrılır ve aşağıdaki sırada yer alır:
# Benzersiz bir tanımlayıcı (kısa bir dize, bu tür önceki örnekte kimliği gibi)
# Uygulanabilir çalışma seviyesi numara (lar)
# İnit'in yapması gereken eylem (önceki örnekte, eylem, default çalışma seviyesi 5'e kadar)
# Bir komut yürütmek için (isteğe bağlı)

Önceki init'te yürütülecek komut yokdefault Örneğin, bir komutun ayarlanması bağlamında anlamsız default çalışma seviyesi. Bunun gibi bir çizgi görene kadar inittab'da biraz daha aşağıya bakın:

l5: 5: wait: 5 /etc/rc.d/rc

Bu çizgi çoğu system rc * .d ve init.d dizinleri aracılığıyla yapılandırma ve hizmetler. İnit'in 5. çalışma seviyesindeyken /etc/rc.d/rc 5 adlı bir komutu yürütecek şekilde ayarlandığını görebilirsiniz. Bekleme eylemi, init'in komutu ne zaman ve nasıl çalıştıracağını söyler: enterçalıştırın ve daha sonra başka bir şey yapmadan önce bu komutun bitmesini bekleyin.

İçinde birkaç farklı eylem var addbaşlatmadefault ve özellikle güç yönetimiyle ilgili olarak bekleyin ve inittab (5) kılavuz sayfası size bunların hepsini anlatır. Karşılaşma olasılığınız en yüksek olanlar aşağıdaki bölümlerde açıklanmaktadır.

respawn

Yeniden doğma eylemi, init'in takip eden komutu çalıştırmasına ve komut çalışmayı bitirirse yeniden çalıştırmasına neden olur. inittab dosyanızda muhtemelen şu satıra benzer bir şey göreceksiniz:

1: 2345: respawn: / sbin / mingetty tty1

Getty Programları giriş istemleri sağlayın. önceki satır, gördüğünüz bir ALT-CONTROL-ALT-F1 veya F1 bastığınızda (/ dev / tty1) ilk sanal konsol içindir. Oturumu sonra respawn eylem giriş istemi geri getirir.

ctrlAltdel

The ctrlaltdel eylemi ne olduğunu kontrol eder system sanal konsolda CONTROL-ALT-DELETE tuşlarına bastığınızda yapar. Çoğunda systems, bu kapatma komutunu kullanan bir tür yeniden başlatma komutudur.

sysinit

Sisinit eylemi, init'in başlamadan önce çalışması gereken ilk şeydir. enterherhangi bir çalışma seviyesinde.

Nasıl çalışma seviyesinde Süreçler başlar

Artık nasıl başlayacağınızı öğrenmeye hazırsınız. system hizmetler, oturum açmanıza izin vermeden hemen önce. Bu inittab satırını daha önce hatırlayın:

l5: 5: wait: 5 /etc/rc.d/rc

Bu küçük hat diğer birçok Programlar tetikler. RC çalıştırmak komutları duruyor ve insanlar scriptler, programlar veya hizmetler gibi komutları bakın Hear olacaktır. Peki, nerede BU komutlar zaten vardır?

Çalışma seviyesi 5 için, bu örnekte komutlar muhtemelen /etc/rc.d/rc5.d veya /etc/rc5.d dizinindedir. Çalışma seviyesi 1 rc1.d kullanır, çalışma seviyesi 2 rc2.d kullanır vb. Aşağıdakileri bulabilirsiniz items rc5.d dizininde:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

Komut GMT komutları çalıştırarak bu dizindeki 5 rc çalışma seviyesi Programları başlar:

S10sysklogd ev
S12kerneld ev
S15netstd_init ev
S18netbase ev
...
S99sshd ev

Her komuttaki start bağımsız değişkenine dikkat edin. Komut adındaki S, komutun başlangıçta çalışması gerektiği anlamına gelir modeve sayı (00'dan 99'a kadar), rc'nin komutu sıralamada nerede başlattığını belirler.

komutlarını .d rc * genellikle / sbin veya / usr / sbin That Başlat Programlar komut kabuk. Normalde,-komutların biri aslında az ya da çağrı cihazı başka bir program ile komut bakarak ne olduğunu anlamaya.

Bu hizmetlerden birini elle başlatabilirsiniz. Örneğin, httpd Web sunucusu programını manuel olarak başlatmak istiyorsanız, S99httpd start komutunu çalıştırın. Benzer şekilde, hizmetlerden birini öldürmeniz gerekirse machine açıksa, komutu rc * .d dizininde durdurma bağımsız değişkeniyle çalıştırabilirsiniz (örneğin S99httpd durdurma).

Bazı rc*.d dizinleri K ile başlayan ("kill" için veya durdurmak için) komutlar içerir. mode). Bu durumda rc, komutu start yerine stop bağımsız değişkeniyle çalıştırır. Kapatan çalışma seviyelerinde K komutlarıyla karşılaşmanız muhtemeldir. system aşağı.

Addhizmetleri alma ve kaldırma

Eğer istersen addrc*.d dizinlerindeki hizmetleri silmek, silmek veya değiştirmek için içerideki dosyalara daha yakından bakmanız gerekir. Uzun bir listeleme şöyle bir yapı ortaya çıkarır:

lrwxrwxrwx. . . S10sysklogd -> ../init.d/sysklogd
lrwxrwxrwx. . . S12kerneld -> ../init.d/kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase
...

Bir rc*.d dizinindeki komutlar aslında bir init.d dizinindeki, genellikle /etc veya /etc/rc.d içindeki dosyalara yönelik sembolik bağlantılardır. Linux dağıtımlar, tüm çalışma seviyeleri için aynı başlangıç ​​komut dosyalarını kullanabilmeleri için bu bağlantıları içerir. Bu sözleşme hiçbir şekilde bir gereklilik değildir, ancak çoğu zaman organizasyonu biraz daha kolaylaştırır.

init.d dizinindeki komutlardan birinin belirli bir çalışma düzeyinde çalışmasını önlemek için, uygun rc * .d dizinindeki sembolik bağı kaldırmayı düşünebilirsiniz. Bu işe yarar, ancak bir hata yaparsanız ve bağlantıyı tekrar yerine koymanız gerekirse, bağlantının tam adını hatırlamakta sorun yaşayabilirsiniz. Bu nedenle, rc * .d dizinlerindeki bağlantıları kaldırmamalısınız, bunun yerine, add bağlantı adının başına aşağıdaki gibi bir alt çizgi (_) ekleyin:

mv S99httpd _S99httpd

Başlatma sırasında, rc _S99httpd'yi yok sayar çünkü S veya K ile başlamaz. Ayrıca, orijinal ad hala açıktır ve eğer bir zorluk içindeyseniz ve elle başlatmanız gerekiyorsa, komuta hızlı bir şekilde erişebilirsiniz.

için add init.d dizininde diğerleri gibi bir komut dosyası oluşturmalı ve ardından doğru rc * .d dizininde sembolik bir bağlantı oluşturmalısınız. Bir komut dosyası yazmanın en kolay yolu, zaten init.d'de bulunan komut dosyalarını incelemek, anladığınızın bir kopyasını oluşturmak ve kopyayı değiştirmektir.

Ne zaman addbir hizmet oluştururken, hizmeti başlatmak için önyükleme sırasında uygun bir yer seçtiğinizden emin olun. Hizmet çok erken başlarsa, başka bir hizmete bağımlılık nedeniyle çalışmayabilir. Temel olmayan hizmetler için çoğu systems administrators, 90'larda sayıları tercih ediyor, bununla birlikte gelen hizmetlerin çoğundan sonra system.

Linux dağıtımlar genellikle rc * .d dizinlerindeki hizmetleri etkinleştirmek ve devre dışı bırakmak için bir komutla birlikte gelir. Örneğin, Debian'da komut şudur: update-rc.d ve Red Hat'te Linux, komut chkconfig'dir. Grafiksel kullanıcı arayüzleri de mevcuttur. Bu programları kullanmak, başlangıç ​​dizinlerini tutarlı tutmaya yardımcı olur ve yükseltmelere yardımcı olur.

İPUCU: En yaygın olanlardan biri Linux installSorun, açılıp kapanan, yanlış yapılandırılmış bir XFree86 sunucusudur. system konsollarda kullanılamaz. Bu davranışı durdurmak için tek kullanıcıya önyükleme yapın mode ve çalışma seviyesi veya çalışma seviyesi hizmetlerinizi değiştirin. rc*.d dizinlerinizde veya /etc/inittab dizininizde xdm, gdm veya kdm içeren bir şey arayın.

Init denetleme

Ara sıra, init'e çalışma seviyelerini değiştirmesini, inittab dosyasını yeniden okumasını veya sadece shut down the system. Çünkü init her zaman bir system, işlem kimliği her zaman 1'dir.

Siz kereviz ile init CAN kontrolü. Eğer runlevel 3 geçmek istiyorsanız Örneğin, bu komutu kullanın:

telinit 3

Çalışma seviyeleri arasında geçiş yaparken, init, yeni çalışma seviyesi için inittab dosyasında olmayan işlemleri sonlandırmaya çalışır. Bu nedenle çalışma seviyelerini değiştirirken dikkatli olmalısınız.

Zaman gerekiyor add veya yeniden doğma işlerini kaldırın veya inittab dosyasında herhangi bir değişiklik yapın, init'e değişikliği bildirmeli ve dosyayı yeniden okumasını sağlamalısınız. Bazı insanlar init'e bunu yapmasını söylemek için kill -HUP 1'i kullanır. Bu geleneksel yöntem, doğru yazdığınız sürece Unix'in çoğu sürümünde çalışır. Ancak, şu telinit komutunu da çalıştırabilirsiniz:

telinit q

Tek kullanıcıya geçmek için telinit s de kullanabilirsiniz. mode.

Kapatma

init ayrıca system kapanır ve yeniden başlatılır. Doğru yol shut down a Linux machine, kapatma komutunu kullanmaktır.

Kapatmayı kullanmanın iki temel yolu vardır. Durdurursan system, kapatır macaşağı iner ve aşağı çeker. Yapmak machine hemen durdurun, şu komutu kullanın:

shutdown-h artık

Çoğunda modern macmakul derecede yeni sürümleriyle parlıyor Linux, bir durma gücü keser machine. Ayrıca yeniden başlatabilirsiniz. machine. Yeniden başlatma için -h yerine -r kullanın.

Kapatma işlemi birkaç saniye sürer. Asla sıfırlamamalı veya kapatmamalısınız. macbu aşamada hine.

Önceki örnekte, şimdi shut down. Bu argüman zorunludur, ancak onu belirtmenin birçok yolu vardır. Eğer istersen macGelecekte bir ara aşağı inmek için bir yol, + n kullanmaktır, burada n, kapatmanın işini yapmadan önce beklemesi gereken dakika sayısıdır. Diğeri için options, kapatma (8) kılavuz sayfasına bakın.

Yapmak için system 10 dakika içinde yeniden başlatın, bu komutu çalıştırın:

shutdown-r + 10

On Linux, kapatma, oturum açan herkesi bilgilendirir. macHine düşüyor, ancak çok az gerçek iş yapıyor. Şu andan farklı bir zaman belirtirseniz, kapatma /etc/nologin.d adlı bir dosya oluşturur. Bu dosya mevcut olduğunda, system süper kullanıcı dışında herhangi birinin oturum açmasını yasaklar.

Ne zaman system kapanma süresi nihayet gelir, kapatma init'e durma için çalışma seviyesi 0'a ve yeniden başlatma için çalışma seviyesi 6'ya geçmesini söyler. Ne zaman başlar enters 0 veya 6 çalışma seviyesi, aşağıdakilerin tümü gerçekleşir, bu da rc0.d ve rc6.d içindeki komut dosyalarına bakarak doğrulayabilirsiniz:

1. init İşte bu (başka bir çalışma seviyesine geçerken olarak Would) mümkün olan her süreci öldürür.

# İlk rc0.d / rc6.d komutları çalışır, kilitlenir system dosyaları yerine yerleştirmek ve kapatma için diğer hazırlıkları yapmak.
# Sonraki rc0.d/rc6.d komutları tüm dosyaların bağlantısını kesersystemkök dışında.
# Diğer rc0.d/rc6.d komutları kök dosyayı yeniden bağlarsystem Sadece oku.
# Daha fazla rc0.d/rc6.d komutu, tampondaki tüm verileri dosyaya yazarsystem senkronizasyon programı ile.
# Son rc0.d / rc6.d komutları yeniden başlatma, durdurmak veya poweroff program ile yeniden başlatın veya durdurmak için kernele söylemek.

Yeniden başlatma ve durdurma programları her çalışma seviyesi için farklı davranır ve potansiyel olarak karışıklığa neden olur. Tarafından default, bu programlar -r veya -h ile kapatmayı çağırır options, ama eğer system halihazırda durdurma veya yeniden başlatma çalışma seviyesinde ise, programlar çekirdeğe kendisini hemen kapatmasını söyler. Eğer gerçekten sesini kapatmak istiyorsan macaceleyle aşağı inin (düzensiz bir kapatmadan kaynaklanan olası hasarları göz ardı ederek), -f seçeneğini kullanın.

Teknolojiye tutkulu, 2006 yılından beri StealthSettings.com'da yazıyorum. macOS, Windows ve Linux işletim sistemlerinde geniş deneyimim var, aynı zamanda programlama dilleri ve blog platformları (WordPress) ile online mağazalar için (WooCommerce, Magento, PrestaShop) bilgi sahibiyim.

Leave a Comment