systemctl cat 服务名直接显示 systemd 实际加载并执行的最终合并配置,按优先级顺序包含主 unit 文件、所有 drop-in 片段和运行时覆盖,并以注释标明来源文件。

直接运行 systemctl cat 服务名 就能一次性看到最终生效的完整配置样式,不需要手动拼接。
systemctl cat 自动合并所有生效片段
它不是只输出原始 unit 文件,而是按 systemd 的加载优先级,把所有已启用的配置源按顺序合并后展示:
- 主 unit 文件(通常来自
/usr/lib/systemd/system/xxx.service) - 所有已加载的 drop-in 片段(如
/etc/systemd/system/xxx.service.d/*.conf) - 运行时生成的覆盖(如
/run/systemd/system/xxx.service.d/*.conf)
这些内容按加载顺序从上到下排列,后面的内容会覆盖前面同名字段——也就是说,你看到的输出就是 systemd 实际解析并执行的最终配置。
识别哪些部分来自哪个文件
每一段配置前都有明显分隔标记,例如:
-
# /usr/lib/systemd/system/nginx.service→ 原始包提供的默认配置 -
# /etc/systemd/system/nginx.service.d/override.conf→ 你用systemctl edit创建的覆盖 -
# /etc/systemd/system/nginx.service.d/env.conf→ 其他手动添加的 drop-in
注意观察每个 [Section] 下的字段是否被后续片段修改。比如 Restart= 出现在主文件里,又被 override.conf 里同名字段重写,那最终生效的就是后者。
验证是否全部加载到位
如果发现某处 drop-in 没出现在 systemctl cat 输出中,说明它没被加载:
- 文件名必须以
.conf结尾 - 路径必须在正确目录:
/etc/systemd/system/服务名.service.d/ - 执行过
sudo systemctl daemon-reload(尤其修改或新增 drop-in 后) - 没有语法错误(可用
sudo systemd-analyze verify /etc/systemd/system/xxx.service.d/*.conf检查)
想看更清晰的结构化视图
加 --no-pager 避免分页干扰,配合 grep 快速定位关键字段:
-
systemctl cat nginx | grep -A2 "Environment="查看环境变量最终值 -
systemctl cat nginx | grep -E "^(#|Wants=|After=|Restart=)"提取依赖与重启策略 -
systemctl cat nginx | sed -n '/#.*\.conf$/,/^#/p'只看某个 drop-in 的完整块(需调整匹配)
不用自己拼,systemctl cat 已经替你做了合并和排序。只要 drop-in 存在、合法、已重载,它就在那里。

















