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


83

Uso il dpkg -lcomando per scoprire quale versione di un pacchetto ho installato. Per 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, ritorna 0.8.3~git.20101118t223039che è sbagliato perché tronca la versione (ne ho scelta una lunga ai fini di questa domanda). Il modo in cui l'ho risolto in passato è passare un argomento COLONNE stupidamente lungo per farlo espandere:

COLUMNS=200 dpkg -l network-manager

che mi dà l'intero numero di versione, ma anche un mucchio 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 di trovare il numero di versione di un pacchetto installato. Questo non è mai stato davvero un problema in passato, ma con l'attaccamento di "ubuntu" nelle versioni e la proliferazione di PPA queste stringhe stanno diventando sempre più lunghe. C'è un modo più semplice?

Risposte:


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

per esempio:

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

Uscita campione:

Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2

dpkg --info package.debfunziona, anche se -snon lo è
Twisted Pear,

2
@Twisted Pear - dpkg --info package.debopera sui file dei pacchetti, dpkg -s <packagename>opera sui nomi dei pacchetti - nessun file richiesto
corsia

37
dpkg-query --showformat='${Version}' --show python3-lxml

2
Quando si interrogano più pacchetti suggerisco:dpkg-query --showformat='${Package}\t${Version}\n' --show lsb-release coreutils ...
ThorSummoner il

6
Mi piace questa versione, poiché è precisa (non è necessario grep o taglio).
Guettli,

1
Quasi sicuramente vogliono stampare una nuova riga, altrimenti si tratta di un comportamento simile a "printf". Ad esempio dpkg-query --showformat='${Version}\n' --show python3-lxml,.
Chris Lamb,

25

Non sta usando il dpkgcomando ma apt-show-version Installa banshee

Esempio:

$ apt-show-versions network-manager  
network-manager/maverick uptodate 0.8.1+git.20100810t184654.ab580f4-0ubuntu2

15

Penso che aneeshep sia la migliore risposta come specifica la tua domanda usando 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

1
L'output di apt-cachedipende dalle impostazioni internazionali correnti. Ad esempio in Germania è necessario grep 'Installiert:'. Per compensare ciò, utilizzare sempre le impostazioni internazionali C.UTF-8durante gli script. O LC_ALL=C.UTF-8; export LC_ALLall'inizio della sceneggiatura o, caso per caso, qualcosa del genere:LC_ALL=C.UTF-8 apt-cache policy network-manager | grep 'Installed:' | awk '{print $2}'
Tino,

5

Un altro metodo per trovare la versione di un pacchetto installato dpkgcome di seguito,

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

Esempio:

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

Spiegazione:

dpkg -lIl comando elenca tutti i pacchetti installati. Questo output standard è stato inserito come input per il awkcomando. awkcerca il nome del pacchetto corrispondente nell'input standard ( colonna 2 ) se trova, quindi prende la riga 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 .


Perché devi prima elencare tutti i pacchetti usando dpkgprima e poi lasciare che awk li filtri di nuovo? Puoi richiedere la lista anche per un singolo pacchetto:dpkg -l <package-name>
gertvdijk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.