卸载 Homebrew 应用,留下 brew 命令
Homebrew.app 是 Homebrew 的 Mac 应用,bundle id 为 sh.brew.app。移除它不会删掉 brew 命令,也不会动你用它装的任何软件,所以单卸应用不需要备份什么。如果还打算卸掉命令行 Homebrew,先导出软件包清单(见最后一节)。本页覆盖 BrewUI 发布页下载的应用和 Homebrew 的 homebrew-app cask。
退出 Homebrew.app,再移除
退出 Homebrew.app,再从「应用程序」移到废纸篓。这一步移除的是 Mac 应用,不会运行 Homebrew 的命令行卸载脚本,brew 管理的软件包照常可用。
哪些文件属于这个应用
退出后在 Finder 按 Shift + Command + G,打开存在的 ~/Library/Application Support/sh.brew.app、~/Library/Caches/sh.brew.app 和 ~/Library/Preferences/sh.brew.app.plist,只把决定不保留的 Homebrew.app 条目移到废纸篓,brew 命令的缓存、日志和安装前缀先保留,除非你也要按后面的独立步骤移除命令行。
| 位置 | 属于谁 | 保留还是删除 |
|---|---|---|
~/Library/Application Support/sh.brew.app |
Homebrew.app | 随应用一起删。 |
~/Library/Caches/sh.brew.app |
Homebrew.app | 可以删。 |
~/Library/Preferences/sh.brew.app.plist |
Homebrew.app | 可以删。 |
~/Library/Caches/Homebrew |
brew 命令的下载缓存 |
还在用 brew 就保留。 |
~/Library/Logs/Homebrew |
brew 命令的日志 |
还在用 brew 就保留。 |
~/.homebrew |
命令行的状态,包括信任数据 | 还在用 brew 就保留。 |
/opt/homebrew(Apple 芯片)或 /usr/local(Intel) |
Homebrew 本体和所有软件包 | 只由 Homebrew 的卸载脚本移除。 |
检查结果
pgrep -ix homebrew
ls -d ~/Library/Application\ Support/sh.brew.app ~/Library/Caches/sh.brew.app
command -v brew
pgrep 没有输出,说明应用已退出。ls 报 No such file or directory,说明应用的文件夹已经不在;列出了路径说明还在磁盘上。command -v brew 打印了路径,说明这个 shell 仍能找到 brew,只卸应用时这是预期结果,不是卸载失败。没有输出只说明当前 PATH 找不到它,不能据此判断所有软件包都被删了。
用 Homebrew 安装时
Mole 会先检查 zap 清单,涉及未勾选的数据、其他应用共用的文件或无法确认的内容时不执行 --zap,已勾选的残留仍由 Mole 清理。
只移除应用时运行 brew uninstall --cask homebrew-app。homebrew-app 这个 cask 的 zap 清单只包括应用自己的文件:以 sh.brew.app 命名的 Application Support、缓存、HTTP 存储和偏好设置。用 brew uninstall --cask --zap homebrew-app 卸载,不管是你自己运行还是 Mole 加上 --zap,都不会碰 brew 命令、它的缓存和日志,也不会碰你的软件包。
想连命令行一起移除时
卸载命令行 Homebrew 会移除它管理的所有 formula 和 cask 记录。先保存清单,brew bundle dump 会把它写成一个 Brewfile,以后可以照着重装(Brew Bundle 和 Brewfile):
brew bundle dump --file="$HOME/Desktop/Brewfile"
brew --prefix
第二条命令打印要移除的前缀:Apple 芯片是 /opt/homebrew,Intel 是 /usr/local。从 Intel 迁移过来的 Mac 可能两个都有。Homebrew 的卸载说明使用这个脚本:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
想先预览或指定前缀,就把脚本下载下来,用 --dry-run 运行,它只列出会删除的内容,不做任何改动;要处理另一个前缀时加 --path=/usr/local:
curl -fsSLO https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh
/bin/bash uninstall.sh --dry-run
脚本结束时,会在「The following possible Homebrew files were not deleted」下面列出没能删除的文件,这份清单要自己逐项核对。用 brew install --cask 装的应用会留在 /Applications,脚本只删除指向 Homebrew 自身目录的应用链接。不再需要的这类应用要另外卸载。更完整的说明见 用官方脚本卸载 Homebrew,并先导出清单。
Mole 会列出什么
以 sh.brew.app 命名的项目(Application Support、缓存、偏好设置)默认勾选。下面这些 Mole 不会放进 Homebrew.app 的删除计划,因为它们属于 brew 命令:
| 位置 | 为什么留下 |
|---|---|
~/Library/Caches/Homebrew |
命令行的下载缓存。 |
~/Library/Logs/Homebrew |
命令行的日志。 |
~/.homebrew |
命令行的状态,包括信任数据。 |
这次检查覆盖了什么
从 BrewUI 的 GitHub 发布页下载 Homebrew.app 0.4.3,复制到「应用程序」,再用 Mole 1.15 的一个 Preview 版本卸载。那个版本因为名字同为 Homebrew,把命令行的 ~/Library/Caches/Homebrew(489 MB)和 ~/Library/Logs/Homebrew 默认勾选并移到了废纸篓,brew 本身仍在。卸载命令行 Homebrew 没有测试。
