我使用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
例子:
$ 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
命令列出所有已安装的软件包。此标准输出作为命令的输入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 列代表封装描述。