在 Ubuntu 中获取软件版本的 -v 和 -V 有什么区别?

在 Ubuntu 中获取软件版本的 -v 和 -V 有什么区别?

我总是搞不清楚如何获取 Ubuntu 中安装的软件版本。为了避免完全输入类似 的版本,<software> --version我总是使用类似 的内容<software> -V

但问题是它并不适用于所有软件。有些软件我必须使用<software> -v,而有些软件我必须使用完整--version版才能获得。

例如

wget、gedit、nano、mysql 等都可以使用-V(大写 V)

PHPSkype可能其他人从未与-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 awkman ps)。

答案4

它通常是由名为“verbosity”的选项引起的。Verbosity 运行程序并将尽可能多的信息打印到调用它的终端。

但是,有些程序不支持详细模式,或者运行时不需要任何形式的详细性,因此它们会吐出帮助字符串。其他程序将平等对待 -v 和 -V。

相关内容