After understanding processes and how to manage them, you will now be introduced to systemd, the system that forms the foundation of service management on Ubuntu 26.04 LTS and Fedora Workstation 44. systemd is responsible for starting the system at boot, managing services running in the background, and storing system logs. Through an understanding of systemd, you can control services, configure services to start automatically at boot, and read logs to troubleshoot problems.
What Is an Init System?
When the computer starts, the Linux kernel is loaded first, and then a first program is run to start the entire system. This first program is called the init system. Its job is to prepare the system, start essential services, and manage those services while the system is running. The init system is the very first process to run, so it has PID 1.
Introducing systemd: The Modern Init System
systemd is the modern init system used by almost all major Linux distributions, including Ubuntu 26.04 LTS and Fedora Workstation 44. systemd does not only start services; it also handles log management, task scheduling, network management, and many other functions. systemd works faster than its predecessors because it is able to start services in parallel.
Unit Files: Service, Target, Socket, Timer
systemd manages various system components in the form of units. Each unit is represented by a configuration file, and there are several types of units that are important to know.
| Unit Type | Function |
|---|---|
Service (.service) | Defines a service or background process. |
Target (.target) | Groups other units together to achieve a certain system state. |
Socket (.socket) | Manages sockets for service activation based on connections. |
Timer (.timer) | Schedules tasks periodically, a cron replacement for systemd. |
For day‑to‑day needs, you will most often deal with service and target units. A unit name is usually written without its type suffix, for example ssh instead of ssh.service, because systemctl will automatically add the .service suffix if it is not written out.
Systemd Targets (Replacing Runlevels)
In older init systems, system states were represented by the concept of runlevels. systemd replaces them with targets. The following are some of the main targets you need to know.
| Target | Function |
|---|---|
graphical.target | System with a full graphical interface, the default target for desktop use. |
multi-user.target | System running without a graphical interface, sufficient for server use. |
rescue.target | Rescue mode for repairing a problematic system. |
On Ubuntu and Fedora desktops, the active default target is graphical.target. You can see the current active target with the command systemctl get-default.
Managing Services with systemctl
systemctl is the primary command for managing services and systemd units.
Finding the Service Unit Name
Before controlling a service, you need to know its unit name, because this name is not always the same across distributions. To see all services currently known to systemd, use systemctl list-units.
systemctl list-units --type=serviceAdd the --all option to include inactive services, or pipe it to grep to search for a specific name, for example systemctl list-units --type=service --all | grep ssh.
As an example throughout this section, we will use the SSH server service because it is a common and useful example in real‑world practice. Note that its unit name is different between Ubuntu and Fedora, following the naming conventions of each distribution family.
| Distribution | SSH Unit Name |
|---|---|
| Ubuntu 26.04 LTS | ssh (ssh.service) |
| Fedora Workstation 44 | sshd (sshd.service) |
This difference is one example of why the systemctl list-units command above is useful: instead of memorising the unit name for each distribution, you can directly verify it on the system you are currently using. Also keep in mind that the SSH server (the openssh-server package) is not installed by default on either distribution, so this unit will only appear after you install it, as discussed in Chapter 35. If you want to practise the following commands before reaching Chapter 35, you can replace ssh/sshd in the examples with a service that is already active by default, such as cups (the printing service) or NetworkManager.
systemctl status: Check Service Status
To view the status of a service, use systemctl status.
# Ubuntu 26.04 LTS
systemctl status ssh
# Fedora Workstation 44
systemctl status sshdThis command shows whether the service is active, how long it has been running, and the last few log lines.
systemctl start / stop / restart: Controlling Services
You can start, stop, and restart services using start, stop, and restart. These commands require administrative privileges.
# Ubuntu 26.04 LTS
sudo systemctl start ssh
sudo systemctl stop ssh
sudo systemctl restart ssh
# Fedora Workstation 44
sudo systemctl start sshd
sudo systemctl stop sshd
sudo systemctl restart sshdsystemctl enable / disable: Enable/Disable at Boot
start and stop only apply to the current session. To configure a service to automatically start or not at boot, use enable and disable.
# Ubuntu 26.04 LTS
sudo systemctl enable ssh
sudo systemctl disable ssh
# Fedora Workstation 44
sudo systemctl enable sshd
sudo systemctl disable sshdAn important difference is that enable makes the service permanently active after boot, while start only runs it once in the current session. If you want to both start and enable the service at boot in a single command, use the --now option.
sudo systemctl enable --now sshsystemctl reload: Reload Configuration
When you change a service's configuration file without needing to stop it, use reload.
# Ubuntu 26.04 LTS
sudo systemctl reload ssh
# Fedora Workstation 44
sudo systemctl reload sshdNot all services support reload. If a service does not support it, use restart to apply configuration changes.
Viewing System Logs with journalctl
systemd stores all system logs in a journal, which can be read using journalctl. These logs are very helpful when diagnosing problems.
journalctl -u: Logs per Service
To view logs for a specific service, use the -u option.
# Ubuntu 26.04 LTS
journalctl -u ssh
# Fedora Workstation 44
journalctl -u sshdThis command displays only the logs generated by the SSH service.
journalctl -f: Follow Logs in Real Time
To follow logs in real time as new lines arrive, use -f, similar to tail -f.
journalctl -fPress Ctrl+C to stop following the logs.
journalctl -b: Logs Since the Last Boot
To view logs since the last boot, use the -b option.
journalctl -bYou can also view logs from previous boots by adding a number, for example journalctl -b -1 for the previous boot. This option only displays results from earlier boots if persistent log storage is enabled, which is already active by default on both Ubuntu 26.04 LTS and Fedora Workstation 44.
Filtering by Time
You can filter logs by time range using the --since and --until options.
journalctl --since "2026-08-18 10:00:00" --until "2026-08-18 12:00:00"Time filtering is very useful when you want to narrow down the search to the time a problem occurred.
systemd is the heart of system management on Ubuntu 26.04 LTS and Fedora Workstation 44. Once you have mastered systemctl for controlling services, including how to find the correct unit name on your distribution, and journalctl for reading logs, you have a strong foundation for maintaining a Linux system. In the next section, you will move on to basic networking topics, starting with network concepts and how to view network configuration on Linux.

