我需要在 bash 脚本中检测当前 Linux 的体系结构。我看到有时 uname 会提供信息,但很棘手。这取决于系统是否将其显示在一个地方或另一个地方,甚至不显示在 uname 命令上。
在基于 Debian 的系统上,我看到了该dpkg --print-architecture
命令,但仅适用于基于 Debian 的系统。
我需要检查是否是 i386、amd64、armhf、armel、arm64 或其他。
有没有一个可以在所有 Linux 系统上运行的“通用”工具?我需要当前安装的内核架构...而不是我的硬件能够支持的
答案1
GNU 核心工具附带arch
和uname -m
命令来打印内核编译的体系结构。
dpkg --print-architecture
如果您想了解可以在系统上安装哪些架构的二进制文件,这是正确的工具(应用程序二进制接口,ABI)。请注意,在所谓的多架构具有多个架构的系统。示例:Debian PC 可能在 64 位 CPU 上运行 64 位内核和混合 32/64 位软件。如果您想要利用 64 位的优势,同时能够执行 32 位旧应用程序,这会很有用。 Debian 和派生发行版在这方面非常强大,不确定其他发行版是否提供类似的功能。
如果您正在寻找一种可移植的方法来找出 chroot 环境或容器内使用的体系结构(如 ABI 中),您可以检查编译系统文件之一的体系结构,例如
$ file -Lb /usr/bin/ld | cut -d, -f2
x86-64
答案2
有很多可能性;uname -m
是一个,又/proc/cpuinfo
是另一个。getconf
还有很多可以解析的配置信息。也许看看 LSB(Linux 标准库)中是否有东西?