Running the systemctl command alone shows us a list of loaded units. But what if we want to see a list of just one unit type or units in a certain state?
This tutorial discusses how to list all enabled services using systemctl (the systemd control system and service manager). We talk about the list-unit-files subcommand and a few other handy systemctl subcommands and options.
2. Listing Enabled Services
The systemctl command comes with seven groups of subcommands, one of which is the Unit File Commands. list-unit-files is one of systemctl‘s Unit File Commands. As its name says, it lists all the unit files installed on the system.
So, what are unit files? A unit file is basically an ini file containing the configuration of a service, snapshot, timer, slice, scope, socket, or any other unit monitored and managed by systemd.
2.1. Listing Unit Files
As mentioned earlier, running systemctl alone displays loaded units:
$ systemctl UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Forma> sys-devices-pci0000:00-0000:00:01.1-ata3-host2-target2:0:0-2:0:0:0-block-sr0.device loaded active plugged VBOX_CD-ROM VBox_GAs_7.0.6 sys-devices-pci0000:00-0000:00:03.0-net-enp0s3.device loaded active plugged 82540EM Gigabit Ethernet Contro> ...truncated... ● apache2.service loaded failed failed The Apache HTTP Server ...truncated... phpsessionclean.timer loaded active waiting Clean PHP session files every 3> systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Dire> ...truncated... lines 97-132/132 (END)
But when we add the list-unit-files subcommand, we get a list of all the unit files (not units) in all the possible unit file states:
$ systemctl list-unit-files UNIT FILE STATE VENDOR PRESET proc-sys-fs-binfmt_misc.automount static - -.mount generated - dev-hugepages.mount static - ...truncated... docker-1adcb3e4a2b014b08de2adea0e0bcc65c7faf535034679393e2c3e90c1763d7c.scope transient - session-1.scope transient - anacron.service enabled enabled apache-htcacheclean.service disabled enabled ...truncated... cryptdisks.service masked enabled dbus-fi.w1.wpa_supplicant1.service alias - ...truncated... systemd-fsck-root.service enabled-runtime enabled ...truncated... 250 unit files listed. lines 224-253/253 (END)
2.2. Listing Unit Files by State or Type
Using the —state flag, we can get a list of all unit files in a particular state:
$ systemctl list-unit-files --state=disabled UNIT FILE STATE VENDOR PRESET proc-sys-fs-binfmt_misc.mount disabled disabled apache-htcacheclean.service disabled enabled ...truncated... poweroff.target disabled disabled reboot.target disabled enabled 27 unit files listed.
When we run list-unit-files with the —type flag, we can get a list of all unit files of a particular unit type:
$ systemctl list-unit-files --type=mount UNIT FILE STATE VENDOR PRESET -.mount generated - dev-hugepages.mount static - dev-mqueue.mount static - media-cdrom0.mount generated - proc-sys-fs-binfmt_misc.mount disabled disabled sys-fs-fuse-connections.mount static - sys-kernel-config.mount static - sys-kernel-debug.mount static - sys-kernel-tracing.mount static - 9 unit files listed.
2.3. Listing Enabled Service Unit Files
Finally, we can list all enabled services from systemctl when we combine the list-unit-files subcommand with —type=service and —state=enabled:
$ systemctl list-unit-files --type=service --state=enabled UNIT FILE STATE VENDOR PRESET anacron.service enabled enabled apache2.service enabled enabled apparmor.service enabled enabled atd.service enabled enabled bluetooth.service enabled enabled ...truncated... unattended-upgrades.service enabled enabled vsftpd.service enabled enabled wpa_supplicant.service enabled enabled 23 unit files listed.
2.4. Listing Disabled and Enabled Service Unit Files
By slightly modifying the previous command, we can also get a list of all enabled and disabled services:
$ systemctl list-unit-files --type=service --state=disabled,enabled UNIT FILE STATE VENDOR PRESET anacron.service enabled enabled apache-htcacheclean.service disabled enabled [email protected] disabled enabled ...truncated... [email protected] disabled enabled wpa_supplicant.service enabled enabled wpa_supplicant@.service disabled enabled 41 unit files listed.
We could try grepping the list-unit-files command with ‘enabled’ as our pattern:
$ systemctl list-unit-files --type=service | grep enabled anacron.service enabled enabled apache-htcacheclean.service disabled enabled [email protected] disabled enabled ...truncated... [email protected] disabled enabled wpa_supplicant.service enabled enabled [email protected] disabled enabled x11-common.service masked enabled
However, as we see above, this will include non-enabled services whose vendor presets are set to enabled. Of course, this isn’t ideal if we only want to see services that are actually enabled.
3. Listing Active Services
While list-unit-files displays a list of all unit files, list-units shows a list of units currently loaded in memory – the same thing we get when we run systemctl alone. Basically, when we run systemctl list-units, our output would be the same as when we ran systemctl.
Running the following command shows us a list of active units currently loaded on our system:
$ systemctl --state=active
The command below does the same thing as the one above:
$ systemctl list-units --state=active
Modifying any of those two commands by adding —type=service gives us a list of all active services currently loaded on the system:
$ systemctl --state=active --type=service UNIT LOAD ACTIVE SUB DESCRIPTION apparmor.service loaded active exited Load AppArmor profiles atd.service loaded active running Deferred execution scheduler ...truncated... wpa_supplicant.service loaded active running WPA supplicant 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. 40 loaded units listed. lines 17-46/46 (END)
We can produce the same result with this command:
$ systemctl list-units --state=active --type=service
In this article, we discussed how to display a list of all enabled service unit files from systemctl. We also saw how to list all active, loaded services.
Trying to list all enabled systemd services by grepping the word ‘enabled’ to systemctl list-unit-files –type=service may display a list of enabled services. However, because it may also display services whose preset states are set to enabled but are currently not enabled, doing so isn’t optimal.