<term><command>status</command> <optional><replaceable>PATTERN</replaceable>…|<replaceable>PID</replaceable>…]</optional></term>
<listitem>
- <para>Show terse runtime status information about one or
- more units, followed by most recent log data from the
- journal. If no units are specified, show system status. If
- combined with <option>--all</option>, also show the status of
- all units (subject to limitations specified with
- <option>-t</option>). If a PID is passed, show information
- about the unit the process belongs to.</para>
+ <para>Show runtime status information about the whole system or about one or more units followed
+ by most recent log data from the journal. If no positional arguments are specified, and no unit
+ filter is given with <option>--type=</option>, <option>--state=</option>, or
+ <option>--failed</option>, shows the status of the whole system. If combined with
+ <option>--all</option>, follows that with the status of all units. If positional arguments are
+ specified, each positional argument is treated as either a unit name to show, or a glob pattern
+ to show units whose names match that pattern, or a PID to show the unit containing that PID. When
+ <option>--type=</option>, <option>--state=</option>, or <option>--failed</option> are used, units
+ are additionally filtered by the TYPE and ACTIVE state.</para>
<para>This function is intended to generate human-readable
output. If you are looking for computer-parsable output,
<term><option>--type=</option></term>
<listitem>
- <para>The argument should be a comma-separated list of unit
- types such as <option>service</option> and
- <option>socket</option>.
- </para>
-
- <para>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.</para>
+ <para>The argument is a comma-separated list of unit types such as <option>service</option> and
+ <option>socket</option>. When units are listed with <command>list-units</command>,
+ <command>show</command>, or <command>status</command>, only units of the specified types will be
+ shown. By default, units of all types are shown.</para>
- <para>As a special case, if one of the arguments is
- <option>help</option>, a list of allowed values will be
- printed and the program will exit.</para>
+ <para>As a special case, if one of the arguments is <option>help</option>, a list of allowed values
+ will be printed and the program will exit.</para>
</listitem>
</varlistentry>
<term><option>--state=</option></term>
<listitem>
- <para>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 <option>--state=failed</option>
- to show only failed units.</para>
-
- <para>As a special case, if one of the arguments is
- <option>help</option>, a list of allowed values will be
- printed and the program will exit.</para>
+ <para>The argument is a comma-separated list of unit LOAD, SUB, or ACTIVE states. When listing
+ units with <command>list-units</command>, <command>show</command>, or <command>status</command>,
+ show only those in the specified states. Use <option>--state=failed</option> or
+ <option>--failed</option> to show only failed units.</para>
+
+ <para>As a special case, if one of the arguments is <option>help</option>, a list of allowed values
+ will be printed and the program will exit.</para>
</listitem>
</varlistentry>
static int show_all(
sd_bus *bus,
+ SystemctlShowMode show_mode,
bool *new_line,
bool *ellipsized) {
if (!p)
return log_oom();
- r = show_one(bus, p, u->id, SYSTEMCTL_SHOW_STATUS, new_line, ellipsized);
+ r = show_one(bus, p, u->id, show_mode, new_line, ellipsized);
if (r < 0)
return r;
if (r > 0 && ret == 0)
pager_open(arg_pager_flags);
- /* If no argument is specified inspect the manager itself */
- if (show_mode == SYSTEMCTL_SHOW_PROPERTIES && argc <= 1)
- return show_one(bus, "/org/freedesktop/systemd1", NULL, show_mode, &new_line, &ellipsized);
-
- if (show_mode == SYSTEMCTL_SHOW_STATUS && argc <= 1) {
+ if (argc <= 1) {
+ /* If no argument or filter is specified inspect the manager itself:
+ * systemctl status → we show status of the manager
+ * systemctl status --all → status of the manager + status of all units
+ * systemctl status --state=… → status of units in listed states
+ * systemctl status --type=… → status of units of listed types
+ * systemctl status --failed → status of failed units, mirroring systemctl list-units --failed
+ */
+
+ if (!arg_states && !arg_types) {
+ if (show_mode == SYSTEMCTL_SHOW_PROPERTIES)
+ r = show_one(bus, "/org/freedesktop/systemd1", NULL, show_mode, &new_line, &ellipsized);
+ else
+ r = show_system_status(bus);
+ if (r < 0)
+ return r;
- show_system_status(bus);
- new_line = true;
+ new_line = true;
+ }
- if (arg_all)
- ret = show_all(bus, &new_line, &ellipsized);
+ if (arg_all || arg_states || arg_types)
+ ret = show_all(bus, show_mode, &new_line, &ellipsized);
} else {
_cleanup_free_ char **patterns = NULL;