Come posso trovare il numero di versione di un pacchetto installato tramite dpkg?

70

Uso il comando dpkg -l per scoprire quale versione di un pacchetto ho installato. Ad esempio:

dpkg -l network-manager

restituisce le informazioni sul pacchetto:

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

Come puoi vedere, restituisce 0.8.3~git.20101118t223039 che è sbagliato perché tronca la versione (ne ho scelta una lunga per lo scopo di questa domanda). Il modo in cui ho risolto questo problema in passato è passare un argomento COLUMNS stupidamente lungo per farlo espandere:

COLUMNS=200 dpkg -l network-manager

che mi fornisce l'intero numero di versione, ma anche un sacco di spazzatura:

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

Ora posso vedere il numero di versione completo, che è 0.8.3~git.20101118t223039.d60a988-0ubuntu1 .

Ho la sensazione che questo non sia il modo corretto per trovare il numero di versione di un pacchetto installato. Questo non è mai stato un problema in passato, ma con l'aggiunta di "ubuntu" nelle versioni e la proliferazione di PPA queste stringhe si allungano sempre di più. C'è un modo più semplice?

    
posta Jorge Castro 30.11.2010 - 07:20

5 risposte

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

e. g:.

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

Output di esempio:

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

Non sta utilizzando il comando dpkg ma apt-show-versions

Esempio:

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

Penso che aneeshep sia la migliore risposta in quanto la tua domanda specifica l'uso di dpkg. Ma per completezza, ecco un altro modo:

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 per il numero di versione:

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

Un altro metodo per trovare la versione di un pacchetto installato tramite dpkg come sotto,

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

Esempio:

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

Spiegazione:

Il comando

dpkg -l elenca tutti i pacchetti installati. Questo output standard è stato alimentato come input per il comando awk . awk cerca il nome del pacchetto corrispondente nello standard input ( colonna 2 ) se trova poi afferra la linea corrispondente. E infine stampa il valore di ( colonna 3 ) che in realtà rappresentava la versione del pacchetto.

$ 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

Secondo quanto sopra, la colonna 2 rappresenta il nome del pacchetto , la colonna 3 rappresenta la versione del pacchetto , la colonna 4 rappresenta l'architettura e la colonna 5 rappresenta la descrizione del pacchetto .

    
risposta data Avinash Raj 30.03.2014 - 10:46

Leggi altre domande sui tag