我正在尝试打印我的机器中所有正在运行的服务。为此我使用命令
a=$(sudo systemctl list-units --type service --all | grep running | awk -v OFS='\t' '{ print $1, $2, $4 }')
上述命令的输出是
abrt-xorg.service loaded running
abrtd.service loaded running
accounts-daemon.service loaded running
atd.service loaded running
auditd.service loaded running
avahi-daemon.service loaded running
bolt.service loaded running
chronyd.service loaded running
colord.service loaded running
crond.service loaded running
cups.service loaded running
dbus.service loaded running
firewalld.service loaded running
gdm.service loaded running
grafana-server.service loaded running
gssproxy.service loaded running
influxdb.service loaded running
irqbalance.service loaded running
ksmtuned.service loaded running
libstoragemgmt.service loaded running
libvirtd.service loaded running
lvm2-lvmetad.service loaded running
第一列是服务名称第二列是加载状态第三列是运行状态...
在每列的输出上方,我需要标题为
column name loading status running status
我该怎么办...请帮助我
我运行了命令systemctl list-unit-files
得到的输出像
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-fs-nfsd.mount static
答案1
BEGIN
在命令中使用awk
来打印标题:
systemctl list-units --type service --all | awk 'BEGIN{print "Unit State Status"};$4 ~ /^running$/{print $1,$2,$4}' | column -t
您可以通过管道将其输入column -t
以获得良好的可读输出。您还可以使用awk
而不是grep
检查第 4 列是否匹配running
。
正如其他评论中提到的,您也可以运行systemctl list-units --type service --state=running
而不是使用grep
或awk
过滤掉正在运行的服务。