回答:
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
上記の例では表示されないものもいくつかリストされます。これは、単に各パッケージを1回だけクエリするためです(そのためuniq
):一部のパッケージは複数のinitスクリプトを提供し、これはの出力に反映されますservice --status-all
。