如何通过 dpkg 找到已安装软件包的版本号?

如何通过 dpkg 找到已安装软件包的版本号?

我使用dpkg -l命令来查找我安装的软件包的版本。例如:

dpkg -l network-manager

返回包裹的信息:

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

如您所见,它返回了0.8.3~git.20101118t223039错误的值,因为它截断了版本(为了回答这个问题,我选择了一个较长的版本)。我过去解决这个问题的方法是传递一个愚蠢的长 COLUMNS 参数来使其扩展:

COLUMNS=200 dpkg -l network-manager

它给了我完整的版本号,但还有一堆垃圾:

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

现在我可以看到完整的版本号,即0.8.3~git.20101118t223039.d60a988-0ubuntu1

我感觉这不是查找已安装软件包版本号的正确方法。过去这从来都不是问题,但随着版本中“ubuntu”的增加和 PPA 的激增,这些字符串变得越来越长。有没有更简单的方法?

答案1

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

例如:

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

示例输出:

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

答案2

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

答案3

它不是使用dpkg命令,而是apt-show-versions 安装 banshee

例子:

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

答案4

另一种查找已安装软件包版本的方法dpkg如下,

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

例子:

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

解释:

dpkg -l命令列出所有已安装的软件包。此标准输出作为命令的输入awkawk在标准输入中搜索相应的软件包名称(第 2 栏) 如果找到,则抓取相应的行。最后打印 (第 3 栏) 实际上代表的是软件包版本。

$ 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

根据上述内容,第 2 列代表包裹名字,第 3 列代表软件包版本,第 4 列代表建筑学第 5 列代表封装描述

相关内容