Runlevel heute auf systemd implementiert, waren zuvor noch die meisten Linux-Distributionen mit dem Init-System, dem Sys-V Stil ausgestattet. Mit Sys-V wurden sieben verschiedene Runlevels verwendet, um zu bestimmen, welche Prozesse auf dem System gestartet werden. Der Runlevel 3 war zum Beispiel reserviert, um normalerweise die Befehlszeile und die zugehörigen Programme zu starten, während Runlevel 5 eine GUI und alle dafür erforderlichen Prozesse startete. Die Ergebnisse können je nach Distribution variieren.
Heutzutage hat die überwiegende Mehrheit der Linux-Distributionen systemd als Init-System übernommen. Einige Distributionen verwenden noch immer Sys-V, wo die Implementierung von Runlevels wie oben beschrieben noch existiert. Bei systemd-Systemen ist das Konzept der Runlevel noch am Leben, es wurden in systemd-„Ziele“ umgewandelt.
Auf einigen Systemen existieren noch Reste von Sys-V, auf denen Befehle wie runlevel
noch zu finden sind. Einige moderne systemd-Distributionen haben diese Unterstützung vollständig ausgerottet. In diesem Tutorial zeigen wir, wie man den aktuellen Runlevel unter Linux überprüft.

Linux Runlevel überprüfen
Nachfolgend zwei Befehle um den aktuellen Runlevel zu ermitteln.
$ runlevel
N 5
$ who -r
run-level 5 2022-11-07 14:52
Wie zu sehen ist hier der Runlevel 5 gestartet. Alternativ kann der Befehl who -r
ausgeführt werden. Den Befehl runlevel
gibt es nur auf einigen systemd-Distributionen, sollte aber auf jedem Sys-V-System gehen.
Die verschiedenen Runlevels wurden entsprechenden systemd-Zielen zugeordnet. Mit folgendem Befehl überprüft man die Ziele.
$ ls -l /lib/systemd/system/runlevel*
Nachfolgend die Ausgabe der Runlevels bei einem Linux Mint, was auf Ubuntu/Debian basiert.
$ lrwxrwxrwx 1 root root 15 Aug 31 17:27 /lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx 1 root root 13 Aug 31 17:27 /lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx 1 root root 17 Aug 31 17:27 /lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx 1 root root 17 Aug 31 17:27 /lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx 1 root root 17 Aug 31 17:27 /lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx 1 root root 16 Aug 31 17:27 /lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx 1 root root 13 Aug 31 17:27 /lib/systemd/system/runlevel6.target -> reboot.target
/lib/systemd/system/runlevel1.target.wants:
total 0
/lib/systemd/system/runlevel2.target.wants:
total 0
/lib/systemd/system/runlevel3.target.wants:
total 0
/lib/systemd/system/runlevel4.target.wants:
total 0
/lib/systemd/system/runlevel5.target.wants:
total 0
Welche Linux Runlevels gibt es?
0 | Halt System herunterfahren |
1 | Single-user mode (Rettung und Sonderverwaltung) |
2 | Multi-user ohne Netzwerkschnittstellen und Daemons starten |
3 | Multi-user mode normaler start mit Netzwerk |
4 | Not Used |
5 | Multi-user wie runlevel 3 + Display manager X11 GUI |
6 | Reboot startet das System neu |
Linux systemd runlevel anzeigen
Wie bei Linux Runlevels gibt es standardmäßig 7 systemd-Ziele. Die beiden Hauptziele sind multi-user.target
und graphical.target
. Die standardmäßigen systemd-Ziele kann man mit dem folgenden Befehl anzeigen.
$ systemctl get-default
graphical.target
Bei diesem Beispiel ist graphical.target
gestartet, was sinnvoll ist, da wir eine grafische Desktop-Umgebung benötigen. Bei einem Server wo oft kein GUI ausgeführt wird, ist meist multi-user.target
gestartet.
$ systemctl get-default
multi-user.target
Verwende den folgenden Befehl um zu sehen, welche Dienste diesem Ziel zugeordnet sind.
$ systemctl list-dependencies graphic.target
graphic.target
Versuche mit folgenden Befehl zu sehen, welches systemd-Ziel (oder welchen Runlevel) ein Dienst ausführen muss. In diesem Beispiel überprüfen wir den SSH-Dienst.
$ systemctl show -p WantedBy sshd.service
WantedBy=multi-user.target
Runlevel neu festlegen
Der Runlevel festlegen lässt sich mit diesem Befehl mit sudo Privileg.
$ sudo systemctl set-default multi-user.target
Der Befehl wird beim nächsten Systemstart den Mehrbenutzermodus (multi-user.target) starten.