Vraag Hoe vind ik het versienummer van een geïnstalleerd pakket via dpkg?


ik gebruik de dpkg -l opdracht om te achterhalen welke versie van een pakket ik heb geïnstalleerd. Bijvoorbeeld:

dpkg -l network-manager

geeft de informatie op het pakket terug:

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

Zoals je kunt zien, keert het terug 0.8.3~git.20101118t223039 wat verkeerd is omdat het de versie afkapt (ik heb er een lange uitgekozen voor het doel van deze vraag). De manier waarop ik dit in het verleden heb opgelost is om een ​​stom lang COLUMNS-argument door te geven om het uit te breiden:

COLUMNS=200 dpkg -l network-manager

waardoor ik het volledige versienummer krijg, maar ook een hoop rotzooi:

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

Nu kan ik het volledige versienummer zien, wat wel zo is 0.8.3~git.20101118t223039.d60a988-0ubuntu1.

Ik krijg het gevoel dat dit niet de juiste manier is om het versienummer van een geïnstalleerd pakket te vinden. Dit was in het verleden nooit echt een probleem, maar met de overstag van "ubuntu" in de versies en de proliferatie van PPA's worden deze snaren steeds langer. Is er een gemakkelijkere manier?


70
2017-11-30 06:20


oorsprong




antwoorden:


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

e. g .:

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

Voorbeelduitvoer:

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

73
2017-11-30 06:27



dpkg --info package.deb werkt echter -s niet - Twisted Pear
@Twisted Pear - dpkg --info package.deb werkt op pakketbestanden, dpkg -s <packagename> werkt op pakketnamen - geen bestand vereist - lane


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

29
2017-12-22 02:16



Bij het doorzoeken van meerdere pakketten raad ik aan: dpkg-query --showformat='${Package}\t${Version}\n' --show lsb-release coreutils ... - ThorSummoner
Ik vind deze versie leuk, omdat deze precies is (geen grep of knippen nodig). - guettli


Het gebruikt de dpkg commando maar apt-Show-versies  Install banshee

Voorbeeld:

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

24
2017-11-30 06:37





Ik denk dat aneeshep's het beste antwoord is, zoals je vraag specificeert met behulp van dpkg. Maar voor de volledigheid, hier is een andere manier:

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

Of alleen voor het versienummer:

apt-cache policy network-manager | grep 'Installed:' | cut -c 14-
0.8.1+git.20100810t184654.ab580f4-0ubuntu2

14
2017-11-30 18:59



De uitvoer van apt-cache hangt af van de huidige Locale. Bijvoorbeeld in Duitsland moet dat grep 'Installiert:'. Gebruik altijd Locale om dit te compenseren C.UTF-8 bij het scripten. Ofwel met LC_ALL=C.UTF-8; export LC_ALL aan het begin van het script of voor een case-by-case basis zoiets als: LC_ALL=C.UTF-8 apt-cache policy network-manager | grep 'Installed:' | awk '{print $2}' - Tino


Een andere methode om de versie van een geïnstalleerd pakket via te vinden dpkg zoals hieronder,

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

Voorbeeld: 

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

Uitleg:

dpkg -l commando geeft een overzicht van alle geïnstalleerde pakketten. Deze standaarduitvoer is als invoer voor de awk opdracht.awk zoekt naar de overeenkomstige pakketnaam in de standaardinvoer (kolom 2) als het vindt dan grijpt het de overeenkomstige lijn. En tenslotte drukt de waarde van (kolom 3) die eigenlijk de pakketversie vertegenwoordigde.

$ 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

Volgens het bovenstaande vertegenwoordigt kolom 2 de verpakkingsnaam, kolom 3 vertegenwoordigt de pakketversie, kolom 4 vertegenwoordigt de architectuur en kolom 5 vertegenwoordigt pakketbeschrijving.


4
2018-03-30 08:46



Waarom moet je een lijst maken? alle pakketten gebruiken dpkg eerst en laat ze dan opnieuw filteren? U kunt de aanbieding ook voor één pakket aanvragen: dpkg -l <package-name> - gertvdijk