问题描述
我使用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
例:
$ 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列表示软件包说明。