Linux - druhý pohled do nitra

15. 7. 1999
Doba čtení: 3 minuty

Sdílet

Před nedávnem jsme se seznámili s tím, co se vlastně v počítači odehrává, když se Linux startuje. Dnes na toto téma navážeme a podíváme se podrobněji na funkce programu init a formát souboru /etc/inittab.

V předchozím článku jsme se dostali až k fázi, kdy se spustí program init. Rovněž jsme si řekli, že chování tohoto programu určuje soubor /etc/inittab. Tento soubor je nesmírně důležitý a vřele doporučuji důkladně se seznámit s problematikou ještě než do něj začnete zasahovat. Rovněž zálohování není od věci. Na druhou stranu je třeba říci, že většina uživatelů nemusí tento soubor nijak upravovat, neboť často vystačí s tím, jak vypadá hned po instalaci.
Formát souboru je celkem jednoduchý. Každý povel se nachází na zvláštním řádku a má následující tvar:

id:runlevels:ac­tion:process

id je čtyřpísmený (nebo dvoupísmený, dle platformy) jednoznačný identifikátor povelu. Runlevels obsahuje výčet runlevelů (viz. minulý článek), pro něž se povel má vykonat. Action specifikuje akci, při níž se vykonává povel definovaný parametrem process. Nejčastěji používané hodnoty pro položku action jsou:

respawn – proces bude vždy znovu spuštěn, pakliže se ukončí. Typicky se používá například pro getty. Výhodou je, že init sleduje, zda se program neobnovuje příliš rychle a zabraňuje tak přetížení systému

wait – proces bude spuštěn jednou při vstupu do runlevelu a init počká na jeho dokončení

once – to samé jako wait, ale nečeká se na dokončení

boot – proces bude spuštěn jednou při bootu, runlevel je v tomto případě ignorován

bootwait – to samé jako boot, ale init čeká na dokončení

initdefault – definuje výchozí runlevel, který se použije při bootování. V případě, že neexistuje žádný povel tohoto typu, init bude požadovat zadání runlevelu na konzoli. Položka process je ignorována

sysinit – proces bude spuštěn jednou při bootu a to ještě před všemi povely typu boot (resp. bootwait)

ctrlaltdel – definuje povel, který bude vykonán při stisku kombinace kláves Ctrl+Alt+Delete (případně když init obdrží signál INT)

Existují i další hodnoty pro položku action, které však již nejsou tak časté. Kompletní seznam s popisem naleznete v manuálové stránce inittab(5).

Pakliže ještě zkonstatuji, že komentáře v souboru /etc/inittab začínají znakem #, měl by pro vás nyná být tento soubor srozumitelný. Běžný soubor pak může vypadat třeba takto:

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

ud::once:/sbin/update

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

1:12345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

x:5:respawn:/usr/bin/X11/xdm -nodaemon

Vidíme, že výchozí runlevel bude 3, při bootu se spustí skript /etc/rc.d/rc.sy­sinit, nastartuje se démon update, při stisku kláves Ctrl+Alt+Del se provede povel /sbin/shutdown, nastartuje se šest textových konzolí (povel mingetty, v případě ukončení se opět nahodí). Poslední řádek slouží pro runlevel 5, který je běžně využíván pro přímý start Xek. Program xdm umožňuje přihlášení do systému už v grafickém rozhraní, akce je opět respawn, tudíž se po ukončení Xek znovu spustí xdm.

Poslední nevysvětlenou částí v uvedeném příkladě jsou povely s id l0 až l6. Ty slouží ke spuštění startovacích skriptů podle zvoleného runlevelu. O tom, jak vlastně vypadají startovací skripty v Linuxu (potažmo v jiných un*xech) si ale povíme až příště.

Autor článku