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

我总是很困惑,以获得在Ubuntu中安装的软件版本。 为了防止完全输入以获得像 --version这样的版本,我总是使用像 -V这样的东西。

但问题是并非所有软件都适用。 对于一些我将使用 -v而对于一些我将使用完整的--version来获取版本。

例如

wget,gedit,nano,mysql等都适用于-V (Capital V)

PhpSkype和其他人从未使用过-V而是我要用-v (小v)来获得版本:

 php -V Usage: php [options] [-f]  [--] [args...] php [options] -r  [--] [args...] php [options] [-B ] -R  [-E ] [--] [args...] php [options] [-B ] -F  [-E ] [--] [args...] ... php -v PHP 5.3.10-1ubuntu3.9 with Suhosin-Patch (cli) (built: Dec 12 2013 04:27:25) ... 

有些像-fox-V一样使用firefox 。 有些甚至不能使用-v-V 图腾葡萄酒谷歌铬

  • 为什么会有这么大的差异?
  • 因为-V总是首选获得软件版本,为什么没有任何标准? 还是有任何我不知道的标准?

获取系统安装软件版本的正确方法是使用包管理器工具!

--version不是一种可行的方法,原因如下:

  • 并非所有程序都有可执行文件。 图书馆就是一个很好的例子。 您无法使用linux --version检查内核版本,因为没有这样的命令。 或者你的video驱动版本。

  • 并非所有可执行文件都具有命令行参数。 大多数人都这样做,但GUI程序不需要,有些则不需要。

  • --version ,与任何命令行参数一样,是依赖于应用程序的。 它取决于开发人员实现它,并没有“标准”本身,只是一个约定。 你已经注意到-v|-V ,它不一致。 甚至--help也不是普遍的。

  • --version的格式输出也不一致。 有些打印一行,有些打印几行。 有些只打印版本号,有些还打印程序名称。

也就是说,有一种标准的,一致的方法来获得系统中任何软件的安装版本: 询问系统 ,而不是软件!

由于其Debian传统,Ubuntu有一个强大的包管理系统apt (实际上是dpkg )。 它控制已安装的软件包,其依赖项,可用的存储库和版本

您可以使用多个包管理工具和前端来查询已安装的包。 以下是显示版本的一些内容:

  • apt-cache policy

  • dpkg --list (你可以使用通配符!)

如果您不知道给定命令所属的包,您可以通过以下几种方式找到:

  • apt-cache search ''

  • apt-file search ''

并且输出始终是一致的,可靠的,标准的,因为您不是在询问由不同开发人员制作的单个软件,而是在询问您的系统有关其状态的信息。

例如,这是搜索您在单个输出中提到的所有命令的结果

 $ dpkg --list wget gedit nano mysql-server skype php? firefox totem wine google-chrome* 
期望=未知/安装/删除/清除/保持
 | 状态=未/研究所/ conf目录,文件/解包/半的conf /半研究所/触发,等待/触发,挂起
 | / Err?=(无)/ Reinst-required(状态,错误:大写=坏)
 || /名称版本说明
 +++  -  =====  -  =================== =======  -  ========================================== ==========================
 ii firefox 42.0 + build2-0ubuntu0.12.04来自Mozilla的安全简便的Web浏览器
 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数据库服务器(metapackage取决于最新版本)
 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兼容层(元包)

这些是与每个应用程序相关的冗长选项,因此一些应用程序使用-V其他用户-v其他用户或仅用于–version。 命名约定没有通用规则。

我的意思是说那些选项没有标准,所以你可能会发现某个应用中的选项-X与其他的-R相同…

标准是:

 app --version 

-v-V只是(一般不说)– --version缩写forms。 你永远不会在手册页中看到类似的东西:

 -v Print version... 

要么:

 -V Print version... 

但是你会一直看到这两个选项,缩写forms(如果存在)和标准forms。 就像是:

 -v, --version Print version... 

要么:

 -V, --version Print version... 

这只取决于开发人员如何实现他们的应用程序 。 例如-v在某些情况下用作--verbose (参见man wget )的缩写forms,或者用于--invert-match (参见man grep )ao,或者在其他情况下用作独立的(参见man awkman ps )。

它通常最终由一个名为“详细程度”的选项引起。 详细程度运行程序并将尽可能多的信息打印到调用它的终端。

但是,某些程序不支持详细模式或不以需要任何forms冗长的方式运行,因此它们会吐出帮助字符串。 其他人会平等对待-v和-V。