我正在尝试编写一个脚本,该脚本将根据机器的体系结构确定操作。我已经用来uname -m
收集架构线,但我不知道有多少种 ARM 架构,也不知道其中一个是armhf
、armel
、 还是arm64
。
由于此脚本需要确定脚本的某些部分是否可以运行,因此我试图找到一种简单的方法来确定架构是armhf
、armel
或arm64
。是否有任何单行命令或简单命令可用于输出armhf
、armel
或arm64
?
该脚本是专门为 Debian 和 Ubuntu 系统编写的,我在标记时考虑到了这一点(如果您不在这些发行版之一上,它会自动退出,但这也可以以更广泛的方式应用,如果命令存在)
编辑:最近了解到armel已经死了,而arm64软件构建器(PPA或基于虚拟的)并不是最稳定的。所以我有一个通配符搜索发现arm*
并假设armhf,但仍然有必要找出一个返回三个之一的单行 - 无论是Ubuntu / Debian命令还是内核调用还是其他什么。
答案1
在 Debian 及其衍生产品上,
dpkg --print-architecture
将输出运行该程序的机器的主要架构。这将armhf
在运行 32 位 ARM Debian 或 Ubuntu(或衍生产品)的机器上,arm64
在运行 64 位 ARM 的机器上。
在基于 RPM 的系统上,
rpm --eval '%{_arch}'
将输出当前架构名称(可能受其他参数影响,例如 --target
)。
请注意,运行的架构可能与硬件架构甚至内核架构不同。 Debian可以i386
在 64 位 Intel 或 AMD CPU 上运行,我相信也可以armhf
在 64 位 ARM CPU 上运行。内核上也可能有大部分i386
二进制文件(因此主要架构是) ,甚至是来自完全不同架构的二进制文件(如果 QEMU 支持的话)(这种情况的常见用途是用于交叉编译的 chroot)。i386
amd64
debootstrap
答案2
如果您的系统中未安装 dpkg(例如在精简的 docker 容器中),此命令将帮助您
$ arch