悠悠楠杉
如何查看Linux启动服务列表systemctllist-unit-files用法
一、为什么需要了解系统服务列表?
作为Linux系统管理员或开发者,我们经常需要处理各种后台服务。这些服务可能包括Web服务器、数据库、定时任务等。了解如何查看和管理这些服务是系统维护的基础技能。传统Linux使用init.d脚本管理服务,而现代主流发行版(如RHEL 8+/Ubuntu 16.04+)已全面转向systemd体系,其核心控制工具就是systemctl
。
二、命令基础解析
2.1 基本语法
bash
systemctl list-unit-files [选项] [模式匹配]
这个命令会列出所有已安装的单元文件(包括服务、挂载点、设备等),并显示它们在各级运行目标(target)中的启用状态。与systemctl list-units
不同,后者只显示当前活跃的单元,而前者会显示系统所有可能的服务配置。
2.2 典型输出示例
bash
UNIT FILE STATE
auditd.service enabled
bluetooth.service disabled
chronyd.service enabled
...
每行输出包含两个关键信息:
- UNIT FILE:单元文件名称(.service可省略)
- STATE:服务状态标志
三、状态标志深度解读
理解状态标志是有效管理服务的前提:
| 状态值 | 含义 |
|--------------|----------------------------------------------------------------------|
| enabled | 服务已启用,会在系统启动时自动运行 |
| disabled | 服务已禁用,需要手动启动 |
| static | 该单元不能被直接启用,作为其他单元的依赖存在 |
| masked | 服务被强制禁用(通过符号链接到/dev/null),即使手动启动也会失败 |
| indirect | 服务未直接启用,但被其他单元作为依赖启用 |
| generated | 单元文件由系统在运行时自动生成 |
| transient | 临时单元,由系统运行时创建 |
特别注意:看到masked
状态时,表示该服务已被彻底锁定,这是比disabled
更严格的禁用方式。例如某些发行版会默认mask蓝牙服务:
bash
sudo systemctl unmask bluetooth.service # 解除锁定
四、实战过滤技巧
4.1 按类型过滤
只要服务单元(最常用场景):
bash
systemctl list-unit-files --type=service
4.2 按状态筛选
查找所有已启用的服务:
bash
systemctl list-unit-files --state=enabled
4.3 模式匹配
使用通配符查找相关服务(如所有nginx相关单元):
bash
systemctl list-unit-files 'nginx*'
4.4 显示完整路径
查看单元文件的物理存储位置:
bash
systemctl list-unit-files --full
五、与其他命令的协同使用
5.1 结合grep进行二次过滤
查找与网络相关的服务:
bash
systemctl list-unit-files | grep -i network
5.2 查看服务详情
发现目标服务后,获取详细信息:
bash
systemctl status sshd.service
5.3 服务启停管理
基于查询结果操作服务:
bash
sudo systemctl stop cups.service # 停止服务
sudo systemctl disable cups.service # 禁止开机启动
六、实际应用场景
场景1:安全审计
检查不必要的已启用服务:
bash
systemctl list-unit-files --state=enabled | grep -v '必要服务关键词'
场景2:故障排查
当某功能异常时,先确认相关服务状态:
bash
systemctl list-unit-files | grep -E 'docker|containerd'
场景3:系统优化
识别可以禁用的服务以提升启动速度:
bash
systemctl list-unit-files --type=service --state=enabled
七、注意事项
- 权限区别:普通用户可查询列表,但启停服务需要sudo权限
- 状态缓存:修改服务状态后,建议刷新systemd配置:
bash sudo systemctl daemon-reload
- 发行版差异:不同Linux发行版默认启用的服务可能不同
- 依赖关系:禁用服务前应检查依赖项:
bash systemctl list-dependencies sshd.service