我总是搞不清楚如何获取 Ubuntu 中安装的软件版本。为了避免完全输入类似 的版本,<software> --version
我总是使用类似 的内容<software> -V
。
但问题是它并不适用于所有软件。有些软件我必须使用<software> -v
,而有些软件我必须使用完整--version
版才能获得。
例如
wget、gedit、nano、mysql 等都可以使用-V(大写 V)
但PHP,Skype可能其他人从未与-V我必须使用-v(小写 v)获取版本:
php -V
Usage: php [options] [-f] <file> [--] [args...]
php [options] -r <code> [--] [args...]
php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
...
php -v
PHP 5.3.10-1ubuntu3.9 with Suhosin-Patch (cli) (built: Dec 12 2013 04:27:25)
...
有些可以同时使用-v和-V喜欢火狐。有些甚至不适用于-v或者-V喜欢图腾,葡萄酒和谷歌浏览器。
- 为什么会有这么大的差别?
- 既然总是优先使用 -V 来获取软件版本,为什么没有任何标准?或者是否存在我不知道的标准?
答案1
获取系统安装软件版本的正确方法是使用包管理器工具!
--version
并不是一个可靠的方法,原因如下:
并非所有程序都有可执行文件。库就是一个很好的例子。您无法使用 检查内核版本
linux --version
,因为没有这样的命令。或者您的视频驱动程序版本。并非所有可执行文件都有命令行参数。大多数都有,但 GUI 程序不需要,有些则没有。
--version
和任何命令行参数一样,它依赖于应用程序。它取决于开发人员来实现它,并且本身没有“标准”,只是一种惯例。正如您所注意到的-v|-V
,它并不一致。甚至--help
不是通用的。的输出格式
--version
也不一致,有的只打印一行,有的打印几行,有的打印版本号仅有的,有些也打印程序名称。
话虽如此,是一个标准的、一致的方法来获取已安装的版本任何系统中的软件:咨询系统,不是软件!
由于继承了 Debian 的风格,Ubuntu 拥有一个强大的包管理系统,称为apt
(实际上,dpkg
)。它控制已安装的软件包、其依赖项、可用的存储库,和版本。
您可以使用多种软件包管理工具和前端来查询已安装的软件包。以下是一些显示版本的软件包:
apt-cache policy <package>
dpkg --list <package>
(您可以使用通配符!)
如果你不知道给定的命令属于哪个包,你可以通过以下几种方式来查找:
apt-cache search '<name>'
apt-file search '<path>'
并且输出始终是一致、可靠、标准的,因为您不是询问不同开发人员制作的单个软件,而是向系统查询其状态。
例如,以下是搜索的结果全部您在单路输出:
$ dpkg --list wget gedit nano mysql-server skype php? firefox totem wine google-chrome*
期望=未知/安装/移除/清除/保留 | 状态=未/安装/Conf-文件/未打包/halF-conf/半安装/trig-aWait/Trig-pend |/ 错误?=(无)/需要重新安装(状态,错误:大写=坏) ||/ 名称 版本 描述 +++-===========================-=============================-=========================================================================== ii firefox 42.0+build2-0ubuntu0.12.04 来自 Mozilla 的安全且简单的网络浏览器 ii gedit 3.4.1-0ubuntu1 GNOME 桌面环境的官方文本编辑器 ii google-chrome-stable 46.0.2490.80-1 Google 的网络浏览器 ii mysql-server 5.5.46-0ubuntu0.12.04.2 MySQL 数据库服务器(元包取决于最新版本) ii nano 2.2.6-1 小型、友好的文本编辑器,灵感来自 Pico ii php5 5.3.10-1ubuntu3.21 服务器端,HTML 嵌入式脚本语言(元包) ii skype 4.3.0.37-0ubuntu0.12.04.1 客户端,用于 Skype VOIP 和即时通讯服务 ii totem 3.0.1-0ubuntu21.1 基于 GStreamer 的 GNOME 桌面简单媒体播放器 ii wget 1.13.4-2ubuntu1.2 从网络上检索文件 ii wine 1.4-0ubuntu4.1 Microsoft Windows 兼容层(元包)
答案2
这些是与每个应用程序相关的详细选项,因此有些应用程序使用 -V,有些使用 -v,有些则使用两者或仅使用 --version。命名约定没有通用规则。
我的意思是这些选项没有标准,所以您可能会发现某些应用程序中的选项 -X 与其他应用程序中的选项 -R 相同......
答案3
标准是:
app --version
-v
或者-V
只是(不是一般而言)缩写形式--version
。你永远不会在手册页中看到类似这样的内容:
-v
Print version...
或者:
-V
Print version...
但您总是会看到这两个选项,即缩写形式(如果存在)和标准形式,它们在一起。例如:
-v, --version
Print version...
或者:
-V, --version
Print version...
但这仅取决于开发人员如何实现他们的应用程序。例如,-v
在某些情况下用作--verbose
(see man wget
) 或--invert-match
(see man grep
) ao 的缩写形式,在其他情况下则单独使用 (seeman awk
或man ps
)。
答案4
它通常是由名为“verbosity”的选项引起的。Verbosity 运行程序并将尽可能多的信息打印到调用它的终端。
但是,有些程序不支持详细模式,或者运行时不需要任何形式的详细性,因此它们会吐出帮助字符串。其他程序将平等对待 -v 和 -V。