Unix - Runlevels in UNIX (SysV init)
In traditional UNIX and old Linux systems (before systemd), the system startup and shutdown were controlled by a mechanism called Runlevels.
A Runlevel defines the state of the machine — which services should be running and which should be stopped.
What Are Runlevels?
A runlevel is a number between 0 and 6, and each level represents a specific mode of operation.
The system switches between runlevels using /etc/inittab (older systems) and startup scripts in:
/etc/rc.d/rc*.d/
/etc/init.d/
Each runlevel has a directory:
/etc/rc0.d/
/etc/rc1.d/
/etc/rc2.d/
/etc/rc3.d/
...
Each directory contains scripts that start (S) or stop (K) services.
Standard Runlevels (0–6)
| Runlevel | Meaning | Description |
|---|---|---|
| 0 | Halt | Shuts down the system |
| 1 | Single-user mode | Maintenance mode (no networking, root only) |
| 2 | Multi-user (without networking)** or full multi-user (varies by OS) | |
| 3 | Full multi-user, networking enabled | CLI mode (no GUI) |
| 4 | Unused / Custom | Can be configured for custom tasks |
| 5 | Multi-user with GUI | Runs graphical login (X11) |
| 6 | Reboot | Restart the system |
⚠️ Runlevels are OS-dependent.
Example: Ubuntu used runlevel 2 as full multi-user with networking.
Most Common Runlevels Used
Runlevel 1 (Single User Mode)
Used for:
-
Fixing filesystem issues
-
Resetting passwords
-
System recovery
No network, no regular users.
Runlevel 3 (Multi-user with networking — CLI mode)
Used on servers.
Standard mode for headless machines.
Runlevel 5 (Multi-user with GUI)
Used on desktops.
Starts graphical login (gdm, kdm, lightdm).
How to Check Current Runlevel
runlevel
Output example:
N 3
Meaning: moved from "N" (no previous) to level 3.
How to Change Runlevel
Temporary change (until restart):
init 3
or
telinit 3
Permanent change:
Edit the file:
/etc/inittab
Example:
id:3:initdefault:
Runlevel Script Structure
Every runlevel directory contains several scripts named like:
S20network
K75ntp
S30syslog
Meaning:
-
S → Start this service when entering the runlevel
-
K → Kill (stop) this service when leaving the runlevel
-
Numbers (20, 30, 75) → Execution order
How SysV init Works with Runlevels
-
Kernel starts
/sbin/init(PID 1). -
initreads/etc/inittab. -
Determines default runlevel.
-
Executes startup scripts for that runlevel.
-
Provides login prompt (
getty) or GUI depending on runlevel.
Quick Summary
-
Runlevels define the system state in SysV init.
-
Levels 0–6 control shutdown, recovery, CLI, GUI, and reboot.
-
Startup scripts exist in
/etc/rc*.d/. -
Modern systems use systemd, which replaces runlevels with targets (e.g., multi-user.target, graphical.target).