list-units 是什么
systemctl list-units 列出当前已加载到内存里的单元及其运行状态,回答的是「系统现在在跑什么」。与之对应的 list-unit-files 列出磁盘上的单元文件与它们的启用状态,回答的是「系统上有哪些单元、开机策略是什么」。两个命令口径不同,盘点资产与排查自启问题时要按目的选择。
基本信息
| 适用平台 | Linux(systemd) |
|---|---|
| 命令语法 | systemctl list-units [--type T] [--state S] [--all] |
| 常用选项 | --type 按类型过滤(service、timer、target 等)--state 按状态过滤 --all 包含未激活 --no-pager 不分页 --no-legend 去掉表尾统计 --plain 输出机器易读格式 |
| 默认行为 | 不带 --all 时隐藏 inactive 单元,只显示已加载且有活动的部分 |
| 权限说明 | 读取信息普通用户即可 |
典型使用场景
- 服务盘点:确认机器上实际在跑哪些服务
- 查异常:配合 --state=failed 快速列出失败单元
- 按类型核对:用 --type=timer 看定时器、--type=target 看启动目标
- 审计自启:把 list-unit-files 的 enabled 清单与预期对比
- 脚本取数:加 --plain 与 --no-legend 得到稳定可解析的输出
常用示例
常用示例
systemctl list-units --type=service --state=running # 正在运行的服务
systemctl list-units --type=service --state=failed # 失败的服务
systemctl list-units --type=timer --all | head # 全部定时器
systemctl list-units --type=service --all | wc -l # 已加载服务数量
systemctl list-unit-files --type=service | grep enabled | head -n 30
systemctl list-unit-files --type=service --state=masked | head # 被屏蔽的单元两个盘点命令的差别
| 命令 | 数据来源 | 典型用途 |
|---|---|---|
| systemctl list-units | 已加载到内存的单元与运行时状态 | 看当前运行情况与失败单元 |
| systemctl list-unit-files | 磁盘上的单元文件与启用状态 | 看有哪些单元、开机是否启用或被屏蔽 |
| --type 过滤 | 按单元类型筛选 | 服务、定时器、目标等分开看 |
| --state 过滤 | 按运行状态筛选 | failed、running、exited 等 |
| --all | 包含未激活单元 | 排查「单元明明存在却不显示」 |
| --plain 与 --no-legend | 输出更易解析 | 脚本里必加,避免表尾统计干扰 |
list-units 看运行时已加载的单元,list-unit-files 看磁盘上的单元文件与开机策略,两者口径不同:一个单元可能在磁盘上存在且已启用,但当前并未 loaded,前者就看不到它。
做资产盘点时两个命令都跑一遍更稳妥:list-unit-files 反映「这台机器上应该有哪些单元」,list-units 反映「此刻实际在跑什么」。把两份清单对比一下,就能发现已安装却没启用的服务,或者被意外启动、与文档不符的单元。
输出默认会被分页器接管并附带表尾统计行,脚本里直接解析很容易出错。稳妥写法是同时加 --no-pager、--no-legend 与 --plain,或者改用 systemctl show 这类面向字段的接口取具体值。