# init

`init` ist der wichtigste Prozess überhaupt im System. Stirbt er, ist auch Linux hinüber (was im Vergleich zu anderen Betriebssystemen eher selten der Fall ist). `init` kann auch nicht gekillt werden, nicht einmal durch das sonst tödliche Signal 9!

Was nun `init` zu tun hat, bestimmt im Wesentlichen die Datei `/etc/inittab`.

Eine Zeile hat die Form:

`<id>:<Runlevel>:<Aktion>:<Prozess>`

id | Ein Bezeichner für einen Einsprungspunkt. Solch eine ID muss einmalig sein.
Runlevel | Ein Runlevel ist eine Software-Konfiguration, in der das System gestartet werden kann. Hier stehen die Bezeichner der Runlevel, für die eine solche Zeile gültig ist. Mehr dazu im nächsten Abschnitt.
Aktion | Ein Schlüsselwort, das angibt, wie die Zeile zu interpretieren ist.
Prozess | Falls dieser Eintrag existiert, wird der angeführte Prozess gestartet.

Betrachten wir nun Beispieldateien für RedHat-basierende und SuSE-Systeme:

SuSE | RedHat
`id:2:initdefault:`
Diese Zeile bestimmt das Runlevel (hier 2), in welchem Linux nach dem Booten zu starten ist. Fehlt eine solche Zeile, fordert Linux während des Starts zur Eingabe desselben auf. `init` sucht als erstes immer nach einer solchen Zeile!
`si:I:bootwait:/sbin/init.d/boot`
Obiger Eintrag besagt, dass das angegebene Skript `/sbin/init.d/boot` während des Bootvorganges zu starten ist und `init` auf dessen Beendigung warten muss (`bootwait`). Das Runlevel-Feld wird ignoriert. |
`si::sysinit:/etc/rc.d/rc.sysinit`
Das Skript wird auf jeden Fall vor Skripten ausgeführt, deren drittes Feld `boot` oder `bootwait` enthalten. Das Runlevel-Feld wird ignoriert.
    l0:0:wait:/sbin/init.d/rc 0
    l1:1:wait:/sbin/init.d/rc 1
    l2:2:wait:/sbin/init.d/rc 2
    l3:3:wait:/sbin/init.d/rc 3
    #l4:4:wait:/sbin/init.d/rc 4
    #l5:5:wait:/sbin/init.d/rc 5
    l6:6:wait:/sbin/init.d/rc 6
    ls:S:wait:/sbin/init.d/rc S

Bei Wechsel eines Runlevels ist das Skript `/sbin/init.d/rc` auszuführen, die Runlevel 4, 5 sind nicht belegt.

    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

Bei RedHat werden 6 Runlevel spezifiziert. Bei Wechsel zwischen diesen wird das Skript `/etc/rc.d/rc` aufgerufen.

    1:123:respawn:/sbin/mingetty --noclear tty1
    2:123:respawn:/sbin/mingetty tty2
    3:123:respawn:/sbin/mingetty tty3
    4:123:respawn:/sbin/mingetty tty4
    5:123:respawn:/sbin/mingetty tty5
    6:123:respawn:/sbin/mingetty tty6
    1:2345:respawn:/sbin/mingetty 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
Die Bedeutung der Einträge solcher Zeilen sind bei SuSE und RedHat identisch. Die erste Spalte gibt die Nummer des Terminals an, `1` betrifft Terminal `tty1`,... In der zweiten Spalte stehen die Runlevel, für die die Zeile gilt (wie leicht zu erkennen ist, ist die Belegung dieser bei RedHat und SuSE verschieden). `respawn` bewirkt, dass nach Beendigung des Prozesses aus Spalte 4 dieser sofort wieder neu zu starten ist (nach dem `logout` erscheint sofort der Login-Bildschirm).
`ca::ctrlaltdel:/sbin/shutdown -r -t 4 now`
Eine solche Zeile erlaubt dem "normalen Nutzer" mit Hilfe von [Ctrl][Alt][Del] das System herunterzufahren.