为什么“uname gcc”在 Ubuntu 中不起作用

为什么“uname gcc”在 Ubuntu 中不起作用

我知道它uname -a显示了完整的机器名称和详细信息等。但我确实uname gcc查看了我正在运行的 gcc 版本,它返回了Linux-这意味着什么?

Ubuntu86: $ uname gcc
Linux

这是我使用的机器(我知道它很旧):

Ubuntu86: $ uname -a
Linux ubuntu86 2.6.8.1-3-386 #1 Tue Oct 12 12:41:57 BST 2004 i686 GNU/Linux

如何查看本机上运行的 gcc 版本?

我通过输入以下内容安装了它:

Ubuntu86: $ sudo apt-get install gcc

所以我知道它安装了一个版本的 gcc,但不知道是什么版本。

答案1

对于第一个问题:uname,当不传递任何选项时,相当于uname -s因此显示Linux在您的系统上。

传递的参数gcc不是选项(不以连字符开头),因此命令会忽略它。

答案2

uname显示您正在使用的操作系统的名称 - 它只是忽略该参数并执行其通常的工作。它不显示已安装软件的版本。

大多数命令 - 包括gcc支持--version参数,因此gcc --version显示您当前的 GCC 版本。

答案3

对于第二个问题,答案是:gcc -v
在打印输出的最后一行,您可以找到gcc系统上安装的版本。

答案4

dpkg -l在基于 Debian 的系统上,包括 Ubuntu,您可以使用 (that's ell,not I or one)找出安装状态以及可能安装的软件包版本(如果您知道软件包名称) 。这样做通常不需要 root 访问权限,因为它是只读操作。

要找出哪个包拥有特定文件,请使用dpkg -S.同样,这不需要 root 访问权限。

将两者放在一起,您会得到类似的结果:

$ dpkg -S $(which gcc)
gcc: /usr/bin/gcc
$ dpkg -l gcc
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name              Version       Architecture  Description
+++-=================-=============-=============-=======================================
ii  gcc               4:4.7.2-1     amd64         GNU C compiler
$

这告诉我,在我的特定系统上,该架构4:4.7.2-1的软件包版本已完全安装和配置(状态)。gccamd64ii

如果您想要一个命令,它将dpkg -l $(dpkg -S $(which gcc) | awk -F: '{print $1}')显示与上面的命令示例相同的输出dpkg -l gcc。这里我使用 awk 来分割数据:并返回输出的第一部分。

请注意,程序包版本不一定准确反映程序本身报告的版本。就我而言,gcc --versiongcc (Debian 4.7.2-5) 4.7.2对于所有实际目的来说都是“足够接近”的,但是如果您试图弄清楚您所看到的行为是否是错误,那么它可能会有所不同。

更一般地说,你不应该向程序传递随机参数并期望事情能够顺利进行(对于“工作”的某些定义)。在具体情况下uname,它是无害的,但它很容易导致程序执行你真正不想做的操作;有些甚至有潜在危险。检查相关命令的手册页,了解它接受哪些参数以及它们的含义。 (许多控制台应用程序在仅使用不带参数的二进制文件名称调用时也会做一些相当安全的事情。许多控制台应用程序在不带参数启动时将显示版本和版权信息,尽管有许多应用程序的做法有所不同。)

相关内容