如何从命令行获取应用程序的版本?

我想知道如何获取一个已安装的程序的版本信息,该程序没有实现--version-version方法。

我知道你的意思是任何一个程序,但你能具体说说是哪个程序吗? - user8290
4个回答

你可以使用dpkgapt-cache

例如,要检查bash的版本:

dpkg -l bash

apt-cache show bash

对于那些只是寻找一般Linux答案的人来说,RHEL/CentOS/Fedora(以及类似的系统)的等效命令是yum requires <file>,例如yum requires ssh-keygen将给出您的openSSH版本。 - Seldom 'Where's Monica' Needy
1@SeldomNeedy - yum 在 Fedora 上已被弃用,Fedora 使用 dnf。CentOS/RHEL 仍使用 yum。 - Panther

如果程序没有任何命令行选项来显示版本信息,你可以尝试使用 dpkg 来获取包含程序版本的软件包版本。
dpkg -S "$(which YOUR_PROGRAM)"

打印包含YOUR_PROGRAM的程序包。
dpkg --status YOUR_PACKAGE | grep ^Version

打印出YOUR_PACKAGE的版本。
你可以把它们放在一起:
dpkg --status "$(dpkg -S "$(which YOUR_PROGRAM)" | cut -d: -f1)" | grep ^Version

例如,可以像这样使用它来执行ls命令:

dpkg --status "$(dpkg -S "$(which ls)"| cut -d: -f1)"| grep ^Version

1作为一个建议,将所有内容放入一个函数中,并在启动shell时加载它。 - Zoke

下面的命令还可以给你提供安装包的确切版本信息。
apt-cache policy <package-name> | grep Installed: | cut -d: -f2

示例

$ apt-cache policy firefox | grep Installed: | cut -d: -f2
24.0+build1-0ubuntu1

$ apt-cache policy gedit | grep Installed: | cut -d: -f2
3.8.3-0ubuntu3

你可以使用dpkg-query命令来获取软件包的版本信息。
$ dpkg-query -W -f='${binary:Package} ${Version}\n' firefox
firefox 29.0+build1-0ubuntu0.13.10.3

仅获取版本字符串:

$ dpkg-query -W -f='${Version}\n' firefox
29.0+build1-0ubuntu0.13.10.3