简单的命令行方法来确定特定的ARM架构字符串?

简单的命令行方法来确定特定的ARM架构字符串?

我正在尝试编写一个脚本,该脚本将根据机器的体系结构确定操作。我已经用来uname -m收集架构线,但我不知道有多少种 ARM 架构,也不知道其中一个是armhfarmel、 还是arm64

由于此脚本需要确定脚本的某些部分是否可以运行,因此我试图找到一种简单的方法来确定架构是armhfarmelarm64。是否有任何单行命令或简单命令可用于输出armhfarmelarm64

该脚本是专门为 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)。i386amd64debootstrap

答案2

如果您的系统中未安装 dpkg(例如在精简的 docker 容器中),此命令将帮助您

$ arch

相关内容