You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在aarch64架构Linux系统中获取字符串arm64?

如何在Bash脚本里简便获取arm64架构标识?

我的系统执行uname -a输出如下:

Linux ubuntu-arm-test 5.15.0-105-generic #115-Ubuntu SMP Mon Apr 15 09:52:04 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux

我已经能用下面的脚本把aarch64转换成arm64:

#!/bin/bash

# 获取硬件架构名
arch=$(uname -m)

# 转换aarch64为arm64
if [ "$arch" == "aarch64" ]; then
    echo "arm64"
else
    echo "$arch"
fi

但想找更简便的实现方式,尝试读取/proc/sys/kernel/arch时提示文件不存在:

root@ubuntu-arm-test:~# cat /proc/sys/kernel/arch
cat: /proc/sys/kernel/arch: No such file or directory

另外我有点困惑:arm64在包名里明明很常见,怎么就没有直接获取它的方法?


几种简便实现方案

1. 一行完成字符串替换

不用写if判断,直接用Bash内置操作或sed命令搞定:

# 用sed实现
arch=$(uname -m | sed 's/aarch64/arm64/')

# 纯Bash内置操作,无需外部命令
arch=$(uname -m)
arch=${arch/aarch64/arm64}

2. 直接用dpkg获取包管理层面的架构名(Debian/Ubuntu专属)

既然你提到包名里常用arm64,Ubuntu这类Debian系发行版可以直接用dpkg输出标准架构名,一步到位:

arch=$(dpkg --print-architecture)

在你的aarch64系统上,这个命令会直接输出arm64,完全不需要转换。

3. 用case语句简化判断(方便扩展多架构)

如果以后要兼容更多架构,case语句比if逻辑更清晰易扩展:

case $(uname -m) in
    aarch64) echo arm64 ;;
    x86_64) echo amd64 ;; # 可兼容x86系包名架构
    *) echo $(uname -m) ;;
esac

关于"没有直接获取方法"的解释

uname -m输出的是内核层面的架构命名(aarch64是ARM 64位的内核标准名称),而包名里的arm64是发行版包管理体系的命名,两者属于不同的命名规范。不同发行版会有专属工具输出符合自身包管理的架构名(比如RHEL系可用rpm -E %_arch),所以没有通用的"直接获取"命令,但针对特定发行版可以用对应工具快速拿到。

内容的提问来源于stack exchange,提问作者guettli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:12:10