-v和-V在Ubuntu中获取软件版本有什么区别?
我总是很困惑,以获得在Ubuntu中安装的软件版本。 为了防止完全输入以获得像 --version
这样的版本,我总是使用像 -V
这样的东西。
但问题是并非所有软件都适用。 对于一些我将使用 -v
而对于一些我将使用完整的--version
来获取版本。
例如
wget,gedit,nano,mysql等都适用于-V (Capital V)
但Php , Skype和其他人从未使用过-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 awk
或man ps
)。
它通常最终由一个名为“详细程度”的选项引起。 详细程度运行程序并将尽可能多的信息打印到调用它的终端。
但是,某些程序不支持详细模式或不以需要任何forms冗长的方式运行,因此它们会吐出帮助字符串。 其他人会平等对待-v和-V。