systemctl cat 是查看 systemd 服务单元文件最直接的方式,原样输出 .service 文件内容,含 execstart、type、environment 等关键配置;若失败,可手动检查 /usr/lib/systemd/system/ 和 /etc/systemd/system/ 目录,或追溯 sysvinit 脚本及运行时 cmdline 验证实际命令。

systemctl cat 查看 systemd 服务单元文件
这是最直接的方式,systemctl cat 会原样输出服务对应的 .service 文件内容,里面包含 ExecStart、Type、环境变量等关键启动逻辑。
- 命令格式:
systemctl cat <service-name>.service</service-name>,比如systemctl cat nginx.service - 注意:如果服务名没加
.service后缀,systemctl 通常能自动补全;但显式写上更稳妥,避免匹配到 timer 或 socket 单元 - 输出里重点关注
ExecStart=行——这就是实际执行的启动命令,可能带参数或环境变量(如Environment=) - 如果返回 “No files found”,说明该服务不是由 systemd 管理,或者单元文件被 mask(用
systemctl is-enabled先确认状态)
/usr/lib/systemd/system/ 和 /etc/systemd/system/ 下的手动查找
systemd 的单元文件默认分散在这两个目录:/usr/lib/systemd/system/(发行版自带)和 /etc/systemd/system/(管理员自定义或覆盖用)。直接 ls 或 cat 更可靠,尤其当 systemctl cat 因权限或路径问题失败时。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 先查系统级路径:
ls /usr/lib/systemd/system/<service-name>.*</service-name>,常见后缀有.service、.socket、.timer - 再查本地覆盖:
ls /etc/systemd/system/<service-name>.*</service-name>,这里文件优先级更高,可能替换了上游定义 - 如果看到
/etc/systemd/system/<service-name>.service</service-name>是个符号链接,用readlink -f跟踪真实路径,避免误读软链目标 - 某些服务(如 Docker)会在
/etc/systemd/system/multi-user.target.wants/下有软链,但这只是启用标记,不是脚本本身
对 SysVinit 风格服务:检查 /etc/init.d/
在 CentOS 6、Debian 7 等老系统,或部分兼容模式下,服务仍靠 /etc/init.d/ 下的 shell 脚本启动。这类脚本本身就是“启动命令”的载体,但需注意它是否真被调用。
- 直接查看:
cat /etc/init.d/<service-name></service-name>,搜索start()函数块里的exec或$DAEMON赋值行 - 别只看脚本存在就认为它生效——用
chkconfig --list <service-name></service-name>(RHEL/CentOS)或update-rc.d -l | grep <service-name></service-name>(Debian/Ubuntu)确认是否真被启用 - 即使脚本存在,systemd 也可能通过
systemd-sysv-generator自动为其生成 wrapper 单元,此时systemctl cat显示的是生成的临时单元,而非原始脚本
ps 和 /proc/$PID/cmdline 验证实际运行命令
以上方法看到的是“配置的启动方式”,但进程实际跑起来的命令可能被修改(比如启动后 exec 替换、或通过 wrapper 脚本间接调用)。这时得看运行时真实参数。
- 先获取 PID:
pgrep -f <service-name></service-name>或systemctl show --property=MainPID <service-name>.service</service-name> - 再读 cmdline:
cat /proc/<pid>/cmdline | tr '\0' ' '</pid>—— 注意\0是分隔符,必须用tr转成空格才可读 - 对比
systemctl cat里的ExecStart:若不一致,说明启动过程有 wrapper、环境变量影响、或被其他进程 fork+exec 修改了参数 - 这个方法无法还原 systemd 的
EnvironmentFile或WorkingDirectory设置,只能看到最终传给 execve() 的 argv 数组
nginx.service 启动,也可能被 nginx-bin@.service 实例化,或通过 docker run 启动的容器内进程。查之前,先用 systemctl list-units --type=service --all | grep nginx 确认你找的是哪个单元。










