Risposte:
I servizi in esecuzione su Debian o su qualsiasi box GNU / Linux non hanno necessariamente una versione autonoma. Invece tutti i demoni che forniscono servizi hanno una sorta di stringa di versione e fanno parte di alcuni pacchetti. Il primo è piuttosto difficile da scavare poiché non tutti i demoni, sebbene la maggior parte di essi, rispondano a ovvi parametri della riga di comando --version
o -v
al modo in cui ci si potrebbe aspettare. Quest'ultimo è un po 'più semplice: possiamo semplicemente prendere un elenco di tutti gli script di avvio che avviano i vari demoni e quindi elencare le informazioni sul pacchetto per quei file.
Questo non è esattamente quello che hai chiesto, ma si avvicina abbastanza. Almeno saprai quali versioni del pacchetto forniscono quali servizi. L'esempio seguente produrrà un elenco di tutti i pacchetti che forniscono uno script o script-init nella directory /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
Ci vorrà del tempo per superarlo, dpkg non è la cosa più veloce del pianeta e viene eseguita parecchie volte lì. Ci saranno anche alcune cose elencate in base alle service --status-all
quali non sono mostrate nell'esempio sopra. Questo semplicemente perché stiamo interrogando ogni pacchetto una sola volta (a causa di ciò uniq
): alcuni pacchetti forniscono diversi script di inizializzazione e questo si riflette poi sull'output di service --status-all
.