我对 systemctl 的输出不满意
我有一个脚本可以解析输出
systemctl list-units -t service --full --all
输出的开头如下所示:
UNIT LOAD ACTIVE SUB JOB DESCRIPTION
after-local.service loaded inactive dead /etc/init.d/after.local Compatibility
● amavis.service not-found inactive dead amavis.service
apparmor.service loaded active exited Load AppArmor profiles
auditd.service loaded active running Security Auditing Service
在不同的 systemd 上,带有点的列(在 amavis.service 之前)不存在。
systemctl 是否有机器/脚本可读的输出?
答案1
我将其用于机器可解析的输出,添加--plain --no-legend
,例如:
systemctl list-units -t service --full --all --plain --no-legend
答案2
您可以json-pretty
通过设置--output
标志来获取 json (或)输出:
systemctl list-units \
--type service \
--full \
--all \
--output json \
--no-pager
如果你的 systemctl 版本不支持 json 输出,你可以像这样获取 json:
systemctl list-units \
--type service \
--full \
--all \
--plain \
--no-legend \
--no-pager \
| sed 's/ \{1,\}/,/g' \
| jq \
--raw-input \
--slurp \
'split("\n") | map(split(",")) | .[0:-1] | map( { "unit": .[0], "load": .[1], "active": .[2], "sub": .[3] } )'