Como posso encontrar o número da versão de um pacote instalado via dpkg?

70

Eu uso o comando dpkg -l para descobrir qual versão de um pacote eu instalei. Por exemplo:

dpkg -l network-manager

retorna as informações no pacote:

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 você pode ver, ele retorna 0.8.3~git.20101118t223039 , o que está errado porque trunca a versão (escolhi uma longa para o propósito desta questão). A maneira como resolvi isso no passado é passar um argumento COLUMNS estupidamente longo para expandi-lo:

COLUMNS=200 dpkg -l network-manager

que me dá o número inteiro da versão, mas também um monte de lixo:

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

Agora, posso ver o número completo da versão, que é 0.8.3~git.20101118t223039.d60a988-0ubuntu1 .

Tenho a impressão de que essa não é a maneira correta de encontrar o número da versão de um pacote instalado. Isso nunca foi um problema no passado, mas com o avanço do "ubuntu" nas versões e a proliferação de PPAs, essas strings estão ficando cada vez mais longas. Existe uma maneira mais fácil?

    
por Jorge Castro 30.11.2010 / 07:20

5 respostas

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

e. g .:

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

Exemplo de saída:

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

Não está usando o comando dpkg , mas apt-show-versions

Exemplo:

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

Eu acho que o aneeshep é a melhor resposta, pois sua pergunta especifica o uso do dpkg. Mas, por completo, aqui está outra maneira:

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

Ou apenas para o número da versão:

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

Outro método para encontrar a versão de um pacote instalado via dpkg , conforme abaixo,

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

Exemplo:

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

Explicação:

O comando

dpkg -l lista todos os pacotes instalados.Esta saída padrão foi alimentada como entrada para o comando awk . awk procura o nome do pacote correspondente na entrada padrão ( coluna 2 ) se encontrar, então pega a linha correspondente. E finalmente imprime o valor de ( coluna 3 ) que na verdade representa a versão do pacote.

$ 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 acordo com o acima, a coluna 2 representa o nome do pacote , a coluna 3 representa a versão do pacote , a coluna 4 representa a arquitetura e a coluna 5 representa descrição do pacote .

    
por Avinash Raj 30.03.2014 / 10:46