How can I list all enabled services from systemctl?

I know running systemctl command by itself lists all services, but I would like to only get the enabled ones.

  • what do you mean by enabled? You mean services that are running?
    – Gen
    Jul 5 '16 at 18:28
  • 12
    @Gen enabling a service is quite different from starting it. See man systemctl.
    – Jos
    Jul 5 '16 at 18:35
  • 6
    Fascinating. The lowest rated answer is the most "correct" answer, even though it is clearly not the best answer. This excellent question (and its answers) is an interesting example of how systemd violates the long-standing (and brilliant) design principles of Unix & Co. @FelipeAlvarez complains that the most-accepted answer assumes systemd follows the unix design philosopy, but systemd/systemctl can do exactly what he wants (most experienced users will just consider that complete bloat). I begin to see more clearly why Linus Torvalds is so vehemently critical of systemd.
    – BISI
    Dec 13 '18 at 18:20

systemctl list-unit-files | grep enabled will list all enabled ones.

If you want which ones are currently running, you need systemctl | grep running.

Use the one you're looking for. Enabled, doesn't mean it's running. And running doesn't mean it's enabled. They are two different things.

Enabled means the system will run the service on the next boot. So if you enable a service, you still need to manually start it, or reboot and it will start.

Running means it's actually running right now, but if it's not enabled, it won't restart when you reboot.

  • 9
    annoying to have to use an external tool (grep) to show this vital information. But thank you for showing us the way :) Feb 15 '17 at 2:43
  • 48
    @FelipeAlvarez Correct. But that's how Linux works. Many small binaries that work well with each other. systemctl does what is asked, it lists services. There is no filtering command built-in to systemctl because grep already exists and can do that well with any program's output. It's how it's always been :)
    – Delorean
    Feb 16 '17 at 16:01
  • 8
    I agree and so it should be. But, systemd already tries to do SO much that I wonder why it can't list enabled services? Feb 18 '17 at 0:45
  • 7
    systemctl | grep running do not list anything to me! Even if something is running is only listed as for his status like: enabled, disabled, masked, static
    – Cirelli94
    Apr 13 '17 at 10:34
  • 41
    Simpler: systemctl list-unit-files --state=running
    – Will
    Sep 2 '17 at 10:40

man systemctl states:


The argument should be a comma-separated list of unit LOAD, SUB, or ACTIVE states. When listing units, show only those in the specified states. Use --state=failed to show only failed units.


LOAD: Reflects whether the unit definition was properly loaded.
ACTIVE: The high-level unit activation state, i.e. generalization of SUB.
SUB: The low-level unit activation state, values depend on unit type.

Though you can also use this to only show enabled units with:

systemctl list-unit-files --state=enabled

If a unit is enabled that means that the system will start it on startup. Though setting something to enabled doesn't actually also start it so you will need to do that manually, or reboot the system after setting it to enabled.

  • 8
    To enable and start at the same time: systemctl enable --now ... Jul 29 '17 at 20:24
  • 2
    --state=enabled has no effect on systemd version 215 (on Raspbian 8 Jessie), but it does work on systemd version 229 (on Ubuntu 16.04.03 Xenial).
    – mpb
    Dec 17 '17 at 22:15
  • @mpb: But yet it works perfectly fine on version 235 on Arch Linux.
    – user364819
    Dec 17 '17 at 23:07
  • You can also check --state=generated for generated unit files that might be running (the pihole-FTL service works this way, for example).
    – mgalgs
    Aug 26 at 17:24

To list all the systemd service which are in state=active and sub=running

systemctl list-units --type=service --state=running

To list all the systemd serice which are in state=active and sub either running or exited

systemctl list-units --type=service --state=active

To see 'enabled' services including these that are still under upstart/init run:

systemctl list-unit-files --type service --state enabled,generated

To see all of the currently running services run:

systemctl list-units --type service --state running
  • Unfortunately the names of the services can be different in the two lists - e.g. sshd vs. ssh and syslog vs. rsyslog.
    – OrangeDog
    Jan 11 '19 at 18:35
  • The only "non grep" right answer. Though not sure why upstart is mentioned...
    – rogerdpack
    Jul 5 '19 at 16:53

Also overview of all active and failed services:

systemctl list-units --type service --state running,failed

There is a good GUI application called Stacer where you can manage all the services.

enter image description here

Check its Github link Stacer Github
Also check Web for more info


In addition to the current answers, I use the following to get just the names of the services:

systemctl list-units --type=service --state=active,running | awk '/.*\.service/ {print $1}'

Rather than the tabular format, this makes it easier to pipe just those services to another program

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.