How to List All Running Services Under Systemd in Linux

Linux systems provide a variety of system services (such as process management, login, syslog, cron, etc.) and network services (such as remote login, e-mail, printers, web hosting, data storage, file transfer, domain name resolution (using DNS), dynamic IP address assignment (using DHCP), and much more).

Technically, a service is a process or group of processes (commonly known as daemons) running continuously in the background, waiting for requests to come in (especially from clients).

Linux supports different ways to manage (start, stop, restart, enable auto-start at system boot, etc.) services, typically through a process or service manager. Most if not all modern Linux distributions now use the same process manager: systemd.

What is Systemd?

Systemd is a system and service manager for Linux; a drop-in replacement for the init process, which is compatible with SysV and LSB init scripts, and the systemctl command is the primary tool to manage systemd.

Why List Running Services in Linux?

Knowing the running services on your Linux system is vital for several reasons. It enables you to monitor resource utilization, troubleshoot issues, and manage system performance efficiently. Systemd simplifies this task by offering powerful commands to gather information about active services.

In this guide, we will demonstrate the process of listing all running services under Systemd in Linux, providing a comprehensive walkthrough for users of all experience levels.

Listing Running Services Under SystemD in Linux

When you run the systemctl command without any arguments, it will display a list of all loaded systemd units (read the systemd documentation for more information about systemd units) including services, showing their status (whether active or not).

# systemctl 
List Systemctl Units in Linux
List Systemctl Units in Linux

List All Units in systemctl

To list all loaded services on your system (whether active; running, exited, or failed, use the list-units subcommand and --type switch with a value of service.

# systemctl list-units --type=service
OR
# systemctl --type=service
List All Services Under Systemd
List All Services Under Systemd

And to list all loaded but active services, both running and those that have exited, you can add the --state option with a value of active, as follows.

# systemctl list-units --type=service --state=active
OR
# systemctl --type=service --state=active
List All Active Running Services in Systemd
List All Active Running Services in Systemd

List Running Services in systemctl

But to get a quick glance at all running services (i.e. all loaded and actively running services), run the following command.

# systemctl list-units --type=service --state=running 
OR
# systemctl --type=service --state=running
List Running Services in Systemd
List Running Services in Systemd

Let’s explore the key terms related to Systemd units and their status:

  • Unit – A unit could be a service, a socket, a device, or various other entities.
  • Load – It indicates whether the unit is loaded or not. A unit can be loaded but not necessarily active.
  • Active – It shows whether the unit is actively running or whether it has encountered issues and is in a failed or inactive state.
  • SUB – It provides additional details about the specific state of the unit. For services, it might indicate whether the service is running (running), stopped (exited), or encountering issues (failed).
  • Description – It helps users identify and understand the purpose of the unit without delving into the detailed configuration files.

Create an Alias for systemctl

If you frequently use the previous command, you can create an alias command in your ~/.bashrc file as shown, to easily invoke it.

# vim ~/.bashrc

Then add the following line under the list of aliases as shown in the screenshot.

alias running_services='systemctl list-units  --type=service  --state=running'
Create a Alias for Long Command
Create an Alias for Long Command

Save the changes in the file and close it. From now onwards, use the “running_services” command to view a list of all loaded, actively running services on your server.

# running_services	#use the Tab completion 
View All Running Services
View All Running Services

Find a Port a Process is Listening On

Besides, an important aspect of services is the port they use. To determine the port a daemon process is listening on, you can use the netstat or ss command as shown.

Where the flag -l means print all listening sockets, -t displays all TCP connections, -u shows all UDP connections, -n means print numeric port numbers (instead of application names) and -p means show the application name.

# netstat -ltup | grep zabbix_agentd
OR
# ss -ltup | grep zabbix_agentd

The fifth column shows the socket: Local Address:Port. In this case, the process zabbix_agentd is listening on port 10050.

Determine Process Port
Determine Process Port

Listing Running Firewall Services

Also, if your server has a firewall service running, which controls how to block or allow traffic to or from selected services or ports, you can list services or ports that have been opened in the firewall, using the firewall-cmd or ufw command (depending on the Linux distributions you are using) as shown.

# firewall-cmd --list-services   [FirewallD]
# firewall-cmd --list-ports

$ sudo ufw status     [UFW Firewall]
List Open Services and Ports on Firewall
List Open Services and Ports on the Firewall

That’s all for now! In this guide, we demonstrated how to view running services under systemd in Linux. We also covered how to check the port service is listening on and how to view services or ports opened in the system firewall.

Do you have any additions to make or questions? If yes, reach us using the comment form below.

Hey TecMint readers,

Exciting news! Every month, our top blog commenters will have the chance to win fantastic rewards, like free Linux eBooks such as RHCE, RHCSA, LFCS, Learn Linux, and Awk, each worth $20!

Learn more about the contest and stand a chance to win by sharing your thoughts below!

Aaron Kili
Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge.

Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Join the TecMint Weekly Newsletter (More Than 156,129 Linux Enthusiasts Have Subscribed)
Was this article helpful? Please add a comment or buy me a coffee to show your appreciation.

4 Comments

Leave a Reply
  1. Instead of adding the alias to the .bashrc file put it in .bash_aliases. I have quite a few aliases that I use frequently and it keeps them very neat.

    This is an excerpt from the .bashrc file:

    # Alias definitions.
    # You may want to put all your additions into a separate file like
    # ~/.bash_aliases, instead of adding them here directly.”

    Other than that one little thing you have a pretty great article.

    Thanks,
    john

    Reply
  2. Hi Arron,

    The only thing that could have made your article better would have been defining the difference between LOAD, ACTIVE, and SUB.

    What does it mean to be loaded?
    What does it mean to be active?

    Running seems self-explanatory, but the idea of “active” can be a bit ambiguous.

    Thank you for your article. Great job.

    Oh, by the way, my interest in your article comes from a Service library that I am creating.

    Git hub.

    https://github.com/delturge/Bash-Library/blob/master/Entities/Service.sh

    LinkedIn

    Anthony

    Reply
    • @Anthony

      True, but you can always refer to the systemd documentation or manual page for more detail. Thanks for the feedback and for sharing information about your project. We will check it out.

      Reply

Got Something to Say? Join the Discussion...

Thank you for taking the time to share your thoughts with us. We appreciate your decision to leave a comment and value your contribution to the discussion. It's important to note that we moderate all comments in accordance with our comment policy to ensure a respectful and constructive conversation.

Rest assured that your email address will remain private and will not be published or shared with anyone. We prioritize the privacy and security of our users.