Systemctl command to display a summary of running services

Solution 1:

You could use some of systemctl's options:

-t, --type=
       The argument should be a comma-separated list of unit types such as
       service and socket.

       If one of the arguments is a unit type, when listing units, limit
       display to certain unit types. Otherwise, units of all types will
       be shown.

       As a special case, if one of the arguments is help, a list of
       allowed values will be printed and the program will exit.

   --state=
       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.

       As a special case, if one of the arguments is help, a list of
       allowed values will be printed and the program will exit.

So probably you want:

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

Which lists all active services including those which have exited. If you're only after the ones running at this moment you could use:

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

Solution 2:

It is (see man 1 systemctl):

systemctl list-units | grep -E 'service.*running'

or (see also man 8 service)

service --status-all

Where the [+] indicates services which are actually running.

Solution 3:

After looking around for longer than necessary I came up with this slightly different method of determining running services. It also shows how to count the number of running services. This way ensures that its not accidentally catching something with the word running or service in the services name itself. Although this method may be hacky, it forces you to learn about regex and the best GNU/BSD has to offer with awk/sed.

# Output all active services:
systemctl -t service --state=active --no-pager --no-legend

# Count of all active services:
systemctl -t service --state=active --no-pager --no-legend | grep -c -

# Output all running services:
systemctl -t service --state=active --no-pager --no-legend | egrep '^*\.service.*running'

# Count of all running services:
systemctl -t service --state=active --no-pager --no-legend | egrep '^*\.service.*running' -c -

# Output only the service and its description:
systemctl -t service --state=active --no-pager --no-legend | egrep '^*\.service.*running' | awk 'BEGIN { FS = " ";} {for (i = 2; i <= 4; i++) { $i = "" }; print}'