systemctl list-dependencies 本身不能直接生成拓扑树图像,但可通过 --all、--type=service、--reverse、--no-pager 等参数输出层级清晰的文本依赖结构,并结合 grep、sed、sort 等工具处理为可读视图或 markdown 列表;完整拓扑需额外解析 wants/requires/bindsto/conflicts 等多维关系。

直接用 systemctl list-dependencies 本身无法导出“拓扑树”图像,但它能输出清晰的依赖层级结构,配合简单文本处理即可生成可读性强、层级明确的依赖视图——重点在于理解其输出逻辑并合理筛选。
理解 list-dependencies 的层级输出机制
该命令默认以树形缩进方式显示单元(unit)的依赖关系,分为两类:
-
Wants / Requires:正向依赖(目标服务启动时,这些必须先启动)→ 用
--reverse可查被谁依赖 -
WantedBy / RequiredBy:反向依赖(哪些服务依赖当前服务)→ 需加
--reverse参数才显示
例如查看 PostgreSQL 主服务(如 postgresql.service)的启动依赖链:
systemctl list-dependencies --all --reverse postgresql.service
聚焦核心数据库服务的完整依赖路径
真实环境中,数据库往往依赖网络、存储、系统时间等基础服务。要获取“完整”依赖,需组合参数:
一个OA雏形,主要是完成项目进程管理的功能。 主要实现: 1。新建项目,设定到期时间,如果超过时间自动转为过期项目。 2。过期项目自动提醒,可自定义设定提醒时间或设定几天一次提醒。 3。自己建立的项目只有自己和超级用户有操作权限。 3。重要的项目可设为重要,有醒目标记,如不想被别人看到的项目可以设为独享,此项目只有自己和管理员可以看到。 4。新项目建立人自动显示为登陆时的用户名,可指定多负责人,如
-
--all:显示所有层级(含 indirect 间接依赖) -
--type=service:过滤只看 service 类型(避免混入 target、socket 等干扰项) -
--reverse:查谁依赖它(比如高可用集群、备份脚本、应用服务) -
--no-pager:防止分页截断,便于重定向保存
推荐命令(导出正向启动依赖):
systemctl list-dependencies --all --type=service --no-pager postgresql.service > pg-deps-tree.txt
用文本工具增强可读性与分析能力
原始输出是缩进文本,但可借助 shell 工具快速整理:
- 提取所有唯一依赖项:
systemctl list-dependencies --all postgresql.service | grep -o '[^[:space:]]\+\.service' | sort -u - 过滤掉已失败/未激活的单元:
systemctl list-dependencies --all postgresql.service | while read line; do unit=$(echo "$line" | awk '{print $NF}'); [[ -n "$unit" ]] && systemctl is-active "$unit" 2>/dev/null | grep -q 'active' && echo "$line"; done - 生成 Markdown 格式层级列表(方便文档归档):
systemctl list-dependencies --all postgresql.service | sed 's/^ */- /' | sed 's/→ /→ /'
注意 systemd 版本与实际拓扑差异
systemd 245+ 支持更精细的依赖类型(如 BindsTo、Conflicts),但 list-dependencies 默认只展示 Requires/Wants 类型。若需完整拓扑(含冲突、绑定、触发关系),应结合:
systemctl show postgresql.service -p Wants,Requires,BindsTo,Conflicts,Triggers- 或解析 unit 文件:
systemctl cat postgresql.service | grep -E '^(Wants|Requires|After)=|^\[Unit\]'
真正的“拓扑树”需人工或脚本整合多维关系,list-dependencies 是起点而非终点。










