Linux Boots

olarak çıkıyor, önyükleme işlemi için fazla bir şey yok:

1. Bir önyükleyici, diskte çekirdek görüntüsünü bulur belleğe yükler ve başlatır.
2. Çekirdek cihazları ve onun sürücüleri başlatmak.
3. The kernel mounts the root filesistem.
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ında belirlenmesi önyükleme sorunları gidermek ve bir bütün olarak sistemin anlamada ölçülemez. CYBE açılışta kendini sınama, çalıştırmak için hangi işletim sistemi sonra bilgisayarı başlatmak sıfıra yılında önyükleyici üzerine, başlangıç ​​ekranı Hangi ya da almak isteyecek için soran yok. Bir seçim yaptıktan sonra, önyükleyici çekirdeğe sisteminin kontrolü Handing, Linux çekirdeği çalışır.

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ıÇekirdek sistemde donanım mevcut hakkında bir sürü mesaj yazdırır sahne. Çekirdek bu çekirdek monte yitirmiş ilan eden bir mesaj görüntüler hemen sonra init başlar kök filesistem:

VFS: Atlı root (ext2 filesystem) readonly.

Kısa bir süre sonra, sistem hizmeti başlatma mesajları ile TAKİP init başlangıç ​​hakkında bir mesaj görecek, ve nihayet bir giriş Bazı tür istemi olsun.

NOT üzerinde Red Hat Linux, Init notu o size "Memnuniyetle" Çünkü, özellikle açıktır "Red Hat Linux." Tüm iletiler daha sonra 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 hakkında özel bir şey yok. Bu sadece Linux sistemi diğerleri gibi bir program olduğunu ve diğer sistem ikililer birlikte / sbin içinde bulacaksınız. init temel amacı başlatmak ve belirli bir sırayla diğer Programları durdurmaktır. Bu dizi nasıl çalıştığını bilmek zorunda tek şey.

There are a few different variations, but most Linux distributions use the System V style discussed here. Some distributions use a simpler version that resembles the BSD init, but you are unlikely to encounter this.

çalışma_seviyeleri

Bir Linux sistemi üzerinde Any Given zamanda, Süreçlerinin Un belirli baz seti çalışıyor. Makinenin Bu durum ITS çalışma seviyesi olarak adlandırılan edilir ve içinden 0 bir sayı 6 ile ifade edilir. Sistem tek bir çalışma seviyesinde CYBE çoğu zaman harcıyor. aşağı makineyi kapattı Ancak, init yılında sistem hizmetleri için farklı bir çalışma seviyesine geçer düzenli moda sona erdi ve durdurmak için çekirdek anlatmak için. Yine başka bir çalışma seviyesi daha sonra tartışılacaktır tek kullanıcı modu içindir.

The easiest way to get a handle on runlevels is to examine the init configuration file, /etc/inittab. Look for a line like the following:

id: 5: initdefault:

This line means that the default runlevel on the system is 5. All lines in the inittab file take this form, with four fields separated by colons occurring in the following order:
# Benzersiz bir tanımlayıcı (kısa bir dize, bu tür önceki örnekte kimliği gibi)
# Uygulanabilir çalışma seviyesi numara (lar)
# Eylemde olmamalı init (önceki örnekte, varsayılan eylem 5 için çalışma seviyesi ayarlamak için)
# Bir komut yürütmek için (isteğe bağlı)

Komut varsayılan çalışma seviyesi ayarlama bağlamında anlam ifade etmiyor çünkü initdefault Yukarıdaki örnekte çalıştırmak için komutu yoktur. Eğer böyle bir satır görünceye kadar, inittab daha aşağı biraz zaman bak:

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

Bu satır, rc * .d ve init.d dizinleri aracılığıyla sistem yapılandırmasının ve hizmetlerinin çoğunu tetikler. İnit'in çalışma düzeyi 5'teki /etc/rc.d/rc 5 adlı bir komutu yürütmek üzere ayarlandığını görebilirsiniz. Bekleme eylemi, init'in komutu ne zaman ve nasıl çalıştırdığını söyler: rc 5'i bir kez çalıştır enterçalıştırın ve daha sonra başka bir şey yapmadan önce bu komutun bitmesini bekleyin.

