# Runlevel

Durch Runlevel soll ermöglicht werden, das System in verschiedenen Zuständen zu starten:

SuSE | RedHat
Level | Bedeutung
0 | Halt
S | Single User Mode
1 | Multi User without Network
2 | Multi User with Network (default)
3 | Multi User with Network and X
4,5 | Free
6 | Reboot
Level | Bedeutung
0 | Halt
1 | Single User Mode
2 | Multi User without Network
3 | Multi User with Network (default)
4 | Free
5 | Multi User with Network and X
6 | Reboot

Der Systemverwalter hat nun im laufenden Betrieb die Möglichkeit, durch

`root@sonne> init S`

das Runlevel zu wechseln. Der Wechsel der Modi dient u.a. der Pflege des Systems (Single User Mode) oder der voreingestellten Benutzung der grafischen Oberfläche (Multi User with Network and X). Durch

`root@sonne> init 0`

kann das System angehalten (wie `halt`) und durch

`root@sonne> init 6`

neu gestartet (wie `reboot`) werden. Ein Wechsel des Runlevels im aktuellen Betrieb läuft intern wie folgt ab:

1. `init` ruft das Shellskript `/sbin/init.d/rc` (SuSE) bzw. `/etc/rc.d/rc` (RedHat) mit dem neuen Runlevel auf

2. `rc` ruft daraufhin alle Stop-Skripte des aktuellen Runlevels auf (Verzeichnis `/sbin/init.d/rc` X`.d`, X entspricht dem alten Runlevel; bei RedHat befinden sich die Verzeichnisse unter `/etc/rc.d`).

   Diese Skripte sind mit Nummern zwischen 0 und 99 versehen, die besagen, dass ein Skript mit niedriger Nummer zwingend vor dem Skript mit einer höheren Nummer abzuarbeiten ist. Bei gleicher Nummer (Priorität) ist die Reihenfolge der Ausführung nicht vorgeschrieben, erfolgt jedoch meist alphabetisch. Diese Abbildung zeigt die Namenskonvention der Skripte.

   Die Dateien in den Unterverzeichnissen zu den einzelnen Runlevels sind nur Links auf Dateien eines anderen Verzeichnisses, so sind `K20sendmail` und `S20sendmail` Verweise auf ein und dasselbe Skript. Dieses Skript erkennt anhand des Linknamens, in welchem Kontext es aufgerufen wurde.

3. Analog zum letzten Punkt werden nun von `rc` die Start-Skripte des neuen Runlevels abgearbeitet
4. Bei erneutem Start desselben Runlevels überprüft `init` nur die Datei `/etc/inittab` auf Veränderungen und führt entsprechende Aktionen aus

Das Ändern des Default-Runlevels lässt sich neben dem direkten Bearbeiten der Datei `/etc/inittab` durch distributionsspezifische Tools realisieren:

- SuSE: Im `yast` mittels Administration des Systems => Login-Konfiguration
- RedHat: Mittels `linuxconf` Verschiedene Dienste => Initiale Systemdienste