最准确方法是执行 systemctl list-unit-files --type=service | awk '$2 == "enabled"',它直接读取 systemd 单元注册表中明确标记为 enabled 的服务,反映真实开机自启配置,不依赖当前运行或加载状态。

要查看 Linux 中所有设置为开机自启(enabled)的服务,最准确、最权威的方法是直接查询 systemd 的单元注册表,而不是依赖当前运行状态或加载情况。
查全部已启用的开机自启服务
执行以下命令:
systemctl list-unit-files --type=service | awk '$2 == "enabled"'
这条命令输出的是系统“承诺开机时拉起哪些服务”的原始清单。它不关心服务现在是否在运行、是否已加载,只看单元文件是否被明确标记为 enabled——这才是真正决定开机行为的依据。
注意避开 static 服务:它们虽可能被其他服务自动触发,但本身不能被手动 enable,也不属于你主动配置的开机启动项。
为什么不用 systemctl list-units --state=enabled
这个命令实际查的是“当前已加载且启用”的单元,容易漏掉那些尚未加载但已配置自启的服务。比如刚装完 nginx 并执行了 systemctl enable nginx,但还没重启系统,它就不会出现在该命令结果里——但它确实会在下次开机时启动。
简单说:list-unit-files 看“配置”,list-units 看“现状”。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
验证单个服务是否真被设为开机自启
对某个具体服务,用这个命令最可靠:
systemctl is-enabled 服务名.service
返回值只有四种明确含义:
- enabled:已配置开机自启,没问题
- disabled:未启用
- static:不可独立启用(如某些 socket 或 target),不是你该设为自启的对象
- masked:被显式禁止(符号链接指向 /dev/null),连手动启动都不可行
别只看 systemctl status 服务名 输出里 Loaded 行末尾写的 enabled——那是快照,可能滞后或误判。
如果查不到预期的服务
运行 systemctl list-unit-files --type=service | grep 你的服务名,若无输出,说明该服务根本没注册成 systemd 单元。
常见原因包括:
- 服务单元文件不存在(比如没放在
/etc/systemd/system/或/usr/lib/systemd/system/) - 单元文件语法错误(可用
sudo systemd-analyze verify /path/to/xxx.service检查) - 服务名写错,或混淆了 .service 后缀与其他类型(如 .timer)










