¿Cómo puedo encontrar el número de versión de un paquete instalado a través de dpkg?

70

Utilizo el comando dpkg -l para averiguar qué versión de un paquete he instalado. Por ejemplo:

dpkg -l network-manager

devuelve la información en el paquete:

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                   Description
+++-=========================-=========================-==================================================================
ii  network-manager           0.8.3~git.20101118t223039 network management framework daemon

Como puede ver, devuelve 0.8.3~git.20101118t223039 que es incorrecto porque trunca la versión (he escogido una larga para esta pregunta). La forma en que resolví esto en el pasado es pasar un argumento COLUMNS estúpidamente largo para expandirlo:

COLUMNS=200 dpkg -l network-manager

que me da el número completo de la versión, pero también un montón de basura:

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                                      Description
+++-============================================-============================================-========================================================================================================
ii  network-manager                              0.8.3~git.20101118t223039.d60a988-0ubuntu1   network management framework daemon

Ahora puedo ver el número de versión completo, que es 0.8.3~git.20101118t223039.d60a988-0ubuntu1 .

Tengo la sensación de que esta no es la forma correcta de encontrar el número de versión de un paquete instalado. Esto nunca fue un problema en el pasado, pero con la adición de "ubuntu" en las versiones y la proliferación de PPA estas cadenas son cada vez más largas. ¿Hay alguna manera más fácil?

    
pregunta Jorge Castro 30.11.2010 - 07:20

5 respuestas

73
dpkg -s <packagename> | grep '^Version:'

e. g.:

dpkg -s network-manager | grep '^Version:'

Salida de muestra:

Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
    
respondido por el aneeshep 30.11.2010 - 07:27
29
dpkg-query --showformat='${Version}' --show python3-lxml
    
respondido por el A T 22.12.2015 - 03:16
24

No está utilizando el comando dpkg , pero apt-show-versions

Ejemplo:

$ apt-show-versions network-manager  
network-manager/maverick uptodate 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
    
respondido por el Isaiah 30.11.2010 - 07:37
14

Creo que aneeshep es la mejor respuesta ya que su pregunta especifica el uso de dpkg. Pero para completar, aquí hay otra forma:

apt-cache policy network-manager 
network-manager:
  Installed: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
  Candidate: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
  Version table:
 *** 0.8.1+git.20100810t184654.ab580f4-0ubuntu2 0
        500 http://us.archive.ubuntu.com/ubuntu/ maverick/main i386 Packages
        100 /var/lib/dpkg/status

O solo por el número de versión:

apt-cache policy network-manager | grep 'Installed:' | cut -c 14-
0.8.1+git.20100810t184654.ab580f4-0ubuntu2
    
respondido por el andrewsomething 30.11.2010 - 19:59
4

Otro método para encontrar la versión de un paquete instalado a través de dpkg como se indica a continuación,

dpkg -l | awk '=="package-name" { print  }'  

Ejemplo:

$ dpkg -l | awk '=="network-manager" { print  }'
0.9.8.0-0ubuntu22

Explicación:

El comando

dpkg -l enumera todos los paquetes instalados. Esta salida estándar se introdujo como entrada en el comando awk . awk busca el nombre del paquete correspondiente en la entrada estándar ( columna 2 ) si lo encuentra, toma la línea correspondiente. Y finalmente imprime el valor de ( columna 3 ) que en realidad representa la versión del paquete.

$ dpkg -l
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

De acuerdo con lo anterior, la columna 2 representa el nombre del paquete , la columna 3 representa la versión del paquete , la columna 4 representa la arquitectura y la columna 5 representa la descripción del paquete .

    
respondido por el Avinash Raj 30.03.2014 - 10:46

Lea otras preguntas en las etiquetas