欢迎各位兄弟 发布技术文章
这里的技术是共享的
1) 安装 # /usr/sbin/softwareupdate --install-rosetta --agree-to-license
2) 如何验证是否安装成功? # /usr/bin/pkgutil --pkgs | grep -i Rosetta ,,,, 若输出 com.apple.pkg.RosettaUpdateAuto
则说明已安装。
# arch -x86_64 /usr/bin/true ,,,,
如果已安装:命令正常执行(无输出)
如果未安装:会提示 "Rosetta is not installed" 或询问你是否要安装 ( arch: posix_spawnp: /usr/bin/true : Bad CPU type is executable )
拥有 Apple M1 芯片的 Mac 小伙伴们可能会在安装软件的时候遇到一些异常情况,下面佐佐整理了可能会遇到的几个异常情况以及应用闪退的解决办法。希望能帮助小伙伴们解决问题。
安装异常
异常1
提示
zsh: killed 执行文件名
或者 zsh: bad CPU type in executable:xxx
原因:这是因为电脑上没有安装 Rosetta 2 Rosetta2 。
解决:打开终端,执行以下命令,安装一下即可解决。
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
异常2
提示 zsh: no such file or directory: Volumes/xxxx/安装
原因:这通常是因为安装了 Oh My Zsh 但是没有更新用户配置环境导致的。
解决:打开终端,执行以下命令,执行完成退出终端,然后再重新运行一下终端让其生效即可。
PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
应用运行闪退
如果遇到应用闪退,出现如下提示:见图二
1.打开 访达 - 应用程序,找到闪退的应用,在应用图标上右键,然后点击「显示简介」。
2.勾选「使用 Rosetta 打开」
如果没有这个选项的的话,打开终端执行以下命令安装一下即可:
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
你提供的命令是用于在 macOS(特别是 Apple Silicon 芯片的 Mac,如 M1、M2 等)上安装 Rosetta 2 的一个终端指令。以下是详细说明:
bash/usr/sbin/softwareupdate --install-rosetta --agree-to-license
/usr/sbin/softwareupdate
macOS 系统自带的软件更新工具,用于安装系统补丁或组件。
--install-rosetta
明确要求安装 Rosetta 2,这是苹果为 ARM 芯片(M1/M2)提供的兼容层,允许运行老款的 Intel(x86_64)应用。
--agree-to-license
自动同意 Rosetta 2 的许可协议,跳过安装时的交互确认。
✅ 适用情况:
仅适用于 Apple Silicon 芯片的 Mac(如 M1、M2 等),Intel 芯片的 Mac 不需要。
需要管理员权限,通常需搭配 sudo
使用。
⚠️ 注意事项:
Rosetta 2 通常会在首次打开 Intel 应用时自动安装,此命令用于主动提前安装(比如自动化脚本或批量部署)。
bashsudo /usr/sbin/softwareupdate --install-rosetta --agree-to-license
(输入后需输密码,但无确认提示,直接静默安装。)
需要联网吗?
需要, Rosetta 2 会从苹果服务器下载。
如何验证是否安装成功?
运行:
bash/usr/bin/pkgutil --pkgs | grep Rosetta
若输出 com.apple.pkg.RosettaUpdateAuto
则说明已安装。
错误处理:
若提示 Not eligible to install Rosetta
:你的 Mac 可能是 Intel 芯片,无需安装。
若权限不足,记得加 sudo
。
如有其他疑问,可以继续追问!
好的!以下是针对在 Apple Silicon 芯片(M1/M2/M3 等)的 Mac 上安装 Rosetta 2 的中文详细说明:
sudo /usr/sbin/softwareupdate --install-rosetta --agree-to-license
打开 应用程序 → 实用工具 → 终端
(或通过 Spotlight 搜索 终端
)。
复制粘贴上方命令,按 <kbd>Enter</kbd>。
输入你的 管理员密码(输入时不会显示字符,输完直接按 <kbd>Enter</kbd>)。
参数 | 作用 |
---|---|
sudo
| 获取管理员权限(必需) |
--install-rosetta
| 安装 Rosetta 2 |
--agree-to-license
| 自动同意许可协议(避免手动确认) |
仅限 Apple Silicon 机型
Intel 芯片的 Mac 无需安装。
无需重启
安装后可直接运行 Intel 应用(首次打开时会自动转换)。
网络要求
需联网下载约 500MB 的组件(速度取决于网络)。
/usr/bin/pgrep oahd && echo "Rosetta 2 已安装"
若终端显示 Rosetta 2 已安装
即表示成功。
❓ 为何要装 Rosetta?
→ 让 Apple Silicon 芯片的 Mac 兼容老版 Intel 应用(如部分未更新的专业软件)。
❓ 安装后如何使用?
→ 无需额外操作!直接双击打开 Intel 应用,系统会自动调用 Rosetta。
❓ 会降低性能吗?
→ Rosetta 转译的 Intel 应用可能比原生 Apple Silicon 应用稍慢,但优化良好(如微信、Adobe 系列)。
💡 提示:建议优先下载 原生 Apple Silicon 版本 的应用(性能更佳)。
判断 rosetta 2 有没有安装
在 macOS(特别是 Apple Silicon 设备,如 M1/M2 Mac)上,你可以通过以下方法检查 Rosetta 2 是否已经安装:
pkgutil
检查(推荐)
运行以下命令检测是否安装了 Rosetta 2 的安装包:
bash/usr/bin/pkgutil --pkgs | grep -i "Rosetta"
可能的输出:
如果已安装:会显示 com.apple.pkg.RosettaUpdateAuto
如果未安装:无输出
Rosetta 2 的主要作用是运行 Intel(x86_64)程序,如果未安装,此命令会触发 Rosetta 安装提示。
basharch -x86_64 /usr/bin/true
可能的输出:
如果已安装:命令正常执行(无输出)
如果未安装:会提示 "Rosetta is not installed"
或询问你是否要安装 ( arch: posix_spawnp: /usr/bin/true : Bad CPU type is executable )
运行一个 Intel 程序(如 bash
),然后检查是否有 osx-update
(Rosetta 关联进程)在运行:
bashpgrep -f "Rosetta"
可能的输出:
如果已安装 + 正在使用:会显示进程 ID
如果完全未使用:无输出
系统日志中可能会有 Rosetta 相关的记录:
bashlog show --predicate 'eventMessage contains "Rosetta"' --last 30d
如果看到 "Rosetta installed"
或类似记录,说明曾经安装过。
✅ 确认已安装:
方法 1(pkgutil
)有 com.apple.pkg.RosettaUpdateAuto
输出
方法 2(arch -x86_64
)能正常执行
❌ 未安装:
pkgutil
无输出,且 arch -x86_64
提示需要安装
如果上述方法表明未安装,可以手动安装:
bashsudo softwareupdate --install-rosetta --agree-to-license
(需要管理员权限)
如果仍有疑问,可以进一步测试特定的 Intel 应用是否会触发 Rosetta 安装提示。
要判断 macOS 系统(特别是 Apple Silicon 芯片的 Mac)是否已安装 Rosetta 2,可以使用以下方法:
/usr/bin/pgrep oahd > /dev/null && echo "Rosetta 2 已安装" || echo "Rosetta 2 未安装"
命令说明:
pgrep oahd
:检查 Rosetta 的核心进程 oahd
是否在运行
如果已安装会显示:Rosetta 2 已安装
如果未安装会显示:Rosetta 2 未安装
[ -f "/Library/Apple/System/Library/LaunchDaemons/com.apple.oahd.plist" ] \ && echo "已安装" || echo "未安装"
原理:
Rosetta 2 安装后会创建此配置文件,存在即表示已安装。
arch -x86_64 /usr/bin/true 2> /dev/null \ && echo "Rosetta 2 已安装" || echo "Rosetta 2 未安装"
原理:
强制以 Intel 模式运行系统命令,成功执行说明转译层已就绪。
Apple Silicon 专属
这些检查仅在 M1/M2/M3 等 ARM 芯片的 Mac 上有意义,Intel 芯片 Mac 无需安装。
安装后无需重启
即使命令显示已安装,首次打开 Intel 应用时仍可能有短暂转译过程。
验证效果
# 组合验证(输出详细状态) if /usr/bin/pgrep oahd &> /dev/null; then echo "✅ Rosetta 2 已安装且进程运行中" elif [ -f "/Library/Apple/System/Library/LaunchDaemons/com.apple.oahd.plist" ]; then echo "⚠️ 已安装但进程未启动(首次运行Intel应用后将激活)" else echo "❌ 未检测到安装" fi
建议优先使用 方法一,简单直接且结果明确。若从未运行过 Intel 应用,使用方法二或三更可靠。
/usr/bin/pkgutil --pkgs | grep -i Rosetta 详解
/usr/bin/pkgutil --pkgs | grep -i Rosetta
此命令用于在 macOS 系统中检查是否安装了与 Rosetta(苹果的二进制转译工具)相关的软件包。以下是逐层解析:
/usr/bin/pkgutil --pkgs | grep -i Rosetta
/usr/bin/pkgutil
macOS 系统自带的包管理工具,用于查询已安装的软件包(.pkg
格式)。
--pkgs
选项
列出所有已安装软件包的 标识符(Bundle Identifiers)。
示例输出:
com.apple.pkg.XcodeSystemResources com.google.pkg.Keystone com.apple.pkg.RosettaUpdateAuto # 与Rosetta相关的包
|
(管道)
将 pkgutil
的输出传递给下一个命令 grep
。
grep -i Rosetta
在输入中不区分大小写(-i
选项)地搜索关键词 Rosetta
。
核心目的:检查系统是否安装了 Rosetta 或其更新组件。
典型场景:
在 Apple Silicon (M1/M2/M3) Mac 上验证 Rosetta 2 的安装状态。
调试需要 Rosetta 转译的 Intel 应用兼容性问题。
输出结果:
若找到相关包(如 com.apple.pkg.RosettaUpdateAuto
),则输出该包标识符,表明 Rosetta 已安装。
若无输出,表示 Rosetta 未安装。
在 macOS 中,Rosetta 通常以以下包形式存在:
包标识符 | 说明 |
---|---|
com.apple.pkg.Rosetta | Rosetta 基础组件(旧版系统) |
com.apple.pkg.RosettaUpdateAuto | Rosetta 自动更新组件(常见) |
$ /usr/bin/pkgutil --pkgs | grep -i Rosetta com.apple.pkg.RosettaUpdateAuto # 输出此行表示已安装
若需进一步验证,可查看包详情:
$ pkgutil --info com.apple.pkg.RosettaUpdateAuto package-id: com.apple.pkg.RosettaUpdateAuto version: 1.0.0.0.1.1612798899 volume: / location: / install-time: 1633024874
检查转译进程:
sysctl -n sysctl.proc_translated # 输出 1 表示当前进程运行在 Rosetta 下
检查 Rosetta 守护进程:
pgrep -q oahd && echo "Rosetta 已安装" # oahd 是 Rosetta 的守护进程
若未安装,可通过以下命令安装:
softwareupdate --install-rosetta
注意:Rosetta 仅在 Apple Silicon Mac 上可用,Intel Mac 无需安装。
命令用途:快速检查 macOS 是否安装了 Rosetta 组件。
关键输出:存在 com.apple.pkg.RosettaUpdateAuto
等包标识符即表示已安装。
适用系统:Apple Silicon 芯片的 macOS(Big Sur 及以上)。
arch -x86_64 /usr/bin/true 详解
arch -x86_64 /usr/bin/true
此命令用于在 Apple Silicon (M1/M2/M3) Mac 上验证 Rosetta 2 转译环境的可用性。以下是逐层解析:
arch -x86_64 /usr/bin/true
arch
macOS 的系统命令,用于指定程序的运行架构。
-x86_64
选项
强制命令以 Intel x86_64 架构模式运行(通过 Rosetta 2 转译)。
/usr/bin/true
Unix 基础命令:不做任何操作,直接返回成功退出状态(exit 0
)。(一个简单的Unix命令,总是成功退出!)
验证 Rosetta 2 是否正常工作:
在 Apple Silicon Mac 上执行此命令时,系统会尝试通过 Rosetta 2 转译层运行 Intel 架构的 true
命令。
如果命令执行成功(无错误),证明 Rosetta 2 已正确安装且可用。
诊断兼容性问题:
若出现 Bad CPU type in executable
等错误,表明 Rosetta 2 未安装或损坏。
系统调用 arch
命令,请求以 x86_64 架构运行程序。
macOS 激活 Rosetta 2 转译层(若未运行则自动启动)。
Rosetta 2 加载 Intel 版本的 /usr/bin/true
(实际路径:/usr/libexec/rosetta/oahd
会处理转译)。
命令执行后立即退出,返回状态码 0
(成功)。
# 在 Apple Silicon Mac 上执行: $ arch -x86_64 /usr/bin/true $ echo $? # 检查退出状态码 0 # 输出 0 表示成功(Rosetta 可用)
$ arch -x86_64 /usr/bin/true zsh: bad CPU type in executable: /usr/bin/true
# 原生 ARM 模式(Apple Silicon 直接运行): $ arch -arm64 /usr/bin/true # 显式指定 ARM 架构 $ file $(which true) # 查看文件架构 /usr/bin/true: Mach-O 64-bit executable arm64 # ARM 原生版本
Rosetta 2 的触发机制:
当尝试运行 Intel 二进制文件时,系统自动调用 Rosetta 2。使用 arch -x86_64
是显式请求转译。
true
命令的特殊性:
作为最简单的 Unix 命令(仅返回退出码 0),它是最安全的 Rosetta 测试工具:
不修改系统状态
无输出干扰
执行速度快(毫秒级)
系统路径说明:
Apple Silicon 的 macOS 中:
/usr/bin/true
是通用二进制文件(同时包含 ARM64 和 x86_64 代码)
当通过 arch -x86_64
调用时,系统自动加载 x86_64 代码段并由 Rosetta 2 处理
# 测试 x86_64 模式下的命令(例如 Homebrew) arch -x86_64 /bin/bash -c "echo 'Hello from Intel mode'"
#!/bin/zsh # 如果当前是 ARM 环境且需要 Intel 兼容模式 if [[ $(uname -m) == "arm64" ]]; then exec arch -x86_64 "$0" "$@" # 重新以 x86 模式执行当前脚本 fi # 后续代码会在 Rosetta 转译环境下运行 brew install intel-only-package
问题:命令执行报错
arch: posix_spawnp: /usr/bin/true: Bad CPU type in executable
解决方案:安装 Rosetta 2
softwareupdate --install-rosetta --agree-to-license
问题:性能延迟
首次执行时会加载 Rosetta 2 服务(约 1-2 秒),后续执行无延迟。
项目 | 说明 |
---|---|
命令本质 | 通过 Rosetta 2 运行一个空操作(true )来验证转译环境 |
核心用途 | 诊断 Apple Silicon Mac 的 Intel 兼容性 |
成功标志 | 无输出 + 退出码 0 |
失败标志 | Bad CPU type in executable 错误 |
替代方案 | file $(which ls) | grep x86_64 或 pgrep -q oahd (检查进程) |
适用系统 | macOS Big Sur (11.0) 及以上(Apple Silicon 机型) |
通过这个简单命令,可快速确认系统是否准备好运行 Intel 架构的 Unix 程序。