# Runlevel

Der Begriff Runlevel bezeichnet einen Betriebszustand von Computern. Er hat vor allem beim Start des Betriebssystems Bedeutung. Der Runlevel ist vor allem bei unixoiden Betriebssystemen bekannt, jedoch auch bei anderen Betriebssystemen vorhanden.

## Allgemeines

Viele Betriebssysteme durchlaufen beim Start (Booten) mehrere abgestufte Systemzustände, bzw. starten in einen bestimmten Zustand, den Runlevel. Jedem Runlevel sind bestimmte System-Dienste zugeordnet, die beim Booten als Prozesse in wohldefinierter Reihenfolge innerhalb des Betriebssystems gestartet werden. Auf diese Weise werden Betriebsmittel des Computers stufenweise in Betrieb genommen. Beim Herunterfahren des Betriebssystems werden die Runlevel in umgekehrter Reihenfolge durchlaufen, die laufenden Prozesse werden stufenweise beendet, bis der Computer ausgeschaltet werden kann. Daneben kann auch direkter Wechsel von einem Runlevel in einen anderen erfolgen.
Runlevel kennt man vor allem aus den unterschiedlichen Unix-Systemen wie Solaris (vor Solaris 10), GNU/Linux, HP-UX oder AIX. Doch auch in Windows entsprechen die Startoptionen Abgesicherter Modus, Abgesicherter Modus mit Netzwerk oder Windows normal Starten im Windows-Bootmenü jeweils genau einem Runlevel. Solaris 10 verwendet runlevel nur noch rudimentär, die Hauptsystemsteuerung wird dort durch Service Management Facility (SMF) erledigt.
Idee der unterschiedlichen Runlevel ist es, Sicherheitsstufen bereitzustellen, in denen nur bestimmte Systemprozesse aktiv sind. Dies ist wichtig, falls beispielsweise ein System von Computerviren befallen ist und ohne Netzwerk-Anbindung laufen soll.
Im Gegensatz zu den am System V orientierten Betriebssystemen kennt FreeBSD keine Runlevels, sondern hält am traditionellen init von BSD fest.

## Beispiel Linux

Das Runlevel wird durch eine Befehlszeile oder die Datei /etc/inittab gewählt, aber nicht unbedingt dort definiert, und alles Weitere kann bei den verschiedenen Linux-Distributionen sehr unterschiedlich sein. Runlevels müssen nicht fortlaufend definiert sein und müssen sich nicht alle unterscheiden.
Beim Wechsel in ein Runlevel werden die in seiner Definition benannten Dienste oder Prozesse automatisch gestartet oder gestoppt. Eine denkbare Konfiguration ist in folgender Tabelle angegeben:
| Runlevel | Beschreibung |
| 0 | Shutdown. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt (d. h. die im Verzeichnisbaum eingebundenen Datenträger werden ausgehängt). |
| S | Single-User-Runlevel; niedrigster Systemzustand für Wartungsarbeiten, in dem ausschließlich Systemressourcen wie Festplatten oder Dateisysteme aktiv sind. |
| 1 | Einzelnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. In vielen Implementierungen identisch mit 'S'. |
| 2 | Lokaler Mehrnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. Unter einigen Linuxdistributionen (z. B. Debian) wird in Runlevel 2 auch das Netzwerk konfiguriert. |
| 3 | Netzwerkbetrieb, über das Netzwerk erreichbare Ressourcen sind nutzbar, eine grafische Oberfläche steht nicht zur Verfügung. Firewalls sollten aktiviert werden. |
| 4 | Ist normalerweise nicht definiert. Kann aber für diverse Dienste genutzt werden. |
| 5 | Wie 3, zusätzlich wird die grafische Oberfläche bereitgestellt. |
| 6 | Reboot. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt. |
Das oben bereits erwähnte Programm init kann von privilegierten Benutzern auch zum Wechsel des Runlevel benutzt werden. Entsprechend den in der Tabelle wiedergegebenen Leveln kann mit /sbin/init 0 das System heruntergefahren oder mit /sbin/init 6 rebootet werden. Zur Ermittlung des aktuellen Runlevels steht bei den meisten Distributionen der Befehl /sbin/runlevel und/oder die Umgebungsvariable RUNLEVEL zur Verfügung (oder nach System V who -r).

