it-swarm.dev

Jak najdu číslo verze nainstalovaného balíčku prostřednictvím dpkg?

Používám dpkg -l příkaz k zjištění, jakou verzi balíčku jsem nainstaloval. Například:

dpkg -l network-manager

vrátí informace na balíčku:

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

Jak vidíte, vrací 0.8.3~git.20101118t223039 což je špatně, protože zkrátí verzi (pro tuto otázku jsem si vybral dlouhou). Způsob, jakým jsem to vyřešil v minulosti, je předat hloupě dlouhý argument COLUMNS, aby se rozšířil:

COLUMNS=200 dpkg -l network-manager

což mi dává celé číslo verze, ale také spoustu nevyžádané pošty:

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

Nyní vidím celé číslo verze, což je 0.8.3~git.20101118t223039.d60a988-0ubuntu1.

Mám pocit, že to není správný způsob, jak najít číslo verze nainstalovaného balíčku. V minulosti to ve skutečnosti nikdy nebyl problém, ale s řešením „ubuntu“ ve verzích a množením PPA se tyto řetězce prodlužují. Existuje snadnější způsob?

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

e. G.:

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

Ukázkový výstup:

Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
84
aneeshep
dpkg-query --showformat='${Version}' --show python3-lxml
42
A T

Nepoužívá příkaz dpkg, ale apt-show-versionInstall banshee

Příklad:

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

Domnívám se, že aneeshep's je nejlepší odpověď, protože vaše otázka určuje použití dpkg. Ale pro úplnost je tu další způsob:

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

Nebo jen pro číslo verze:

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

Další způsob, jak najít verzi nainstalovaného balíčku pomocí dpkg, jak je uvedeno níže,

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

Příklad:

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

Vysvětlení:

Příkaz dpkg -l Uvádí všechny nainstalované balíčky.Tento standardní výstup byl přiváděn jako vstup do příkazu awk. awk hledá odpovídající název balíčku ve standardním vstupu ( sloupec 2), pokud zjistí, pak chytne odpovídající řádek. A konečně vytiskne hodnotu ( sloupec 3), která ve skutečnosti představuje verzi balíčku.

$ 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

Podle výše uvedeného sloupec 2 představuje název balíčk, sloupec 3 představuje verze balíčk, sloupec 4 představuje architektura a sloupec 5 představuje - popis balíčk.

5
Avinash Raj