Before systemd came into existence, most major Linux distributions ran a Sys-V style init system. Sys-V used seven different "runlevels" to determine which processes to start on the system. For example, runlevel 3 was typically reserved for the command line and its related programs, whereas runlevel 5 would launch a GUI and all the processes required for it. Results may vary, depending on the distro in question.
These days, the vast majority of Linux distros have adopted systemd as their init system. Some distros still use Sys-V, where the implementation of runlevels as described above still exists. On systemd systems, the concept of runlevels is still alive, but they have been adapted into systemd "targets."
Remnants of Sys-V still exist on some systems, where commands like
runlevel still work. But some modern systemd distros have eradicated this support completely. In this guide, we'll show you how to check the current runlevel on Linux.
- How to check the current runlevel
|Category||Requirements, Conventions or Software Version Used|
|System||Any Linux distro with Sys-V, and various distros with systemd|
|Other||Privileged access to your Linux system as root or via the |
|Conventions|| # - requires given linux commands to be executed with root privileges either directly as a root user or by use of |
Check current runlevel
The following command can be used to view the current runlevel. This will only work on some systemd distros, but should work for any Sys-V system.
Alternatively, you can run this command:
$ who -r
In the screenshot above, you can see that our system is currently in runlevel 5. This is a systemd distro, which means that the concept of runlevels are mostly kept around for compatibility. In reality, the various runlevels have been mapped to corresponding systemd targets. You can see this for yourself with the following command.
$ ls -l /lib/systemd/system/runlevel*
Like runlevels, there are 7 systemd targets by default. The two main targets are
graphical.target. You can see your system's default systemd target with the following command.
$ systemctl get-default
On our test system we're in
graphical.target, which makes sense because we are running a GUI.
To see which services are mapped to this target, use the following command.
$ systemctl list-dependencies graphical.target
To see which systemd target (or runlevel) a service requires to run, try the following command. In this example, we'll check on the SSH service.
$ systemctl show -p WantedBy sshd.service
To disable or enable a particular service from starting up automatically on its assigned runlevel, you can use the following commands.
$ sudo systemctl enable sshd.service OR $ sudo systemctl disable sshd.service
On Sys-V init systems, you'd use the old
chkconfig command, which doesn't work on modern systemd distros. For example, to run apache2 on runlevel 2, you will use this command:
# chkconfig apache2 2
In this guide, we saw how to check the current runlevel of a Linux system. We also saw how the runlevel-related commands are just remnants of Sys-V, and only implemented on certain systemd distros as a means of backwards compatibility. Whether you're using systemd (most likely) or on a distro that uses Sys-V, the commands here will help you determine your runlevel and enable or disable processes from running in it.