Listing systemd units shows what the service manager currently knows about across services, sockets, timers, mounts, devices, paths, scopes, and other unit types. That inventory is useful before managing a unit directly, while tracing boot behavior, or when confirming which exact unit name a dependency, package, or failure message is referring to.

The systemctl list-units command asks the running manager for units currently loaded in memory and prints the LOAD, ACTIVE, and SUB states for each one. This runtime view can include active units, failed units, dependency-pulled units, and units pinned by other programs, but it does not show every unit file installed on disk and it never shows uninstantiated templates such as example@.service.

On busy hosts the default output can be dominated by .device units, so repeated --type filters, name patterns, and --state filters are often the fastest way to narrow the list. Adding --all only expands the loaded set to include inactive units, not the full on-disk inventory, and per-user units live under systemctl --user list-units instead of the system manager.

Steps to list systemd units using systemctl:

  1. Open a terminal session on the Linux host that runs systemd.

    The system instance listing commands are read-only and normally do not require sudo. Use systemctl --user list-units for the logged-in user's manager instead of the system-wide manager.

  2. List the units that the running manager currently has loaded in memory.
    $ systemctl list-units --no-pager
      UNIT                         LOAD   ACTIVE SUB     DESCRIPTION
      -.mount                      loaded active mounted Root Mount
      accounts-daemon.service      loaded active running Accounts Service
      dbus.service                 loaded active running D-Bus System Message Bus
      dbus.socket                  loaded active running D-Bus System Message Bus Socket
      systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories
    ##### snipped #####
    
    223 loaded units listed. Pass --all to see loaded but inactive units, too.
    To show all installed unit files use 'systemctl list-unit-files'.

    The runtime table can mix many unit types in one view, and the LOAD, ACTIVE, and SUB columns describe whether each unit definition was loaded, its high-level state, and its unit-type-specific detailed state.

  3. Add --all when the inventory must include loaded units that are currently inactive.
    $ systemctl list-units --all --no-pager
      UNIT                              LOAD      ACTIVE   SUB     DESCRIPTION
      accounts-daemon.service           loaded    active   running Accounts Service
      apt-daily.service                 loaded    inactive dead    Daily apt download activities
      systemd-ask-password-console.path loaded    inactive dead    Dispatch Password Requests to Console Directory Watch
    ● auditd.service                    not-found inactive dead    auditd.service
      systemd-tmpfiles-clean.timer      loaded    active   waiting Daily Cleanup of Temporary Directories
    ##### snipped #####
    
    525 loaded units listed.
    To show all installed unit files use 'systemctl list-unit-files'.

    --all expands the loaded set, but it still does not replace list-unit-files. A not-found row means a unit name was referenced even though no backing unit file is currently installed.

  4. Repeat --type to keep only the unit categories that matter for the current check.
    $ systemctl list-units --type=service --type=socket --type=timer --no-pager
      UNIT                           LOAD   ACTIVE SUB       DESCRIPTION
      accounts-daemon.service        loaded active running   Accounts Service
      avahi-daemon.service           loaded active running   Avahi mDNS/DNS-SD Stack
      dbus.service                   loaded active running   D-Bus System Message Bus
      dbus.socket                    loaded active running   D-Bus System Message Bus Socket
      systemd-journald.service       loaded active running   Journal Service
      apt-daily.timer                loaded active waiting   Daily apt download activities
      systemd-tmpfiles-clean.timer   loaded active waiting   Daily Cleanup of Temporary Directories
    ##### snipped #####
    
    92 loaded units listed. Pass --all to see loaded but inactive units, too.
    To show all installed unit files use 'systemctl list-unit-files'.

    Repeating --type is the quickest way to drop noisy .device entries. When a specific unit type has its own dedicated listing command, such as systemctl list-timers, that command usually adds more type-specific columns.

  5. Filter by exact name or glob pattern when only a subset of loaded units is relevant.
    $ systemctl list-units 'systemd-*' --no-pager --no-legend
      systemd-binfmt.service          loaded active exited  Set Up Additional Binary Formats
      systemd-journald.service        loaded active running Journal Service
      systemd-logind.service          loaded active running User Login Management
      systemd-oomd.service            loaded active running Userspace Out-Of-Memory (OOM) Killer
      systemd-resolved.service        loaded active running Network Name Resolution
    ##### snipped #####

    Quote glob patterns such as 'systemd-*' so the shell passes them to systemctl unchanged.

  6. Filter by unit state when only inactive, failed, or other specific states matter.
    $ systemctl list-units --all --state=inactive --type=service --no-pager --no-legend
      alsa-state.service           loaded    inactive dead Manage Sound Card State (restore and store)
      apt-daily.service           loaded    inactive dead Daily apt download activities
    ● auditd.service              not-found inactive dead auditd.service
      cloud-init.service          loaded    inactive dead Cloud-init: Network Stage
    ##### snipped #####
    $ systemctl --state=help
    Available unit load states:
    stub
    loaded
    not-found
    ##### snipped #####
    
    Available unit active states:
    active
    reloading
    inactive
    failed
    ##### snipped #####

    systemctl --state=help prints the state values supported by the installed systemd build, which is safer than assuming the available state names never change.

  7. Switch to list-unit-files when the goal is to see installed but currently unloaded units or unit templates.
    $ systemctl list-unit-files 'systemd-*' --no-pager --no-legend
    systemd-ask-password-console.path          static   -
    systemd-ask-password-plymouth.path         static   -
    systemd-backlight@.service                 static   -
    systemd-boot-check-no-failures.service     disabled disabled
    systemd-confext.service                    disabled enabled
    ##### snipped #####

    list-unit-files reads the on-disk inventory, so it can show installed units and templates such as systemd-backlight@.service that never appear in list-units until an instance is actually loaded.