查看开机自启服务应优先使用 systemctl list-unit-files --type=service,它权威反映 systemd 单元启用状态;其次可用 systemctl list-units 筛选已加载的 enabled 服务;单个服务用 systemctl is-enabled 判断;还可检查 /etc/systemd/system/multi-user.target.wants/ 下符号链接。

如果您需要确认哪些服务被配置为在系统启动时自动运行,则可能是由于服务管理策略调整或故障排查需求。以下是查看开机自启服务列表的多种方法:
一、使用 systemctl list-unit-files 查看服务启用状态
该命令直接读取 systemd 单元文件的启用标记,列出所有服务单元及其开机自启状态(enabled/disabled/masked/static),是最权威的开机自启判定依据。
1、在终端中执行:systemctl list-unit-files --type=service
2、如需仅筛选已启用的服务,追加过滤:systemctl list-unit-files --type=service | grep enabled
3、若要排除静态(static)服务(它们不能被直接启用但可能被其他服务依赖),可结合 awk 过滤:systemctl list-unit-files --type=service | awk '$2 ~ /enabled/ && $2 !~ /static/'
二、使用 systemctl list-units 筛选当前加载且启用的服务
此方法侧重于已加载到运行时环境并被标记为启用的服务,结果反映的是实际参与启动流程的服务集合,不包含未加载的 disabled 项。
1、执行命令列出所有已加载服务及其启用状态:systemctl list-units --type=service --all --state=loaded
2、进一步提取其中标记为 enabled 的条目:systemctl list-unit-files --type=service --state=enabled
3、配合 --no-pager 避免分页阻断输出:systemctl list-unit-files --type=service --state=enabled --no-pager
三、结合 systemctl is-enabled 检查单个服务状态
当需验证特定服务是否被设置为开机自启时,该命令返回明确布尔结果(enabled/disabled/generated/masked),适合脚本化判断或逐项核查。
1、检查 nginx 是否启用开机自启:systemctl is-enabled nginx.service
2、批量检查多个服务(例如 sshd、cron、rsyslog):for svc in sshd cron rsyslog; do echo "$svc: $(systemctl is-enabled $svc.service 2>/dev/null)"; done
3、仅显示返回 enabled 的服务名:for svc in $(systemctl list-unit-files --type=service --no-pager | awk '$2=="enabled"{print $1}'); do echo $svc; done
四、检查 /etc/systemd/system 和 /usr/lib/systemd/system 中的符号链接
systemd 将启用的服务以符号链接形式存放在 /etc/systemd/system/multi-user.target.wants/ 目录下,该目录内容可直接反映用户级启用配置。
1、列出 multi-user.target.wants 下全部链接:ls -l /etc/systemd/system/multi-user.target.wants/
2、对比查看是否同时存在于 /usr/lib/systemd/system(原始单元文件位置):ls /usr/lib/systemd/system/ | grep -E "^(sshd|nginx|httpd)\.service$"
3、检查某服务链接是否指向正确路径:readlink -f /etc/systemd/system/multi-user.target.wants/nginx.service
五、使用 legacy service 命令辅助验证(兼容模式)
在部分仍保留 SysV 兼容层的发行版中,chkconfig 或 service --status-all 可提供交叉参考,尤其适用于混合 init 环境或旧服务包装器。
1、执行传统状态全览(输出含 [ + ] / [ - ] 标记):service --status-all 2>/dev/null | grep "\[ \+\]"
2、检查 chkconfig(如已安装)是否记录该服务:chkconfig --list | grep -i "on$" | head -10
3、对 systemd 包装的 SysV 服务,用 systemctl status 回溯原始脚本路径:systemctl status networking.service | grep -A1 "Loaded:"










