Comment trouver le numéro de version d'un paquet installé via dpkg?

83

J'utilise la dpkg -lcommande pour savoir quelle version d'un paquet que j'ai installé. Par exemple:

dpkg -l network-manager

renvoie les informations sur le package:

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

Comme vous pouvez le constater, il renvoie 0.8.3~git.20101118t223039ce qui est erroné car il tronque la version (j'en ai choisi une longue pour les besoins de cette question). La façon dont j'ai résolu ce problème dans le passé est de passer un argument stupidement long de COLUMNS pour le développer:

COLUMNS=200 dpkg -l network-manager

ce qui me donne le numéro de version complet, mais aussi un tas de bric-à-brac:

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

Maintenant, je peux voir le numéro de version complet, qui est 0.8.3~git.20101118t223039.d60a988-0ubuntu1.

J'ai l'impression que ce n'est pas la bonne façon de trouver le numéro de version d'un paquet installé. Cela n’était jamais vraiment un problème dans le passé, mais avec l’ajout de "ubuntu" dans les versions et la multiplication des PPA, ces chaînes deviennent de plus en plus longues. Y a-t-il un moyen plus facile?

Jorge Castro
la source

Réponses:

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

par exemple:

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

Exemple de sortie:

Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
aneeshep
la source
dpkg --info package.debfonctionne, mais -sne l'a pas fait
Twisted Pear
2
@ Twisted Pear - dpkg --info package.debfonctionne sur les fichiers de paquets, dpkg -s <packagename>sur les noms de paquets - aucun fichier requis
piste
37
dpkg-query --showformat='${Version}' --show python3-lxml
À
la source
2
Quand on interroge plusieurs paquets, je suggère:dpkg-query --showformat='${Package}\t${Version}\n' --show lsb-release coreutils ...
ThorSummoner
6
J'aime cette version, car elle est précise (pas de grep ni de découpe nécessaire).
Guettli
1
Vous voulez presque certainement imprimer une nouvelle ligne, sinon ce comportement ressemble à celui de "printf". Par exemple, dpkg-query --showformat='${Version}\n' --show python3-lxml.
Chris Lamb
25

Il n'utilise pas la dpkgcommande mais apt-show-versions Installer banshee

Exemple:

$ apt-show-versions network-manager  
network-manager/maverick uptodate 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
Isaïe
la source
15

Je pense que aneeshep est la meilleure réponse car votre question précise l'utilisation de dpkg. Mais pour être complet, voici une autre façon:

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 juste pour le numéro de version:

apt-cache policy network-manager | grep 'Installed:' | cut -c 14-
0.8.1+git.20100810t184654.ab580f4-0ubuntu2
andrewsomething
la source
1
La sortie de apt-cachedépend de la locale actuelle. Par exemple, en Allemagne, vous devez le faire grep 'Installiert:'. Pour compenser cela, utilisez toujours les paramètres régionaux C.UTF-8lors de la création de scripts. Soit LC_ALL=C.UTF-8; export LC_ALLau début du script, soit au cas par cas, par exemple:LC_ALL=C.UTF-8 apt-cache policy network-manager | grep 'Installed:' | awk '{print $2}'
Tino le
5

Une autre méthode pour trouver la version d’un paquet installé via dpkgcomme ci-dessous,

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

Exemple:

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

Explication:

dpkg -lLa commande énumère tous les packages installés. Cette sortie standard a été fournie en entrée de la awkcommande. awkrecherche le nom du paquet correspondant dans l'entrée standard ( colonne 2 ) s'il trouve, puis saisit la ligne correspondante. Et finalement, affiche la valeur de ( colonne 3 ) qui représente en fait la version du package.

$ 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

Selon ce qui précède, la colonne 2 représente le nom du package , la colonne 3 représente la version du package , la colonne 4 représente l' architecture et la colonne 5 représente la description du package .

Avinash Raj
la source
Pourquoi avez-vous besoin de lister tous les paquets en utilisant d' dpkgabord et ensuite laisser awk les filtrer à nouveau? Vous pouvez également demander la liste pour un seul colis:dpkg -l <package-name>
gertvdijk le