当前位置: 首页>>技术问答>>正文


如何通过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的激增之后,这些字符串变得越来越长。有更容易的方法吗?

最佳解决方法

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

即G。:

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

示例输出:

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

次佳解决方法

它没有使用dpkg命令,而是使用apt-show-versions

command-line,dpkg,ubuntu

例:

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

第三种解决方法

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

第四种方法

我认为aneeshep是最好的答案,因为您的问题使用dpkg指定。但为了完整起见,这是另一种方式:

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

或者只是版本号:

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

第五种方法

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

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

例:

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

说明:

dpkg -l命令列出所有已安装的软件包。此标准输出作为输入提供给awk命令。 awk在标准输入(第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列表示软件包说明。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1015.html,未经允许,请勿转载。