如何获取 Debian 中正在运行的服务的版本号?
service --status-all
不给。
答案1
事实上,在 Debian 或任何 GNU/Linux 机器上运行的服务本身不一定有版本。相反,所有提供服务的守护进程都具有某种版本字符串,并且是某个软件包的一部分。前者很难挖掘出来,因为并非所有守护进程(尽管大多数守护进程)都会像人们期望的那样响应明显的命令行开关--version
。-v
后者稍微容易一些:我们可以列出启动各种守护进程的所有 init 脚本,然后列出这些文件的软件包信息。
这并非您所要求的,但非常接近。至少您会知道哪些软件包版本提供哪些服务。以下示例将生成目录中提供 init-script 或 -scripts 的所有软件包的列表/etc/init.d/
。
#!/bin/sh
for pkg in $(for file in /etc/init.d/* ; do \
dpkg -S $file | awk -F: '{ print $1 }' ; \
done | sort | uniq) ; do
echo "$pkg: `dpkg-query -W -f='${Version}' $pkg`"
done
这将需要一些时间才能完成,dpkg 并不是世界上最快的工具,并且它在那里运行了很多次。还会列出一些service --status-all
上面示例中未显示的内容。这只是因为我们只查询每个包一次(因为uniq
那里):一些包提供了几个 init-scripts,这会反映在 的输出中service --status-all
。