如何获取在 Linux 上运行的所有服务列表并打印它们的版本?
它需要是以下内容的组合:
获取正在运行的服务列表:
systemctl list-units -t service --state=active --plain --no-legend --no-page
获取每个服务的名称并运行:
rpm -q <service package name>
然后获取一个表或 json 或 csv 类型的输出:
nginx.service 1:1.20.1-2.el7
我正在考虑编写一个 python 脚本来执行此操作,但我想我会在这里询问,以防有一种更 linux/bash 的方法可以轻松完成此操作。
最佳答案
#!/bin/bash
listServices(){
/bin/systemctl list-units -t service --state=active --plain --no-legend --no-page |
awk -F[@\.] '{print $1}'
}
CSV
while read -r service;do
rpm -q "$service" --qf '%{NAME}.service;%{VERSION}\n'
done < <(listServices)|grep -v "not installed"
dbus.service;1.10.24
firewalld.service;0.6.3
...
Json:
echo '['
while read -r service;do
rpm -q "$service" --qf '{"name": "%{NAME}.service", "version": "%{VERSION}"\},\n'
done < <(listServices)|grep -v "not installed" |sed '$s/,$//'
echo ']'
[
{
"name": "dbus.service",
"version": "1.10.24"
},
{
"name": "firewalld.service",
"version": "0.6.3"
},
{
...
]
关于linux - 获取正在运行的服务并输出Linux上的服务版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73018455/