### Modernere Alternative: systemd

Seit der Einführung moderner Init-Systeme, insbesondere systemd, werden Runlevels durch sogenannte Targets ersetzt. Targets bieten eine flexiblere und modularere Möglichkeit, den Systemzustand zu definieren und zu verwalten. Die folgende Tabelle zeigt die Zuordnung der klassischen Runlevels zu den entsprechenden systemd-Targets:
| Runlevel | systemd-Target | Beschreibung |
| 0 | poweroff.target | Shutdown. Das System wird sicher heruntergefahren. |
| 1 | rescue.target | Einzelbenutzer-Modus für Wartungsarbeiten, ähnlich dem klassischen Single-User-Mode. |
| 2, 3, 4 | multi-user.target | Mehrbenutzer-Modus ohne grafische Oberfläche. Netzwerk- und andere Dienste sind aktiv. |
| 5 | graphical.target | Mehrbenutzer-Modus mit grafischer Oberfläche (z. B. GDM, KDE-Plasma). |
| 6 | reboot.target | Neustart des Systems. |

### Wichtige Befehle mit systemd

Starten eines Targets: Mit dem Befehl systemctl isolate kann ein bestimmtes Target direkt gestartet werden. Der Parameter graphical.target steht hier für den Mehrbenutzer-Modus mit grafischer Oberfläche (entspricht dem klassischen Runlevel 5). Dies ist vergleichbar mit dem Wechseln eines Runlevels in älteren Init-Systemen. Beispiel:
Aktuelles Target anzeigen: Der Befehl `systemctl get-default` zeigt das aktuell gesetzte Standard-Target an, das beim Systemstart geladen wird. Häufige Standard-Targets sind multi-user.target (ohne grafische Oberfläche) und graphical.target (mit grafischer Oberfläche). Beispiel:
Standard-Target ändern: Mit systemctl set-default kann das Standard-Target geändert werden, das das System beim Start lädt. Der Parameter multi-user.target legt den Mehrbenutzer-Modus ohne grafische Oberfläche als Standard fest. Beispiel:

### Vorteile von systemd gegenüber Runlevels

* Flexibilität: Targets können mehrere Abhängigkeiten definieren und kombiniert werden.
* Parallele Starts: Dienste und Prozesse können parallel gestartet werden, was den Bootvorgang beschleunigt.
* Einheitliche Steuerung: systemd ermöglicht eine einheitliche Verwaltung von Diensten, Mountpoints, Sockets und mehr.
Mit systemd wird die klassische Runlevel-Verwaltung abgelöst und durch ein moderneres, leistungsfähigeres Modell ersetzt, das besser auf die Anforderungen moderner Systeme abgestimmt ist.

## Beispiel Solaris

Alle Systemdienste werden ebenfalls in der Datei /etc/inittab festgelegt. Für die einzelnen Runlevel gelten unter Solaris, im Unterschied zu Linux, die folgenden Definitionen:
| Runlevel | Beschreibung |
| 0 | Shutdown-Runlevel, PROM-Modus |
| S | Single-User-Runlevel; ähnlich wie Runlevel 1, doch es werden nur die nötigsten Dateisysteme gemountet („/“ und „/usr“), um Veränderungen am System während der Wartungsarbeiten zu vermeiden |
| 1 | Administrations-Runlevel (siehe Linux) |
| 2 | Multi-User-Runlevel (siehe Linux) |
| 3 | Multi-User-Runlevel mit Netzwerk (siehe Linux) |
| 4 | Benutzerdefinierter Runlevel (siehe Linux) |
| 5 | Poweroff-Runlevel; ähnlich wie Runlevel 0, doch es wird das Netzteil abgeschaltet, sofern dies unterstützt wird. |
| 6 | Reboot-Runlevel (siehe Linux) |
| a,b,c | Spezielle Runlevel; diese werden zusätzlich zu den aktiven Runleveln gestartet |
| Q | Dieser Parameter dient dem erneuten Einlesen der /etc/inittab, um Änderungen ohne Reboot zu verwirklichen. Jedoch ist Q kein spezieller Runlevel. |