arch 是否存在于所有 linux/unix 系统上?

arch 是否存在于所有 linux/unix 系统上?

试图找到最便携的方法来确定系统的 CPU 架构,无论是 32 位 x86、64 位还是其他(例如 ARM)。该命令是否arch存在于所有系统上?否则我如何从外壳测试这个?

答案1

arch是一个 GNU 命令。它只是 的同义词uname -muname -m是可移植的,因为它的存在是由POSIX它存在于历史上的 Unix 系统中,除了极早期的系统。

不太可移植的是输出的含义。这在 Unix 变体之间确实有所不同。

输出不会告诉您系统是 32 位还是 64 位。没有命令可以告诉您系统是 32 位还是 64 位,因为这不是一个明确定义的选项。看Linux 命令返回位数(32 或 64)?了解报告系统位数的一些方法,了解 32/64 位的几种概念。

答案2

FreeBSD 10.3 没有该arch命令。

也许uname -m可能更合适?即使如此,FreeBSD 输出amd64,而 OS X El Capitan 输出x86_64,所以你需要考虑到这一点。我没有任何 Linux 主机来测试这个......

答案3

在我的 64 位 OSX 上埃尔卡皮坦系统,arch打印i386。也许你不应该盲目相信它的输出。

有趣的是,

$ file /usr/bin/arch
arch: Mach-O universal binary with 2 architectures
arch (for architecture i386):   Mach-O executable i386
arch (for architecture x86_64): Mach-O 64-bit executable x86_64

对于 Linux,较旧的系统没有 GNU coreutils 现在提供的版本(以及某些机器没有arch程序或脚本)。 2007 年添加的,引用自NEWS

* Noteworthy changes in release 6.9.90 (2007-12-01) [beta]

** New programs

  arch: equivalent to uname -m, not installed by default
  But don't install this program on Solaris systems.

之所以评论说不要在Solaris上安装,是因为Sun从20世纪80年代的SunOS开始就提供了这个实用程序。旧的手册页很难找到; SunOS 4.1.3 日期这是1992年。 AIX 和 HPUX 没有arch程序,并且与复制到 Linux 中的其他 SunOS 功能一样,POSIX 中也没有这一功能。

如果您需要更可靠的东西,则输出config.guess对大多数人来说效果很好:

# You can get the latest version of this script from:                           
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess 

如果您阅读该脚本,就会发现某些(较旧的)机器无法uname -m按您的预期工作。但首先请阅读标题中的许可证,看看它如何适用于您。

相关内容