Orada initdefault ve özellikle güç yönetimi ile ilgili, beklemek yanı sıra birçok farklı eylem vardır ve inittab (5) kılavuz sayfası onlardan ilgili tüm söyler. olanları GMT bölümlerde Açıklaması karşılaşmak zorunda Yani en olasılıkla konum.

respawn

The respawn action causes init to run the command that follows, and if the command finishes executing, to run it again. You’re likely to see something similar to this line in your inittab file:

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, sanal bir konsolda CONTROL-ALT-DELETE tuşuna bastığınızda sistemin ne yapacağını denetler. Çoğu sistemde bu, shutdown komutunu kullanan bir çeşit 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

Bunu giriş sağlar hemen önce, şimdi init sistem hizmetleri başlar öğrenmek için hazırız. Daha önce bu inittab hattı dan 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?

For runlevel 5, in this example, the commands are probably either in /etc/rc.d/rc5.d or /etc/rc5.d. Runlevel 1 uses rc1.d, runlevel 2 uses rc2.d, and so on. You might find the following items in the rc5.d directory:

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 komutun başlangıç ​​argümanı dikkat edin. komut ismi S should başlangıç ​​modunda komutunu çalıştırın anlamına gelir ve dizi rc olan komutu başladığı numarası (00 99 aracılığıyla) 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.

Bunları hizmetlerden biri eliyle başlayabilir miyim. Elle httpd Web sunucusu yazılımını başlatmak ister Örneğin, S99httpd başlangıç ​​çalıştırın. Hiç hizmetler makine açıkken, sen-can durdurma argümanı ile rc * .d dizininde komutunu çalıştırın birini öldürmek gerekiyor Benzer şekilde, (S99httpd örneğin, dur).

Bazı rc * .d dizinleri (için "öldürmek" veya durdurma modunda) komutları K ile başlayan bu CONTAIN. Bu durumda, rc YERİNE ev argümanı ile durma komutu çalıştırır. Büyük Olasılıkla Sen K kapatma sistemi çalışma_seviyeleri komutları karşılaşmak zorunda.

hizmet ekleme ve kaldırma

If you want to add, delete, or modify services in the rc*.d directories, you need to take a closer look at the files inside. A long listing reveals a structure like this:

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

The commands in an rc*.d directory are actually symbolic links to files in an init.d directory, usually in /etc or /etc/rc.d. Linux distributions contain these links so that they can use the same startup scripts for all runlevels. This convention is by no means a requirement, but it often makes organization a little easier.

Belirli bir çalışma seviyesinde çalışmasını init.d dizininde komutlardan birini önlemek için, UYGUN rc *. D dizinine sembolik bağ kaldırarak düşünüyorum olabilir. Bu çalışır, ANCAK Eğer bir hata yaparsanız ve hiç geri yerine link koymak için ihtiyacınız varsa, bağlantının tam adını Hatırlamak sorun olabilir. . Bu nedenle, rc * D dizinleri bağlantıları kaldırmak gerekir, ama doğrusu, bu gibi bağlantı adı Başındaki için (_) alt çizgi ekleyin:

mv S99httpd _S99httpd

O Ayrıca S veya K ile başlamıyor Çünkü önyükleme zamanda, rc _S99httpd yoksayar, orijinal adı hala açıktır ve bir tutam konum ve elle başlatmak için ihtiyacınız eğer komuta hızlı erişim var.

Bir hizmet eklemek için, init.d dizininde diğerleri gibi bir komut dosyası oluşturmak ve SONRA doğru rc *. D Rehberde bir sembolik bağlantı yapmak gerekir. Bir senaryo yazmak için en kolay yolu zaten init.d betikleri incelemek, anlamak bu tek bir kopyasını yapmak ve kopya değiştirebilirsiniz.

Bir servis eklerken, hizmeti başlatmak için önyükleme sırasını gibi O yıl UYGUN seçtiğinizden emin olun. Hizmeti çok yakında başlarsa, diğer bazı hizmet bağımlılığı nedeniyle çalışmayabilir. Zorunlu olmayan hizmetler için, bir çok sistem yöneticileri sistemi ile bu kam hizmetlerin en sonra, 90s numaraları tercih.

