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

M1 Mac下`arch -x86_64 zsh`的内部执行机制解析

关于M1 Mac上arch -x86_64 zsh的疑问与解答

问题背景

我在为M1 Mac(darwin arm64)寻找安装M1发布前的旧版npm包解决方案时,遇到了arch -x86_64 zsh命令。我知道它会尝试启动x86_64架构的zsh会话,但再次运行arch会返回i386(我认为它与x86_64兼容)。但我原本认为架构由硬件处理器决定,模拟不同架构需要VirtualBox或Qemu这类较重的软件,所以想了解arch -x86_64 zsh实际的作用,它是否真的在模拟不同架构?我尝试阅读man arch内容,但难以理解。

解答

1. arch -x86_64 zsh的本质

它没有用到第三方虚拟化工具,而是依赖Apple Silicon Mac内置的Rosetta 2翻译层——这是苹果专为M系列芯片打造的轻量兼容技术,能实时翻译x86_64架构的代码,让M1芯片可以直接执行,不需要额外的虚拟机。

2. 为什么运行arch返回i386?

这是zsh通用二进制的历史兼容特性导致的:zsh的通用二进制包同时包含了i386(32位x86)和x86_64(64位x86)的代码。当你用arch -x86_64指定架构时,系统确实在运行x86_64版本的zsh,但arch命令本身在x86_64环境下会返回i386作为兼容输出。你可以用uname -m命令验证,它会准确返回x86_64,证明当前会话是64位x86架构。

3. arch命令的核心作用

根据man arch的说明,它的功能是强制指定通用二进制文件的运行架构:

  • 通用二进制是包含多架构代码的可执行文件,系统默认会选择最匹配硬件的架构(比如M1默认优先用arm64)
  • arch命令可以覆盖这个默认逻辑,让系统调用你指定的架构版本,对于x86_64架构的代码,Rosetta 2会自动完成翻译执行

翻译后的man arch核心内容

描述
不带参数的arch命令会显示机器的架构类型。

arch命令的另一个用途是运行通用二进制文件中的指定架构版本。通用二进制包含可在不同架构上运行的代码。默认情况下,操作系统会选择最匹配处理器类型的架构:64位处理器优先选择64位架构,而32位处理器只能运行32位架构。

当最匹配的架构不可用时,操作系统会尝试选择其他架构:在64位处理器上会尝试32位架构,否则会报错无法运行。

arch命令可以改变操作系统的默认选择顺序,最常见的用法是在64位处理器上强制选择32位架构,即使64位架构可用。

arch_name参数必须是当前支持的架构之一:

  • i386:32位英特尔架构
  • x86_64:64位英特尔架构
  • x86_64h:64位英特尔架构(Haswell处理器)
  • arm64:64位ARM架构
  • arm64e:64位ARM架构(Apple Silicon芯片)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:05:32