Runlevels and systemd targets define different operating states of a Linux system. Runlevels (used by SysV init) and targets (used by systemd) determine which services and processes should be running at any given time, allowing administrators to control system behavior for different scenarios.
Key Concepts
- Runlevel: Numerical system state (0-6) defining which services run
- Target: systemd’s replacement for runlevels, more flexible
- Init System: Process that manages system startup and service control
- Default Target: The target system boots into by default
- Service Dependencies: How services rely on each other
Traditional Runlevels (SysV Init)
- 0: Halt/shutdown
- 1: Single-user mode (rescue/maintenance)
- 2: Multi-user without network
- 3: Multi-user with network (text mode)
- 4: Unused (custom)
- 5: Multi-user with GUI
- 6: Reboot
Systemd Targets
- poweroff.target: Equivalent to runlevel 0
- rescue.target: Equivalent to runlevel 1
- multi-user.target: Equivalent to runlevel 3
- graphical.target: Equivalent to runlevel 5
- reboot.target: Equivalent to runlevel 6
Command Syntax
SysV Commands
runlevel - Show current and previous runlevel
init [runlevel] - Change to specified runlevel
telinit [runlevel] - Alternative to init
Systemd Commands
systemctl get-default - Show default target
systemctl set-default [target] - Set default target
systemctl isolate [target] - Switch to target immediately
Practical Examples
Example 1: Check current runlevel/target
|
|
Shows current system state
Example 2: Change runlevel/target
|
|
Immediately changes system state
Example 3: Set default target
|
|
Changes what system boots into
Example 4: List available targets
|
|
Shows all targets and their current state
Use Cases
- System maintenance: Boot to single-user mode
- Server optimization: Run text-mode only
- Troubleshooting: Switch targets to isolate issues
- Resource management: Control which services run
- Recovery operations: Access system when GUI fails
Related Commands
systemctl status - Check service and system status
systemctl list-dependencies - Show target dependencies
who -r - Display current runlevel info
systemctl rescue - Quick switch to rescue mode
systemctl emergency - Switch to emergency mode
Tips & Troubleshooting
Common Issues
-
GUI won’t start: Check if graphical.target is set
1systemctl status graphical.target -
Services not starting: Verify target dependencies
1systemctl list-dependencies multi-user.target
Recovery Tips
- Boot to rescue mode: Add
systemd.unit=rescue.targetto kernel parameters - Emergency access: Use
systemd.unit=emergency.target - Reset to defaults:
1sudo systemctl set-default graphical.target
Best Practices
- Always use
systemctl isolateinstead of direct target switching - Check service dependencies before changing targets
- Test target changes before setting as default
- Keep rescue media available for emergency access