Entendiendo la salida de dpkg-query status
Estoy interesado en saber si un paquete está instalado en el sistema (debian).
Para ello se puede utilizar dpkg -l
, por ejemplo consultando el estado del
paquete network-manager
:
$ dpkg -l network-manager
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=================================-=====================-=====================-========================================================================
ii network-manager 1.12.2-2 amd64 network management framework (daemon and userspace tools)
Ahora, interesa obtener la misma información para utilizar en un script sin tener que utilizar expresiones regulares para parsear la salida.
Para ello se pueden utilizar los comandos dpkg
o dpkg-query
.
La diferencia entre ellos está descrita en la página del manual de dpkg:
dpkg can also be used as a front-end to dpkg-deb(1) and dpkg-query(1). The list of supported actions can be found later on in the ACTIONS section. If any such action is encountered dpkg just runs dpkg-deb or dpkg-query with the parameters given to it, but no specific options are currently passed to them, to use any such option the back-ends need to be called directly.
Ya que se desea controlar lo más posible la salida del comando se utilizará
dpkg-query
:
$ dpkg-query -W -f '${Status}\n' network-manager
install ok installed
Para entender la salida conviene utilizar la página del manual de
dpkg
que explica las
flags que puede tener un paquete:
Package flags
ok A package marked ok is in a known state, but might need further processing.
reinstreq A package marked reinstreq is broken and requires reinstallation. These packages cannot be removed, unless forced with option –force-remove-reinstreq.
En comparación, la página del manual de dpkg-query
no
es tan clara:
Error flags:
<empty> = (none)
R = Reinst-require
Ambas páginas listan de forma similar los Package states y los Package
selection states, pero solo la página del manual de dpkg
los
explica.