上一篇文章中,我们谈到了如何列出内存中现有的单元。
不过如果结合之前提到的启用和启动的区别,大体可以联想到:
既然启动和启用完全不相关的,那么一定存在单元需要手动,而不是开机就自动启动的情况。没错,确实有这类单元,它们就是已经安装在系统上,还没有运行在内存中,等待我们手动启动的单元。
那么如何才能知道电脑上安装了哪些还未曾启动的单元呢?
systemctl list-unit-files
上手man一波,养成好习惯。
man systemctl
找到 list-unit-files 部分。

基本就是列出系统上安装了的文件,结合它们的启用状态(就和is-enabled反馈的一样)。如果指定了模式,命令会做模式匹配,只有匹配上了,才会展示文件。另外,模式匹配不支持单元文件系统路径的匹配。
基本通俗易懂,除了 is-enabled 命令看起来像个新人。
问题不大,新人我们也照顾一下。
找到 is-enabled 子命令的介绍

检查指定的单元文件是否已经启用。如果至少有一个已经启用,返回退出码0,否则返回非0。同时打印当前的启用状态,见下表。加上 --quiet 可以不看输出的内容。加上 --full 显示安装目标。
| 名称 | 描述 | 退出码 |
| "enabled" "enabled-runtime" | 通过 .wants/, .requires/ 或Aias= 表征链接启用。跨重启的文件放在 /etc/systemd/system/;一次性文件放在 /run/systemd/system/ | 0 |
| "linked" "linked-runtime" | 通过一个或多个指向单元文件的表征链接实现。跨重启的文件放在 /etc/systemd/system/;一次性文件放在 /run/systemd/system/ 即便是单元文件在单元文件搜索路径之外 | >0 |
| "masked" "masked-runtime" | 完全禁用,以至于基于它的启动会fail。 跨重启的文件放在 /etc/systemd/system/;一次性文件放在 /run/systemd/system/ | >0 |
| "static" | 单元没有启用,而且单元文件的 [Install]段落没有指示 | 0 |
| "indirect" | 单元文件本身没有启用,不过在单元文件 的[Install]段落中,有 Also= 设置,这里列 出的其它可能被启用了的单元文件,或者是 Also= 下没有指定,但是有个别名通过表征链接指定了。 对于模板单元文件来说,一个不同于 DefaultInstance= 所指定的实例不启用了。 | 0 |
| "disabled" | 单元文件没有被启用,但是包含了一个 [Installl]段落,其中包含了安装指南。 | >0 |
| "generated" | 单元文件是通过一个构造器工具动态生 成,生成的单元文件无法启用,而是被它们的生成器隐式启用了。 | 0 |
| "transient" | 单元文件使用运行时API动态创建。 短暂单元无法启用。 | 0 |
| "bad" | 单元文件无效,或者发生其它错误。 注意,is-enabled 不会返回这个状态,而是打印一条错误信息。 不过 list-unit-files 打印出来的单元文件会展示这个状态。 | >0 |
整个启用状态的列表阅读下来,大概就可以清楚单元文件总共有哪些情况。并且,单元文件为什么会处于某些状态也一目了然了。甚至于说,单元文件内部写了些什么东西,也可以猜到一二。我想,这应该就是 systemctl list-unit-files 命令最好用的一点吧。

到目前为止,systemctl 最常用的几个命令都已经介绍过了。不过这些还仅仅是 systemd 的冰山一角。systemd 还提供了全局统一日志系统 journal 。记得关注我,下期继续哦。
文章转载自编程初学者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




