systemctl / systemd Keyboard Shortcuts & Commands (75)
Complete collection of 75 systemctl / systemd keyboard shortcuts and commands. Browse all shortcuts organized by category with our interactive search tool.
systemd runs nearly every current Linux distribution, and systemctl plus journalctl are how services are started, watched and debugged. The ten commands here cover a day of server work. The notes explain the pair that confuses newcomers — start versus enable — and the order of an investigation when a service will not stay up.
Related Shortcut Pages
Search all systemctl / systemd shortcuts interactively with real-time filtering
Open Interactive Shortcut FinderUnit commands: listing and status (12)
| Shortcut | Action | What it does |
|---|---|---|
| systemctl list-units [PATTERN...] | List units that systemd currently has in memory. | List units that systemd currently has in memory. This includes units that are either referenced directly or through a dependency, units that are pinned by applications programmatically, or units that were active in the past and have failed. |
| systemctl list-automounts [PATTERN...] | List automount units currently in memory, ordered by mount path. | List automount units currently in memory, ordered by mount path. If one or more PATTERNs are specified, only automount units matching one of them are shown. |
| systemctl list-paths [PATTERN...] | List path units currently in memory, ordered by path. | List path units currently in memory, ordered by path. If one or more PATTERNs are specified, only path units matching one of them are shown. |
| systemctl list-sockets [PATTERN...] | List socket units currently in memory, ordered by listening address. | List socket units currently in memory, ordered by listening address. If one or more PATTERNs are specified, only socket units matching one of them are shown. |
| systemctl list-timers [PATTERN...] | List timer units currently in memory, ordered by the time they elapse next. | List timer units currently in memory, ordered by the time they elapse next. If one or more PATTERNs are specified, only units matching one of them are shown. |
| systemctl is-active PATTERN... | Check whether any of the specified units are active (i.e. | Check whether any of the specified units are active (i.e. running). Returns an exit code 0 if at least one is active, or non-zero otherwise. Unless --quiet is specified, this will also print the current unit state to standard output. |
| systemctl is-failed [PATTERN...] | Check whether any of the specified units is in the "failed" state. | Check whether any of the specified units is in the "failed" state. If no unit is specified, check whether there are any failed units or ordering cycles, which corresponds to the "degraded" state returned by is-system-running. |
| systemctl status [PATTERN...|PID...] | Show runtime status information about the whole system or about one or more units followed by most recent... | Show runtime status information about the whole system or about one or more units followed by most recent log data from the journal. |
| systemctl show [PATTERN...|JOB...] | Show properties of one or more units, jobs, or the manager itself. | Show properties of one or more units, jobs, or the manager itself. If no argument is specified, properties of the manager will be shown. |
| systemctl cat PATTERN... | Show backing files of one or more units. | Show backing files of one or more units. Prints the "fragment" and "drop-ins" (source files) of units. Each file is preceded by a comment which includes the file name. |
| systemctl help PATTERN...|PID... | Show manual pages for one or more units, if available. | Show manual pages for one or more units, if available. If a PID is given, the manual pages for the unit the process belongs to are shown. |
| systemctl list-dependencies [UNIT...] | Shows units required and wanted by the specified units. | Shows units required and wanted by the specified units. This recursively lists units following the Requires=, Requisite=, Wants=, ConsistsOf=, BindsTo=, and Upholds= dependencies. If no units are specified, default.target is implied. |
Unit commands: start, stop and control (20)
| Shortcut | Action | What it does |
|---|---|---|
| systemctl start PATTERN... | Start (activate) one or more units specified on the command line. | Start (activate) one or more units specified on the command line. |
| systemctl stop PATTERN... | Stop (deactivate) one or more units specified on the command line. | Stop (deactivate) one or more units specified on the command line. |
| systemctl reload PATTERN... | Asks all units listed on the command line to reload their configuration. | Asks all units listed on the command line to reload their configuration. Note that this will reload the service-specific configuration, not the unit configuration file of systemd. |
| systemctl restart PATTERN... | Stop and then start one or more units specified on the command line. | Stop and then start one or more units specified on the command line. If the units are not running yet, they will be started. |
| systemctl try-restart PATTERN... | Stop and then start one or more units specified on the command line if the units are running. | Stop and then start one or more units specified on the command line if the units are running. This does nothing if units are not running. |
| systemctl enqueue-marked | Enqueue start/stop/restart/reload jobs for all units that have the respective "needs-*" markers set. | Enqueue start/stop/restart/reload jobs for all units that have the respective "needs-*" markers set. When a unit marked for reload does not support reload, restart will be queued. Those properties can be set using set-property Markers=.... |
| systemctl reload-or-restart PATTERN... | Reload one or more units if they support it. | Reload one or more units if they support it. If not, stop and then start them instead. If the units are not running yet, they will be started. |
| systemctl try-reload-or-restart PATTERN... | Reload one or more units if they support it. | Reload one or more units if they support it. If not, stop and then start them instead. This does nothing if the units are not running. |
| systemctl isolate UNIT | Start the unit specified on the command line and its dependencies and stop all others, unless they have... | Start the unit specified on the command line and its dependencies and stop all others, unless they have IgnoreOnIsolate=yes (see systemd.unit(5)). If a unit name with no extension is given, an extension of ".target" will be assumed. |
| systemctl kill PATTERN... | Send a UNIX process signal to one or more processes of the unit. | Send a UNIX process signal to one or more processes of the unit. Use --kill-whom= to select which process to send the signal to. Use --signal= to select the signal to send. |
| systemctl clean PATTERN... | Remove the configuration, state, cache, logs, runtime or file descriptor store data of the specified units. | Remove the configuration, state, cache, logs, runtime or file descriptor store data of the specified units. Use --what= to select which kind of resource to remove. |
| systemctl freeze PATTERN... | Freeze one or more units specified on the command line using cgroup freezer | Freeze one or more units specified on the command line using cgroup freezer |
| systemctl thaw PATTERN... | Thaw (unfreeze) one or more units specified on the command line. | Thaw (unfreeze) one or more units specified on the command line. |
| systemctl set-property UNIT PROPERTY=VALUE... | Set the specified unit properties at runtime where this is supported. | Set the specified unit properties at runtime where this is supported. This allows changing configuration parameter properties such as resource control settings at runtime. |
| systemctl bind UNIT PATH [PATH] | Bind-mounts a file or directory from the host into the specified unit's mount namespace. | Bind-mounts a file or directory from the host into the specified unit's mount namespace. |
| systemctl mount-image | Mounts an image from the host into the specified unit's mount namespace. | Mounts an image from the host into the specified unit's mount namespace. The first path argument is the source image on the host, the second path argument is the destination directory in the unit's mount namespace (i.e. |
| systemctl service-log-level SERVICE [LEVEL] | If the LEVEL argument is not given, print the current log level as reported by service SERVICE. | If the LEVEL argument is not given, print the current log level as reported by service SERVICE. |
| systemctl service-log-target SERVICE [TARGET] | If the TARGET argument is not given, print the current log target as reported by service SERVICE. | If the TARGET argument is not given, print the current log target as reported by service SERVICE. |
| systemctl reset-failed [PATTERN...] | Reset the "failed" state of the specified units, or if no unit name is passed, reset the state of all units. | Reset the "failed" state of the specified units, or if no unit name is passed, reset the state of all units. When a unit fails in some way (i.e. |
| systemctl whoami [PID...] | Returns the units the processes referenced by the given PIDs belong to (one per line). | Returns the units the processes referenced by the given PIDs belong to (one per line). If no PID is specified returns the unit the systemctl command is invoked in. |
Unit file commands (15)
| Shortcut | Action | What it does |
|---|---|---|
| systemctl list-unit-files [PATTERN...] | List unit files installed on the system, in combination with their enablement state (as reported by... | List unit files installed on the system, in combination with their enablement state (as reported by is-enabled). |
| systemctl enable UNIT...|PATH... | Enable one or more units or unit instances. | Enable one or more units or unit instances. This will create a set of symlinks, as encoded in the [Install] sections of the indicated unit files. |
| systemctl disable UNIT... | Disables one or more units. | Disables one or more units. This removes all symlinks to the unit files backing the specified units from the unit configuration directory, and hence undoes any changes made by enable or link. |
| systemctl reenable UNIT... | Reenable one or more units, as specified on the command line. | Reenable one or more units, as specified on the command line. This is a combination of disable and enable and is useful to reset the symlinks a unit file is enabled with to the defaults configured in its [Install] section. |
| systemctl preset UNIT... | Reset the enable/disable status of one or more unit files, as specified on the command line, to the... | Reset the enable/disable status of one or more unit files, as specified on the command line, to the defaults configured in the preset policy files. |
| systemctl preset-all | Resets all installed unit files to the defaults configured in the preset policy file (see above). | Resets all installed unit files to the defaults configured in the preset policy file (see above). |
| systemctl is-enabled UNIT... | Checks whether any of the specified unit files are enabled (as with enable). | Checks whether any of the specified unit files are enabled (as with enable). Returns an exit code of 0 if at least one is enabled, non-zero otherwise. Prints the current enable status (see table). To suppress this output, use --quiet. |
| systemctl mask UNIT... | Mask one or more units, as specified on the command line. | Mask one or more units, as specified on the command line. This will link these unit files to /dev/null, making it impossible to start them. |
| systemctl unmask UNIT... | Unmask one or more unit files, as specified on the command line. | Unmask one or more unit files, as specified on the command line. This will undo the effect of mask. This command expects valid unit names only, it does not accept unit file paths. |
| systemctl link PATH... | Link a unit file that is not in the unit file search path into the unit file search path. | Link a unit file that is not in the unit file search path into the unit file search path. This command expects an absolute path to a unit file. The effect of this may be undone with disable. |
| systemctl revert UNIT... | Revert one or more unit files to their vendor versions. | Revert one or more unit files to their vendor versions. This command removes drop-in configuration files that modify the specified units, as well as any user-configured unit file that overrides a matching vendor supplied unit file. |
| systemctl add-wants | Adds "Wants=" or "Requires=" dependencies, respectively, to the specified TARGET for one or more units. | Adds "Wants=" or "Requires=" dependencies, respectively, to the specified TARGET for one or more units. |
| systemctl edit UNIT... | Edit or replace a drop-in snippet or the main unit file, to extend or override the definition of the... | Edit or replace a drop-in snippet or the main unit file, to extend or override the definition of the specified unit. |
| systemctl get-default | Return the default target to boot into. | Return the default target to boot into. This returns the target unit name default.target is aliased (symlinked) to. |
| systemctl set-default TARGET | Set the default target to boot into. | Set the default target to boot into. This sets (symlinks) the default.target alias to the given target unit. |
Machine and job commands (3)
| Shortcut | Action | What it does |
|---|---|---|
| systemctl list-machines [PATTERN...] | List the host and all running local containers with their state. | List the host and all running local containers with their state. If one or more PATTERNs are specified, only containers matching one of them are shown. |
| systemctl list-jobs [PATTERN...] | List jobs that are in progress. | List jobs that are in progress. If one or more PATTERNs are specified, only jobs for units matching one of them are shown. |
| systemctl cancel [JOB...] | Cancel one or more jobs specified on the command line by their numeric job IDs. | Cancel one or more jobs specified on the command line by their numeric job IDs. If no job ID is specified, cancel all pending jobs. |
Environment commands (4)
| Shortcut | Action | What it does |
|---|---|---|
| systemctl show-environment | Dump the systemd manager environment block. | Dump the systemd manager environment block. This is the environment block that is passed to all processes the manager spawns. The environment block will be dumped in straightforward form suitable for sourcing into most shells. |
| systemctl set-environment VARIABLE=VALUE... | Set one or more service manager environment variables, as specified on the command line. | Set one or more service manager environment variables, as specified on the command line. This command will fail if variable names and values do not conform to the rules listed above. |
| systemctl unset-environment VARIABLE... | Unset one or more systemd manager environment variables. | Unset one or more systemd manager environment variables. If only a variable name is specified, it will be removed regardless of its value. If a variable and a value are specified, the variable is only removed if it has the specified value. |
| systemctl import-environment VARIABLE... | Import all, one or more environment variables set on the client into the systemd manager environment block. | Import all, one or more environment variables set on the client into the systemd manager environment block. If a list of environment variable names is passed, client-side values are then imported into the manager's environment block. |
Manager state commands (5)
| Shortcut | Action | What it does |
|---|---|---|
| systemctl daemon-reload | Reload the systemd manager configuration. | Reload the systemd manager configuration. This will rerun all generators (see systemd.generator(7)), reload all unit files, and recreate the entire dependency tree. |
| systemctl daemon-reexec | Reexecute the systemd manager. | Reexecute the systemd manager. This will serialize the manager state, reexecute the process and deserialize the state again. This command is of little use except for debugging and package upgrades. |
| systemctl log-level [LEVEL] | If no argument is given, print the current log level of the manager. | If no argument is given, print the current log level of the manager. |
| systemctl log-target [TARGET] | If no argument is given, print the current log target of the manager. | If no argument is given, print the current log target of the manager. |
| systemctl service-watchdogs [yes|no] | If no argument is given, print the current state of service runtime watchdogs of the manager. | If no argument is given, print the current state of service runtime watchdogs of the manager. |
System commands (16)
| Shortcut | Action | What it does |
|---|---|---|
| systemctl is-system-running | Checks whether the system is operational. | Checks whether the system is operational. This returns success (exit code 0) when the system is fully up and running, specifically not in startup, shutdown or maintenance mode, and with no failed services. |
| systemctl default | Enter default mode. | Enter default mode. This is equivalent to systemctl isolate default.target. This operation is blocking by default, use --no-block to request asynchronous behavior. |
| systemctl rescue | Enter rescue mode. | Enter rescue mode. This is equivalent to systemctl isolate rescue.target. This operation is blocking by default, use --no-block to request asynchronous behavior. |
| systemctl emergency | Enter emergency mode. | Enter emergency mode. This is equivalent to systemctl isolate emergency.target. This operation is blocking by default, use --no-block to request asynchronous behavior. |
| systemctl halt | Shut down and halt the system. | Shut down and halt the system. This is mostly equivalent to systemctl start halt.target --job-mode=replace-irreversibly --no-block, but also prints a wall message to all users. |
| systemctl poweroff | Shut down and power-off the system. | Shut down and power-off the system. This is mostly equivalent to systemctl start poweroff.target --job-mode=replace-irreversibly --no-block, but also prints a wall message to all users. |
| systemctl reboot | Shut down and reboot the system. | Shut down and reboot the system. |
| systemctl kexec | Shut down and reboot the system via kexec. | Shut down and reboot the system via kexec. This command will load a kexec kernel if one was not loaded yet or fail. |
| systemctl soft-reboot | Shut down and reboot userspace. | Shut down and reboot userspace. This is equivalent to systemctl start soft-reboot.target --job-mode=replace-irreversibly --no-block. |
| systemctl exit [EXIT_CODE] | Ask the service manager to quit. | Ask the service manager to quit. This is only supported for user service managers (i.e. in conjunction with the --user option) or in containers and is equivalent to poweroff otherwise. |
| systemctl switch-root [ROOT [INIT]] | Switches to a different root directory and executes a new system manager process below it. | Switches to a different root directory and executes a new system manager process below it. This is intended for use in the initrd, and will transition from the initrd's system manager process (a.k.a. |
| systemctl sleep | Put the system to sleep, through suspend, hibernate, hybrid-sleep, or suspend-then-hibernate. | Put the system to sleep, through suspend, hibernate, hybrid-sleep, or suspend-then-hibernate. The sleep operation to use is automatically selected by systemd-logind.service(8). |
| systemctl suspend | Suspend the system. | Suspend the system. This will trigger activation of the special target unit suspend.target. This command is asynchronous, and will return after the suspend operation is successfully enqueued. |
| systemctl hibernate | Hibernate the system. | Hibernate the system. This will trigger activation of the special target unit hibernate.target. This command is asynchronous, and will return after the hibernation operation is successfully enqueued. |
| systemctl hybrid-sleep | Hibernate and suspend the system. | Hibernate and suspend the system. This will trigger activation of the special target unit hybrid-sleep.target. This command is asynchronous, and will return after the hybrid sleep operation is successfully enqueued. |
| systemctl suspend-then-hibernate | Suspend the system and hibernate it when the battery is low, or when the delay specified in... | Suspend the system and hibernate it when the battery is low, or when the delay specified in systemd-sleep.conf elapsed. This will trigger activation of the special target unit suspend-then-hibernate.target. |
Frequently Asked Questions
What are the most useful systemctl / systemd shortcuts?
systemctl / systemd has 10 essential shortcuts and commands. Visit the interactive shortcut finder at shortcut-tools.com to search and filter all systemctl / systemd shortcuts by category.
How many systemctl / systemd shortcuts are there?
Our collection includes 10 systemctl / systemd keyboard shortcuts and commands organized by category. New shortcuts are added regularly.
Start versus enable
systemctl start [svc] runs a service now and systemctl stop [svc] stops it; neither changes what happens at boot. systemctl enable [svc] makes it start at boot and systemctl disable [svc] removes that, without touching the running state — so a freshly installed service usually needs both, and enable --now does the two together. systemctl restart [svc] stops and starts, which drops connections; reload asks the service to re-read its configuration when it supports that.
When it will not start
systemctl status [svc] shows the state, the main PID, the last few log lines and the exit code — read it first. journalctl -u [svc] -f follows the service's full log, and journalctl --since today (or --since "10 min ago") narrows the journal by time; -p err filters by priority. After editing a unit file, systemctl daemon-reload is required before the change is seen, and forgetting it is the classic reason a fix "did not work". systemctl list-units --type=service lists loaded services with their states; add --failed for only the broken ones.
Beyond services
The same verbs apply to timers (systemd's cron), sockets and mounts — systemctl list-timers shows scheduled jobs. systemctl cat unit prints the unit file with any drop-in overrides, and systemctl edit unit creates an override without editing the packaged file, which survives upgrades. Per-user services live under systemctl --user.
🤖 Ask AI about systemctl / systemd shortcuts
Open your assistant with this page preloaded as the source — great for follow-up questions like "which of these work in other apps?"