What Is systemd? A Beginner’s Guide to modern Linux Init System

If you’ve ever booted up a contemporary Linux system, chances are you’ve interacted with systemd, even if you didn’t realize it. As one of the most foundational components in many Linux distributions today, systemd manages how your system starts, runs services, and shuts down. But what exactly is it, and why is it important?

What Is an Init System?

An init system (short for initialization) is the first user-space process that runs once the Linux kernel has finished its own initialization. It continues to run as PID 1 and is responsible for bringing up and maintaining all other processes.

Before systemd, systems like SystemV and Upstart were commonly used. These systems handled service startup in a more linear or event-driven manner, often lacking the parallelization and dependency management needed for fast, reliable boot times. Also, these old fashioned systems used to deal with combersome bash scripts to make things happen. So it was tricky to customize the service’s initialization process because the one needed to have a good grasp of bash programming. Happily, these dark times have gone.

Enter systemd

Developed by Lennart Poettering and Kay Sievers in 2010, systemd was designed to address the shortcomings of previous init systems. It brings a unified approach to initializing a Linux system and managing system services.

Key goals of systemd:

  • Parallel service startup to improve boot times
  • On-demand starting of daemons
  • Dependency-based service control logic
  • Better logging integration via journald
  • Resource control using cgroups (control groups)

Core Components of systemd

Systemd is not just a single binary—it’s a suite of tools and daemons. Some core components include:

  • systemd: The init system itself.
  • systemctl: The primary command-line tool to manage services.
  • journalctl: View logs collected by systemd-journald.
  • systemd-analyze: Analyze boot performance.
  • loginctl: Manage user sessions.
  • and many more…

Managing Services with systemctl

With systemctl, you can start, stop, enable, disable, and check the status of services:

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

This replaces older commands like /etc/init.d/nginx start.

Anatomy of a Unit File

Systemd uses unit files to define how services should behave. These are typically stored in /etc/systemd/system/(custom ones) or /lib/systemd/system/(installed from the packages).

Example of a simple unit file:

[Unit]
Description=My Example Service
After=network.target

[Service]
ExecStart=/usr/bin/my-service
Restart=always

[Install]
WantedBy=multi-user.target

Logging with journalctl

Instead of using traditional syslog, systemd provides journald, a binary logging system:

journalctl -u nginx
journalctl -b
journalctl --since "2 hours ago"

You can use filters to trace issues with services or boot problems easily.

Why Is systemd Controversial?

Despite its widespread adoption, systemd has not been free from criticism. Some in the Unix philosophy camp argue it violates the “do one thing well” principle by bundling too much functionality. Others are concerned about its complexity and tight integration into the system.

Still, its practical benefits—faster boot, better service management, and logging—make it the default in most major distributions (like Ubuntu, Debian, Fedora, Arch Linux, Rocky, you name it…).

Some final thoughts

Systemd is more than just a way to boot your machine—it’s a powerful and extensible system and service manager for Linux. For beginners and experienced users alike, understanding systemd is essential to mastering modern Linux administration.

In upcoming posts, I’ll describe the following:

  • Writing custom unit files
  • Debugging boot issues with systemd-analyze
  • Using systemd-timers as cron replacements
  • Integrating systemd with containers (Yes, it is possible!)

Stay Epic!

5 thoughts on “What Is systemd? A Beginner’s Guide to modern Linux Init System”

  1. Pingback: Systemd Units: Types, Structure, and Anatomy - OpsVoice. Yet another tech cave

  2. Pingback: Writing a Custom systemd Service - OpsVoice. Yet another tech cave

  3. Pingback: Systemd timers: A Modern Replacement for cron - OpsVoice

  4. Pingback: Systemd Target Units: Managing System States Gracefully - OpsVoice

  5. Pingback: Managing Systemd Tmpfiles - OpsVoice

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top