如何通过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 | grep '^Version:'
例如:
dpkg -s network-manager | grep '^Version:'
样本输出:
Version: 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
dpkg-query --showformat='${Version}' --show python3-lxml
它不是使用dpkg
命令而是使用apt-show-versions
例:
$ apt-show-versions network-manager network-manager/maverick uptodate 0.8.1+git.20100810t184654.ab580f4-0ubuntu2
我认为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 14.04 64位上安装Skype 4.3
- 每次安装或删除软件包时,都会出现LVM2错误
- 使用dpkg创建debain源包时出错
- yum whatprovides’perl(Foo :: Bar)’等同于apt还是dpkg?
- 14.04 Ubuntu 64bit上的Steam安装错误
- “试图覆盖’/usr/share/man/man1/node.1.gz’,这也是包nodejs-legacy 0.10.25~dfsg2-2ubuntu1”
- 安装linux-image-4.10.0-33-generic时出现磁盘完全错误
- 丢失/删除dpkg(Debian的包管理器)。 我怎样才能找回来?
- “涉及服务的循环”:apt-get install打破dpkg