macOS M1 芯片安装 rustup 1.25 报权限 denied 错误,通常是因为使用了 sudo 命令或目标目录所有权错误,解决方法是移除旧文件并以普通用户身份重新运行安装脚本。
先说结论:不要在 macOS 上使用 sudo 安装 rustup,权限错误多由目录归属权冲突引起,清理后重试即可。
- 先确认:检查是否误用了 sudo 命令或 ~/.cargo 目录属于 root 用户。
- 先处理:删除旧的 rustup 配置目录,确保当前用户拥有 home 目录写入权限。
- 再验证:重新运行安装命令后,通过 rustc `--version` 确认工具链可用。
命令速用版
如果确认需要重装,可直接执行以下命令清理环境并重新安装,注意不要加 sudo。
rm -rf "$HOME/.rustup" "$HOME/.cargo"
curl `--proto` '=https' `--tlsv1`.2 -sSf https://sh.rustup.rs | sh安装完成后,加载环境变量:
source "$HOME/.cargo/env"为什么会这样
rustup 设计为当前用户级工具,默认安装路径在用户主目录下,使用 sudo 会导致文件归属权变为 root。
macOS M1 芯片本身不影响权限逻辑,但部分用户习惯对系统级工具使用 sudo,导致 ~/.cargo 或 ~/.rustup 目录被锁定。后续非 sudo 进程无法写入这些目录,从而报 permission denied。此外,之前安装失败留下的残锁文件也会触发相同错误。
分步处理
按顺序执行以下步骤,每步完成后检查终端是否有报错。
步骤 1:检查目录权限
执行 ls -ld "$HOME/.cargo" 查看目录所有者。如果显示 root 而非你的用户名,说明权限错误。
步骤 2:清理旧配置
执行 rm -rf "$HOME/.rustup" "$HOME/.cargo" 删除旧配置。如果提示权限不足,说明部分文件属于 root,需执行 sudo chown -R $(whoami) "$HOME/.cargo" 先修改归属再删除。
步骤 3:重新安装
确保当前终端未启用 sudo,运行 curl `--proto` '=https' `--tlsv1`.2 -sSf https://sh.rustup.rs | sh。遇到提示输入 y 确认默认配置。
步骤 4:配置环境变量
安装脚本通常会自动修改 shell 配置文件。如果未生效,手动执行 source "$HOME/.cargo/env"。
怎么验证是否生效
执行 rustc `--version` 和 cargo `--version`。如果输出版本号且无报错,说明安装成功且权限正常。
检查 ~/.cargo/bin 目录是否存在且当前用户可写。执行 ls -l "$HOME/.cargo/bin" 确认文件归属。
常见坑
误用 sudo 安装:rustup 官方明确不建议使用 sudo,这会导致后续 cargo install 命令也报错。
Shell 配置冲突:zsh 和 bash 配置文件不同,确保 source 的是当前 shell 对应的 env 文件。
M1 架构兼容:rustup 默认会检测架构安装 arm64 版本,无需强制指定 x86_64,除非有特定兼容需求。
常见问题
安装 rustup 必须用 sudo 吗?
不需要,且不建议使用 sudo。rustup 安装在用户主目录,使用 sudo 会导致权限混乱。
删除 .cargo 目录会影响其他项目吗?
会清除已安装的 Rust 工具链和 cargo 缓存,但不会影响源代码项目,重装后可恢复。
M1 芯片需要安装 Rosetta 吗?
不需要,rustup 支持原生 ARM64 架构。仅在使用仅支持 x86 的特定旧版工具时才需 Rosetta。
参考来源
rustup.rs - rustup 官方网站安装说明
https://rustup.rs/
GitHub - rust-lang/rustup 仓库 Issues 关于权限问题的讨论
https://github.com/rust-lang/rustup