Linux runlevels distinguish between system operating states. Switching runlevel will change the services which are running. You can customise runlevels so each level starts with a specific set of services.
The Linux kernel defines seven standard runlevels. Individual operating system distributions may customise these runlevels or add additional ones. Users are also free to create and modify runlevels.
- Runlevel 0 – No activity, equivalent to shutdown. The system is ready for a physical loss of power.
- Runlevel 1 – Running in single-user (rescue) mode.
- Runlevel 2 – Running in multi-user mode without networking and graphics.
- Runlevel 3 – Multi-user mode with the addition of networking support.
- Runlevel 4 – Left for users/distributions to define.
- Runlevel 5 – Multiple user mode with a graphical user interface.
- Runlevel 6 – System reboot mode.
Most Linux systems will boot into Runlevel 5. This is the runlevel you’re probably most familiar with. The broadest range of services are available, including a display server and full networking stack. If you’re on a headless server without a display stack, you might be in Runlevel 3.
Some single-user systems will start in Runlevel 1.. You’ll also encounter this runlevel if you use a recovery mode to rescue your system. This lets you obtain shell access without logging in as a regular user.
Runlevels 2, 3 and 4 can vary across distribution. Some distributions will create a clear distinction between each runlevel; in others, all three may have the same effect. Generally, you can expect any of these three to give you a single-user text shell with networking available.
Your system can only be in one runlevel at a time. A single runlevel will be selected after boot. You won’t transition been runlevels unless you explicitly initiate a change. Usually, the only runlevel transitions that occur are from levels 1-5 into level 0 or 6, when your system shuts down or reboots.
Higher runlevels indicate increasing levels of available functionality. This convention is followed by all distributions. A low runlevel usually means that only a subset of the system’s services are running.
Runlevels and Startup Services
Startup services are coupled to runlevels. Linux traditionally adds startup services to runlevels. When your system enters a runlevel, all the services associated with that level will be started.
The way in which services are actually handled depends on the service manager you’re using. Individual distributions ship with different service managers. The original service manager,
init, defines its services within
/etc/init.d. Scripts created here get symlinked into
/etc/rc where they’re sorted by runlevel:
/etc/rc0.d– Scripts placed in here are executed by runlevel 0…
/etc/rc1.d– Scripts for runlevel 1…
To add new startup services, create or edit a script in
chkconfig to enable the service:
sudo chkconfig service_executable on
345:respawn in the script line instructs
init to run
service_executable when the system enters runlevels 3, 4 or 5.
Many newer distributions have replaced
init with more modern alternatives. These can provide a higher-level abstraction over runlevels and the init system.
The majority of Linux distributions, including Debian, Ubuntu, CentOS, Arch and Red Hat, now use
systemd. This doesn’t reference runlevels directly; instead, they’re converted to “targets” which are identified by name. While Linux can only be in one runlevel at a time,
systemd supports multiple concurrently active targets. The mapping between runlevels and targets is only approximate; it’s provided for compatibility purposes.
default target defines what the system will boot into. The
default target is usually linked to the
multi-user target – equivalent to a runlevel of 2 or higher.
Each target’s services are stored in a “wants” directory. This will contain
.service files. These are also symbolic links that point back to service definitions in
ls -l /etc/systemd/system/multi-user.target.wants/*.service
This allows service definitions to be created once and shared with multiple “targets”. When Linux boots,
systemd will select the target indicated by the runlevel. The services wanted by that target will then be loaded up.
systemd supports service dependencies, so individual services can be made to wait on other services before they start.
Inspecting Your System’s Runlevel
You can find out your system’s runlevel using the
runlevel command. This will print two characters to the terminal. They show your system’s previous and current runlevels.
N 5 is a typical output for a desktop Linux system. The
5 indicates you’re in a multi-user graphical session with networking available.
N means the previous runlevel couldn’t be determined, usually because the system was shutdown.
On some systems, you may be able to get the current and previous runlevels using the
$PREVLEVEL environment variables. If these variables are set, the
runlevel command simply emits their values.
You can also inspect your current runlevel using the
who command. Run
who -r to see the runlevel number and the time at which the runlevel was entered.
Switching Between Runlevels
You can switch between runlevels using the
telinit command. This lets you manually trigger different modes, such as single-user mode or rescue mode.
telinit 0 will shutdown your machine;
telinit 6 should initiate a reboot. Using
telinit with runlevels 1 – 5 will activate the corresponding operating mode. If you’re currently in text-only mode,
telinit 5 will try to enable the display server and enter graphical mode.
systemctl isolate command lets you activate a different “target”. All running services will be stopped; services associated with the new target then get started up.
Here’s how to activate the
sudo systemctl isolate multi-user.target
If you want to make a permanent change to the runlevel, use the
systemctl set-default command:
sudo systemctl set-default multi-user.target
multi-user target will be selected whenever your system reboots.
Linux runlevels describe different states within the operating system. Each runlevel layers additional functionality in the form of extra running services.
Low runlevels are commonly used for recovery modes and text-only operation. A desktop Linux system with a graphical environment will usually be in runlevel
5. You should check your distribution’s documentation for a detailed description of available runlevels, as implementations can vary.