systemctl 的可解析输出(例如列出所有单元)

systemctl 的可解析输出(例如列出所有单元)

我对 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] } )'

相关内容