Как узнать номер версии запущенных сервисов в Debian?
service --status-all
не дает этого.
Службы, работающие на 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-скриптов, и это отражается на выходе service --status-all
.