如何清理 Mac 上的 Homebrew 缓存与旧版本
AskClean 团队 · 更新于 2026-08-05
先用 brew --cache 找到 Homebrew 下载缓存,再运行 brew cleanup -n 查看将被移除的下载、过期锁文件与旧版 formula。普通 brew cleanup 按 Homebrew 的保留规则处理这些项目;brew cleanup --prune=all 会不论年龄清理缓存文件。当前安装、配置和项目数据不属于下载缓存,不能手动扫掉。

Homebrew 的数据不只存放在一个缓存目录中
下载缓存通常位于 ~/Library/Caches/Homebrew,但 HOMEBREW_CACHE 可以覆盖它,应以 brew --cache 为准。formula 的版本化 keg 位于 Cellar,cask 记录位于 Caskroom,当前工具由 Homebrew prefix 下的链接使用;用 brew --cellar、brew --caskroom 和 brew --prefix 查找,不能把这些安装位置当缓存删除。
先做只读审计
运行 du -sh "$(brew --cache)" 测量真实缓存,再用 brew cleanup -n 预览过期下载、过期锁文件和旧版 formula。看到熟悉工具时,用 brew list --versions 核对当前与旧版本。预览 --prune=all 时应运行 brew cleanup -n --prune=all,因为旧 keg 的回滚成本高于重新下载一份 bottle。
- 运行 brew --cache,并用 du -sh "$(brew --cache)" 记录活动下载缓存的体积。
- 运行 brew cleanup -n,逐项检查过期下载、过期锁文件和旧版 formula;必要时用 brew list --versions 核对。
- 根据预览选择普通 brew cleanup;只有接受全部重新下载成本时,才先预览并运行 brew cleanup --prune=all。
- 若只处理一个 formula 或 cask,先运行 brew cleanup -n <name>,确认后再运行 brew cleanup <name>。
- 再次运行 brew cleanup -n、测量缓存、核对已安装版本,并启动当前工作依赖的重要 Homebrew 工具。
dry run 只是预览,不是备份。Homebrew 删除的旧 keg 或下载通常不会进入 macOS 废纸篓,也不保证上游仍能提供完全相同的版本。
按需要选择普通或彻底清理
审核通过后,brew cleanup 是保守的常规维护;当前默认会把超过 120 天的下载纳入候选,并可能删除旧版 formula。brew cleanup --prune=all 会不论年龄清理缓存,下一次安装或重装需要重新下载。全局范围太大时,先运行 brew cleanup -n <name>,再按同一名称定点执行;尖括号只是占位符。
保护当前工具、配置和用户数据
不要对 brew --prefix、brew --cellar、brew --caskroom 或整个 ~/Library/Caches 运行宽泛的 rm -rf。Brewfile、shell 配置、Homebrew 服务、数据库、证书和项目文件也不是缓存。brew autoremove --dry-run 只预览不再需要的依赖;真正运行 brew autoremove 会卸载软件,必须作为独立决策。清理后再次 dry-run、测量缓存、核对 brew list --versions 并测试关键命令。
清理边界与恢复成本
先预览,再用 brew cleanup 安全清理 Homebrew 下载与旧版 formula,同时保护当前安装、依赖和配置。
| 项目或操作 | 检查位置 | 删除后果 |
|---|---|---|
| Homebrew 的数据不只存放在一个缓存目录中 | brew --cache | 下载缓存通常位于 ~/Library/Caches/Homebrew,但 HOMEBREW_CACHE 可以覆盖它,应以 brew --cache 为准。formula 的版本化 keg 位于 Cellar,cask 记录位于 Caskroom,当前工具由 Homebrew prefix 下的链接使用;用 brew --cellar、brew --caskroom 和 brew --prefix 查找,不能把这些安装位置当缓存删除。 |
| 先做只读审计 | brew cleanup -n | 运行 du -sh "$(brew --cache)" 测量真实缓存,再用 brew cleanup -n 预览过期下载、过期锁文件和旧版 formula。看到熟悉工具时,用 brew list --versions 核对当前与旧版本。预览 --prune=all 时应运行 brew cleanup -n --prune=all,因为旧 keg 的回滚成本高于重新下载一份 bottle。 |
| 按需要选择普通或彻底清理 | brew cleanup / brew cleanup --prune=all | 审核通过后,brew cleanup 是保守的常规维护;当前默认会把超过 120 天的下载纳入候选,并可能删除旧版 formula。brew cleanup --prune=all 会不论年龄清理缓存,下一次安装或重装需要重新下载。全局范围太大时,先运行 brew cleanup -n <name>,再按同一名称定点执行;尖括号只是占位符。 |
| 保护当前工具、配置和用户数据 | brew autoremove --dry-run (not cache cleanup) | 不要对 brew --prefix、brew --cellar、brew --caskroom 或整个 ~/Library/Caches 运行宽泛的 rm -rf。Brewfile、shell 配置、Homebrew 服务、数据库、证书和项目文件也不是缓存。brew autoremove --dry-run 只预览不再需要的依赖;真正运行 brew autoremove 会卸载软件,必须作为独立决策。清理后再次 dry-run、测量缓存、核对 brew list --versions 并测试关键命令。 |
常见问题
brew cleanup 安全吗?
它是受支持的维护命令,但会处理旧版 formula,必须先用 brew cleanup -n 确认没有回滚流程或硬编码路径仍依赖旧 keg。
brew cleanup --prune=all 会删除什么?
它不论年龄清理缓存文件,并保留 cleanup 原有的旧版本处理范围;先运行 brew cleanup -n --prune=all,并接受以后重新下载的成本。
清完后要运行 brew autoremove 吗?
不一定。它不是缓存清理,而是卸载 Homebrew 判断不再需要的依赖;若考虑使用,先单独运行 brew autoremove --dry-run 并核对脚本和服务。
参考来源