Genellikle Linux dağıtımları rc * hizmetleri etkinleştirmek ve devre dışı bırakmak için bir komut ile birlikte gelir. D dizinleri. Örneğin, Debian, komut update-rc.d ve Red Hat Linux, chkconfig komutunu olduğunu. Grafiksel kullanıcı arayüzleri de mevcuttur. Kullanımı Bu programlar başlatma dizinleri tutarlı tutmak HELPS ve yükseltmeleri ile HELPS.

İPUCU: En yaygın Linux yükleme sorunlarından biri hatalı yıl Yapılandırılmış sunucu XFree86 Yani üzerinde sinema ve kapalı, konsol sistemi kullanılamaz hale. Tek kullanıcı moduna Bu davranış, önyükleme durdurmak ve çalışma seviyesi veya runlevel hizmetleri değiştirmek için. Rc * yılında xdm, gdm veya kdm içerenler şey için bak. D dizinler, ya da / etc / inittab.

Init denetleme

Occasionally, you need to give init a little kick to tell it to switch runlevels, to re-read the inittab file, or just to shut down the system. Because init is always the first process on a system, its process ID is always 1.

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

telinit 3

When switching runlevels, init tries to kill off any processes that aren’t in the inittab file for the new runlevel. Therefore, you should be careful about changing runlevels.

When you need to add or remove respawning jobs or make any other change to the inittab file, you must tell init about the change and cause it to re-read the file. Some people use kill -HUP 1 to tell init to do this. This traditional method works on most versions of Unix, as long as you type it correctly. However, you can also run this telinit command:

telinit q

Bunları da tek kullanıcı moduna geçmek için telinit ler kullanabilir miyim.

Kapatma

Ayrıca init sistem kapanır nasıl kontroller ve yeniden başlatılır. Bir Linux makine kapatmaya uygun şekilde kapatma komutunu kullanmaktır.

Kapatma kullanmak için iki temel yolu vardır. Eğer sistemi durdurmak, bu makineyi kapatır ve aşağı tutar. Hemen makineyi durdurmak yapmak için bu komutu kullanın:

shutdown-h artık

Linux makul son sürümleri ile en modern makinelerde, durma makinenin gücünü keser. Bunları da makineyi yeniden olabilir. Bir yeniden başlatma için, kullanım-r yerine-h.

Kapatma işlemi birkaç saniye sürer. Bu aşamada makine kapalı sıfırlamak veya güç asla GEREKMEKTEDİR.

Yukarıdaki örnekte, şimdi kapatmaya zamanı. Bu argüman zorunludur, Fakat belirtilmesi pek çok yolu var. Eğer ileride aşağı gitmek makine istiyorsanız, bir şekilde kullanmak için + n ITS işe ÖNERİ yapmadan önce dakikada kapanma bekleme sayısı n vardır. Diğer seçenekler için, kapatma (8) kılavuz sayfasına bakmalısınız.

Sistem 10 dakika yeniden yapmak için bu komutu çalıştırın:

shutdown-r + 10

On Linux, shutdown notifies anyone logged on that the machine is going down, but it does little real work. If you specify a time other than now, shutdown creates a file called /etc/nologin. When this file is present, the system prohibits logins by anyone except the superuser.

Sistemin kapanma süresi en sonunda geldiğinde, kapatma, init'e bir durma için çalışma seviyesi 0'a ve yeniden başlatma için çalışma seviyesi 6'ya geçmesini söyler. Başlarken 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.

# The initial rc0.d/rc6.d commands run, locking system files into place and making other preparations for shutdown.
# The next rc0.d/rc6.d commands unmount all filesystems other than the root.
# Further rc0.d/rc6.d commands remount the root filesystem read-only.
# Still more rc0.d/rc6.d commands write all buffered data out to the filesystem with the sync program.
# 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.

Reboot ve halt programları Potansiyel karışıklık Neden, her çalışma seviyesi için farklı davranır. Varsayılan olarak, Bu programlar-r veya-h seçeneği ile kapatma aramak, ANCAK sistemi durdurmak veya yeniden başlatma runlevel zaten ise, programların kendisini hemen kapatmak için kernele söylemek. Eğer gerçekten bir acele (Olası düzensiz bir kapatma herhangi bir zarar göz ardı) makinenizi kapatmaya istiyorsanız,-f seçeneğini kullanın.

Linux Boots

Leave a Comment