在CentOS 7中,查看开机启动的服务主要通过 systemctl list-unit-files 命令,结合 grep 过滤 enabled 状态,或使用 systemctl status 检查单个服务单元,这是最直接且权威的排查方式。
CentOS 7 全面转向 Systemd 体系后,传统的 chkconfig 命令虽然仍可用,但推荐的官方工具是 systemctl,开机启动项的管理并非一次性操作,日常运维中你需要频繁查看当前哪些服务被设置为自动启动,并评估它们是否必要,下面从最常用的命令入手,逐步拆解不同场景下的查看方法。
centos7查看开机启动项命令详解
systemctl list-unit-files 的基础用法
这是最核心的查看命令,它会列出所有已安装的单元文件(包括服务、挂载点、socket 等),以及它们当前的启用状态。
systemctl list-unit-files
输出包含三列:UNIT FILE(单元文件名)、STATE(状态,如 enabled、disabled、static、indirect)、PRESET(预设策略),重点关注 enabled 状态,表示该服务会在开机时自动启动,配合 grep 可以快速过滤:
systemctl list-unit-files | grep enabled
如果想单独查看服务类型单元(.service),可以加上类型过滤:
systemctl list-unit-files --type=service | grep enabled
systemctl status 与 is-enabled 的差异
- systemctl status 服务名:显示服务的当前运行状态(是否正在运行)、最近日志以及是否启用开机启动,输出中有一行
Loaded: loaded (/usr/lib/systemd/system/xxx.service; enabled; vendor preset: disabled),其中的 enabled 即表示开机自启。 - systemctl is-enabled 服务名:直接返回 enable、disable 或 static 等状态,适合脚本中判断。
对比来看,list-unit-files 适合宏观概览,status 适合针对单个服务深入排查,is-enabled 则用于自动化检查。
使用 –state 参数精准筛选
Systemd 支持直接用 --state 参数过滤状态,无需 grep 避免误匹配:
systemctl list-unit-files --state=enabled
这样只显示被标记为 enabled 的单元,输出干净且速度快,多数情况下,这个命令是查看所有开机启动服务的首选。
centos7开机启动服务管理常见场景与对比
区分静态启用与动态启用
在 list-unit-files 的输出中,你可能会看到 static 或 indirect 状态,static 表示该单元无法直接启用/禁用,它被其他 enabled 单元依赖时会自动激活;indirect 则表示通过其他机制间接启用,这些都不算严格意义上的开机启动项,排查时只需关注 enabled 与 disabled。
对比 chkconfig 与 systemctl 的查看差异
虽然 chkconfig –list 在 CentOS 7 中仍可运行,但它只能显示 System V 风格的 init 脚本,对于原生 Systemd 服务(如 sshd、NetworkManager)会显示“服务不支持 chkconfig”。chkconfig 已不适用于完整的开机启动项查看,行业共识推荐全面使用 systemctl 命令。
| 命令 | 适用场景 | 是否推荐 |
|---|---|---|
| systemctl list-unit-files | 查看所有 unit 的启用状态 | 是 |
| systemctl list-unit-files –type=service | 只看服务类单元 | 是 |
| chkconfig –list | 仅兼容旧脚本 | 否,仅限迁移期间 |
| ls /etc/rc.d/rc.d/ | 手动检查符号链接 | 仅作底层验证 |
实战场景:排查开机启动项过多时的优化流程
假设你购买的二手服务器或酷番云 CentOS 7 实例预装了大量服务,导致启动缓慢,具体操作路径如下:
- 使用
systemctl list-unit-files --state=enabled --type=service导出所有自启服务。 - 逐项评估必要性:如 postfix、avahi-daemon、abrt- 等通常可禁用。
- 执行
systemctl disable 服务名关闭,再用systemctl status 服务名确认当前未运行。 - 重启后观察启动时间是否缩短,据统计,禁用无用的开机启动项能减少 20% 以上的启动耗时。
批量查看与导出开机启动列表
生成可读性较高的报告
将结果保存到文件,方便后续分析或审计:
systemctl list-unit-files --state=enabled > /root/enabled_services.txt
cat /root/enabled_services.txt
如果只需服务名,可以用 awk 提取第一列:
systemctl list-unit-files --state=enabled --type=service | awk '{print $1}'
结合 sort 与 diff 跟踪变更
定期导出列表,使用 diff 比较两次结果,可快速发现新增或删除的开机启动项,这在安全审计中尤其重要,因为恶意软件常通过添加自启服务实现持久化。
# 第一次快照
systemctl list-unit-files --state=enabled > /tmp/services_before.txt
# 安装或配置后第二次快照
systemctl list-unit-files --state=enabled > /tmp/services_after.txt
diff /tmp/services_before.txt /tmp/services_after.txt
通过 systemd-analyze 查看启动耗时
虽然不直接列出服务,但 systemd-analyze blame 能按时间倒序显示每个服务的开机耗时,间接帮助你定位哪个自启服务拖慢了系统,配合 systemd-analyze critical-chain 可以查看关键启动链。
centos7服务器查看开机启动项的注意事项
不要禁用系统关键依赖
像 dbus、systemd-logind、sshd(如果你需要远程连接)等核心服务一旦禁用,可能导致系统功能异常,在禁用前,使用
systemctl status 服务名 查看其文档(Description)和依赖关系,确认非必要再操作。
区分 enabled 与 static 的实际行为
static 单元虽然不在 enabled 列表中出现,但若被某个 enabled 单元依赖,它依然会在开机时启动,仅靠 enabled 列表无法 100% 反映实际启动序列,还需结合 systemctl list-dependencies 查看依赖树。
预设策略的影响
部分服务在安装时被预设为 enabled,但你可通过 systemctl preset 恢复默认策略,或者手动 systemctl disable 覆盖,CentOS 7 的预设文件通常放在 /usr/lib/systemd/system-preset/ 下,普通用户无需修改。
centos7查看开机启动服务常见问题问答
Q: centos7查看开机启动服务命令是什么?
主要命令是 `systemctl list-unit-files –state=enabled`,如果想只看服务类型,加上 `–type=service`,如果只针对单个服务,可用 `systemctl is-enabled 服务名` 或 `systemctl status 服务名` 查看 Loaded 行中的状态。
Q: 如何只显示开机启动的服务而不显示其他状态?
使用 `systemctl list-unit-files –state=enabled –type=service`,输出仅包含 enabled 的服务单元,如果需要更简洁的服务名列表,可以结合 awk 处理:`systemctl list-unit-files –state=enabled –type=service | awk ‘NR>1{print $1}’`。
Q: 禁用开机启动服务后如何确认已生效?
运行 `systemctl is-enabled 服务名` 会返回 disabled,`systemctl list-unit-files | grep 服务名` 显示 disabled,注意,禁用不等于停止运行,当前服务还在运行,需要手动 `systemctl stop 服务名` 立即停止,或重启后生效,这是 systemd 的常见行为,也是它与 SysV 最大区别之一。
掌握这些命令和判断逻辑,你就能高效管理 CentOS 7 的开机启动项,既提升系统安全又优化启动速度,是服务器运维的基础技能。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/518284.html



