如何从systemctl列出所有启用的服务?

oce*_*nBT 472 services systemd

如何列出所有enabled服务systemctl

我知道systemctl单独运行命令会列出所有服务,但我只想获取enabled这些服务。

Del*_*ean 653

systemctl list-unit-files | grep enabled将列出所有启用的。

如果您想要哪些当前正在运行,您需要systemctl | grep running.

使用您正在寻找的那个。启用,并不意味着它正在运行。运行并不意味着它已启用。他们是两个不同的东西。

启用意味着系统将在下次启动时运行该服务。所以如果你启用了一个服务,你仍然需要手动启动它,或者重新启动它就会启动。

运行意味着它现在实际上正在运行,但如果它没有启用,它不会在您重新启动时重新启动。

  • @FelipeAlvarez 正确。但这就是 Linux 的工作方式。许多相互配合的小型二进制文件。systemctl 执行要求的操作,它列出了服务。systemctl 没有内置过滤命令,因为 grep 已经存在并且可以很好地处理任何程序的输出。一直都是这样:) (47认同)
  • 更简单:`systemctl list-unit-files --state=running` (41认同)
  • 烦人的是必须使用外部工具 (grep) 来显示这些重要信息。但是谢谢你给我们指明了方向:) (9认同)
  • 我同意,应该如此。但是,systemd 已经尝试做这么多,我想知道为什么它不能列出已启用的服务? (8认同)
  • `systemctl | grep running`不要向我列出任何东西!即使某些东西正在运行,也只列出了他的状态,例如:“启用、​​禁用、屏蔽、静态” (7认同)
  • @FelipeAlvarez Linux 是关于小工具的,它是从 Unix 继承的 Linux 哲学的一部分:“让每个程序做好一件事。要完成一项新工作,重新构建而不是通过添加新“功能”使旧程序复杂化。 ” - [1978 年的贝尔系统技术期刊](https://en.wikipedia.org/wiki/Unix_philosophy) (3认同)
  • 似乎`systemctl list-unit-files` 没有列出所有服务。例如,即使启用了 tinc,它也不会列出 `tinc`。也许`systemctl list-unit-files` 只列出具有单元文件的服务?但未能列出任何可能通过旧版 sysv 样式初始化脚本启用的服务? (2认同)

小智 163

man systemctl 状态:

--state=

的参数应该是逗号分隔的单元的列表LOADSUBACTIVE状态。列出单位时,仅显示处于指定状态的单位。用于--state=failed仅显示失败的单位。

解释:

LOAD:反映单元定义是否正确加载。
ACTIVE:高级单元激活状态,即 的泛化SUB
SUB:低级单元激活状态,值取决于单元类型。

虽然您也可以使用它来仅显示enabled单位:

systemctl list-unit-files --state=enabled
Run Code Online (Sandbox Code Playgroud)

如果是单位,则enabled意味着系统将在启动时启动它。尽管将某些内容设置为enabled实际上并没有start,因此您需要手动执行此操作,或者在将其设置为enabled.

  • 同时启用和启动:`systemctl enable --now ...` (8认同)
  • `--state=enabled` 对 systemd 版本 215(在 Raspbian 8 Jessie 上)没有影响,但它在 systemd 版本 229(在 Ubuntu 16.04.03 Xenial 上)上有效。 (2认同)

小智 83

列出所有systemdstate=activesub=running

systemctl list-units --type=service --state=running
Run Code Online (Sandbox Code Playgroud)

要列出所有的systemd这些都在贡献莫过于state=active和亚运行或退出

systemctl list-units --type=service --state=active
Run Code Online (Sandbox Code Playgroud)


小智 21

要查看“已启用”服务,包括仍在 upstart/init 下运行的服务:

systemctl list-unit-files --type service --state enabled,generated
Run Code Online (Sandbox Code Playgroud)

要查看当前运行的所有服务,请运行:

systemctl list-units --type service --state running
Run Code Online (Sandbox Code Playgroud)


pan*_*.de 11

还概述了所有活动和失败的服务:

systemctl list-units --type service --state running,failed
Run Code Online (Sandbox Code Playgroud)


小智 11

有一个很好的 GUI 应用程序 Stacer,您可以在其中管理所有服务。

在此处输入图片说明

检查其 Github 链接Stacer Github
另请检查Web以获取更多信息


sma*_*c89 6

除了当前的答案之外,我还使用以下内容来获取服务的名称:

systemctl list-units --type=service --state=active,running | awk '/.*\.service/ {print $1}'
Run Code Online (Sandbox Code Playgroud)

与表格格式不同,这使得将这些服务通过管道传输到另一个程序变得更容易