After the boot process, Linux System enters final system initialization, where it needs to start various services. A program that performs a particular duty is called a service or daemon. The initialization daemon (init) determines which services are started and in what order and also allows you to stop and manage the various system service. In this guide we’ll look at how to change runlevels and Boot Targets on a Linux System.
There are two initialization daemons;
- SysVinit: Which uses
runlevelsat system boot time to determine what groups of services are going to start.
- Systemd: Which uses
target unit files. The primary purpose of target unit files is to group together various services to start at system boot time.
In this guide, we are going to focus on changing runlevels and boot targets on Linux System.
1. Using SysVinit Init System
A service manager based on the SysVinit standard will provide predefined sets of system states, called
runlevels, and their corresponding service script files to be executed.
Runlevels are numbered
0 to 6:
Runlevel 0:Shut down the system.
Runlevel 1, s, or S:Single-user mode used for system maintenance. (Similar to systemd rescue target.)
Runlevel 2:Multi-user mode without networking services enabled.
Runlevel 3:Multi-user mode with networking services enabled.
Runlevel 5:Multi-user mode with GUI available.
Runlevel 6:Reboot the system
The program responsible for managing runlevels and associated daemons/resources is
/sbin/init. During system initialization, the
init program identifies the requested runlevel, defined by a kernel parameter or in the
/etc/inittab file, and loads the associated scripts listed there for the given runlevel.
Every runlevel may have many associated service files, usually scripts in the
Syntax of the /etc/inittab:
id: is a generic name up to four characters in length used to identify the entry.
runlevels: entry is a list of runlevel numbers for which a specified action should be executed.
action: defines how init will execute the process indicated by the term
The actions are;
boot: The process will be executed during system initialization. The field runlevels is ignored.
bootwait: The process will be executed during system initialization and init will wait until it finishes to continue. The field runlevels is ignored.
sysinit:The process will be executed after system initialization, regardless of runlevel. The field runlevels is ignored.
wait: The process will be executed for the given runlevels and init will wait until it finishes to continue.
respawn: The process will be restarted if it is terminated.
ctrlaltdel: The process will be executed when the init process receives the SIGINT signal, triggered when the key sequence of Ctrl+Alt+Del is pressed.
To check the system’s current and former runlevel, use the
$ runlevel N 5
In the above output, the first number or letter displayed indicates the previous runlevel (
N indicates that the system is newly booted), and the second number (
5) indicates the current runlevel.
In SysVinit, when changing runlevels we use two utilities to accomplish the task;
init 3 or
telinit 3 to change the runlevel to
$ sudo init 3
Now, use the
runlevel command to check the current runlevel;
$ runlevel 5 3
The above output, we find that the current runlevel is
3 while the previous runlevel is
In SysVinit, you can shutdown the system in the command line by typing
init 0 or
telinit 0 as long as you have the superuser privileges. Also you can reboot the system by typing
init 6 or
2. Using Systemd Init System
When a particular hardware component is attached to the system, services can now be started when the system boots. The
systemd approach introduced a major paradigm shift in how Linux systems manage services. Currently,
systemd is the most widely used set of tools to manage system resources and services, which are referred to as
There are currently 12 different
systemd unit types:
The systemctl utility is the main gateway to managing
systemd and system services. Its basic syntax is as follows:
systemctl [OPTIONS…] COMMAND [NAME…]
target unit is a grouping of other units, managed as a single unit.
graphical.target: Provides multiple users access to the system via local terminals and/or through the network. Graphical user interface (GUI) access is offered.
multi-user.target: Provides multiple users access to the system via local terminals and/or through the network. No GUI access is offered.
runleveln.target: Provides backward compatibility to SysVinit systems, where n is set to 1–5 for the desired SysV runlevel equivalence.
To get the
default systemd target unit file, employ the following command;
$ systemctl get-default graphical.target
In the above output,
graphical.target is the default system target.
systemctl utility commands deal with setting and jumping between the system’s target. They are as follows:
To change the
default systemd target unit file, use the following command;
$ sudo systemctl set-default multi-user.target ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files === Authentication is required to manage system service or unit files. 1. frank_bett,,, (frank) Password: ==== AUTHENTICATION COMPLETE === Created symlink /etc/systemd/system/default.target → /lib/systemd/system/multi-user.target.
Now, we can check the
default systemd target unit file;
$ systemctl get-default multi-user.target
we obtain that the
default systemd target unit file is
multi-user.target as we have set to default.
Jumping to a different target unit
isolate command is handy for jumping between system targets. When this command is used along with a target name for an argument, all services and processes not enabled in the listed target are stopped.
Jumping to a different target unit i.e.
$ sudo systemctl isolate multi-user.target
Rescue and Emergency targets
When you jump your system to the
rescue target, the system mounts all the local filesystems, only the root user is allowed to log into the system, networking services are turned off, and only a few other services are started.
Jumping to a
emergency target unit;
$ sudo systemctl isolate emergency
When your system goes into emergency mode, the system mounts only the root filesystem, and it mounts it as read-only. When you run
systemctl is-system-running command it will return the
$ systemctl is-system-running maintenance
Stopping the System
Besides the various SysVinit and systemd commands you can use to shut down or reboot a system.
There are a few additional utilities you can employ to enact these tasks:
halt:Stops all processes and shuts down the CPU.
poweroff:Stops all processes, shuts down the CPU, and sends signals to the hardware to power down.
reboot:Stops all processes, shuts down the CPU, and then restarts the system.
shutdown:Stops all processes, shuts down the CPU, and sends signals to the hardware to power down.
On most modern
systemd initialization systems, the
reboot commands are symbolically linked to the
systemctl utility. For example;
sudo systemctl halt:Will halt the system.
sudo systemctl poweroff:Will poweroff the system.
sudo systemctl reboot:Will reboot the system.
The utility with the most flexibility in rebooting or powering off your system is the
shutdown [option] time [message]
The [OPTIONS] include switches;
- halt the system
- power off the system
- reboot the system
-c to cancel the shutdown i.e
The time parameter include the following;
hh:mm:This format specifies the execution time as hour and minutes.
+m:This format specifies how many minutes to wait before execution.
now or +0:This format determines immediate execution.
The [message] parameter lets you modify the shutdown command message sent to
any logged-in users using
This marks the end of our guide on Changing Runlevels and Boot Targets on Linux System. Stay tuned for our next LPIC 101 guides.
You can also check;