Jor*_*tro 99 command-line dpkg
我使用该dpkg -l命令来找出我安装的软件包的版本。例如:
dpkg -l network-manager
Run Code Online (Sandbox Code Playgroud)
返回包的信息:
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它返回0.8.3~git.20101118t223039哪个是错误的,因为它截断了版本(为了这个问题,我选择了一个很长的版本)。我过去解决这个问题的方法是传递一个愚蠢的长 COLUMNS 参数以使其扩展:
COLUMNS=200 dpkg -l network-manager
Run Code Online (Sandbox Code Playgroud)
这给了我整个版本号,还有一堆垃圾:
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
Run Code Online (Sandbox Code Playgroud)
现在我可以看到完整的版本号,即0.8.3~git.20101118t223039.d60a988-0ubuntu1.
我觉得这不是查找已安装软件包版本号的正确方法。这在过去从来都不是问题,但是随着版本中“ubuntu”的加入和 PPA 的激增,这些字符串变得越来越长。有更容易的方法吗?
ane*_*hep 92
dpkg -s <packagename> | grep '^Version:'
Run Code Online (Sandbox Code Playgroud)
例如:
dpkg -s network-manager | grep '^Version:'
Run Code Online (Sandbox Code Playgroud)
示例输出:
Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
Run Code Online (Sandbox Code Playgroud)
A T*_*A T 50
dpkg-query --showformat='${Version}' --show python3-lxml
Run Code Online (Sandbox Code Playgroud)
Isa*_*iah 26
它不是使用dpkg命令而是使用apt-show-versions
例子:
$ apt-show-versions network-manager
network-manager/maverick uptodate 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
Run Code Online (Sandbox Code Playgroud)
and*_*ing 15
我认为 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
Run Code Online (Sandbox Code Playgroud)
或者只是版本号:
apt-cache policy network-manager | grep 'Installed:' | cut -c 14-
0.8.1+git.20100810t184654.ab580f4-0ubuntu2
Run Code Online (Sandbox Code Playgroud)
另一种通过dpkg如下方式查找已安装软件包版本的方法,
dpkg -l | awk '$2=="package-name" { print $3 }'
Run Code Online (Sandbox Code Playgroud)
例子:
$ dpkg -l | awk '$2=="network-manager" { print $3 }'
0.9.8.0-0ubuntu22
Run Code Online (Sandbox Code Playgroud)
解释:
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
Run Code Online (Sandbox Code Playgroud)
根据上述,第 2 列表示包名称,第 3 列表示包版本,第 4 列表示架构,第 5 列表示包描述。