systemd is based on the concepts of units, an abstraction of all elements that are relevant for system startup and maintenance, and targets, which group units and can be viewed as a runlevel equivalent. Some of the units systemd defines are:
- Services
- Sockets
- Devices
- Mount points
- Snapshots
- Timers
- Paths
The default targets and their runlevel equivalents are defined in the following table:
sysvinit |
Runlevel |
systemd target |
Notes |
0 |
runlevel0.target |
poweroff.target |
Halt the system. |
1, s, single |
runlevel1.target |
rescue.target |
Single user mode. |
2, 4 |
runlevel2.target, runlevel4.target |
multi-user.target |
User-defined/site-specific runlevels. By default, identical to 3. |
3 |
runlevel3.target |
multi-user.target |
Multiuser, non-graphical. Users can usually log in via multiple consoles or via the network. |
5 |
runlevel5.target |
graphical.target |
Multiuser, graphical. Usually has all the services of runlevel 3 plus a graphical login. |
6 |
runlevel6.target |
reboot.target |
Reboot the system. |
Once systemd is started by the Linux kernel, it runs default.target, which is a link to either multi-user.target or graphical.target.
The systemd initialization manager is designed to be compatible with sysvinit, including using sysvinit init scripts.
Some of the features of systemd are:
- Parallelization capabilities that allow for faster boot times
- Service initialization via sockets and D-Bus so that services are only started when needed
- Process monitoring, which allows for process failure recovery
- System state snapshots and restoration
- Mount point management
- Transactional dependency-based unit control, where units establish dependencies between them