我用 Homebrew 也有好几年了,日常装 Node、Git、FFmpeg 这类命令行工具基本离不开它。但说实话,Homebrew 的命令行交互再顺手,一旦装的东西多了,管理起来还是有点费劲——想看看哪个包有新版、哪里有冲突、依赖树什么情况,光靠brew outdated、brew deps这些命令一个个敲,多少有点麻烦。所以当我看到 BrewUI 这个项目时,第一时间就装来试了。
BrewUI 是一个给 Homebrew 做的第三方图形界面工具。它并没有重新发明一套包管理逻辑,而是把 Homebrew 已经具备的能力包装成一个可视化的操作界面,让你可以像用 App Store 一样去管理 macOS 上那些命令行软件。对刚接触 Homebrew 的新手来说,它能降低命令行操作的心理门槛;对老手来说,它能帮你快速看清系统里到底装了哪些东西、依赖关系是否健康、有没有可以清理的缓存。这篇文章我会从安装、核心功能、常见问题三个角度,把 BrewUI 的实操经验完整拆开讲。
1. 为什么需要 BrewUI:命令行之外的选择
1.1 先说说 Homebrew 的几个“痛点”
Homebrew 本身是个非常优秀的工具,但它的信息输出方式偏“程序员”。比如你想知道所有已安装包是否有更新,会得到一大串brew outdated结果;想了解某个包依赖了什么,得去看brew deps --tree那棵用纯字符拼出来的树状结构;想看哪些包已经没有上游引用,又要去找brew autoremove的提示。这些命令单独拎出来都不复杂,可一旦你的环境里装了上百个包,问题就来了:输出内容太长看不清、包与包之间的关联记不住、清理哪些缓存全靠猜测。
另一个痛点是版本升级的连锁反应。命令行操作时,brew upgrade会一次性更新所有可更新包,如果某些包之间存在版本兼容要求,你很难在更新前预判风险。虽然 Homebrew 本身会做依赖约束检查,但等它真正报错时,你已经进入“先回滚再排查”的紧张状态。图形界面最大的优势就是把这类关系画出来,让你在动手之前先看清楚。
1.2 BrewUI 到底是什么
BrewUI 的定位可以理解成“Homebrew 的可视化控制台”。它读取 Homebrew 的安装数据库、Formula 元数据和本地状态,然后把信息转换成仪表盘、列表、依赖树等可视化组件。你依然可以在设置里指定使用系统自带的 Homebrew,底层执行的动作仍然是brew install、brew upgrade、brew cleanup这些标准命令,只是你不再需要背着术语表去记参数。
我试用下来的整体感受是:它不是要替代命令行,而是补上命令行在“信息概览”和“操作确认”这两个环节的短板。你可以把它当成一个更友好的入口,适合在家里或办公环境中维护自己的开发机,也适合帮不太熟悉命令行的同事看他们机器上到底装了哪些东西。它甚至还能展示 macOS 上通过 Homebrew Cask 安装的 GUI 应用,比如 Chrome、VS Code、微信这类软件,装没装、装了什么版本,一眼就能扫出来。
1.3 同类型工具怎么选
BrewUI 不算唯一一个做这件事的工具,同类还有 Cakebrew、Homebrew-GUI 之类。我的建议是不要贪多,选一个足够用就行。Cakebrew 是更早期也很有名的项目,界面偏传统,胜在稳定;Homebrew-GUI 的更新频率不稳定;BrewUI 的好处是交互更现代,信息密度高,对不同版本 macOS 的兼容性也做得比较积极。如果你已经有习惯用的工具,也没必要换,但如果你第一次接触这类图形管理工具,直接试 BrewUI 会更顺。
这里还要说明一点:BrewUI 是社区开源项目,并非 Homebrew 官方出品。它调用的都是 Homebrew 的公开接口,所以只要你的 Homebrew 能正常工作,BrewUI 就能正常读出数据;反过来也一样,BrewUI 操作造成的问题,本质上都是 Homebrew 的命令执行问题,你可以随时回到终端里手动排查。把它当成“遥控器”,而不是“另一个包管理器”,这个心态摆正了,后面很多问题都好解决。
2. 安装 BrewUI 的完整流程
2.1 确认 Homebrew 环境正常
在安装 BrewUI 之前,我强烈建议你先在终端里确认一遍 Homebrew 自身状态正常。很多朋友装完 BrewUI 打不开,或者打开后显示一堆红色报错,最后发现根本不是 BrewUI 的问题,而是 Homebrew 本身已经积累了一堆环境问题。
你可以在终端执行:
brew --version brew doctor brew list --formula | wc -lbrew --version确认版本,BrewUI 对 Homebrew 4.x 的兼容性较好,如果你还在用很老的 3.x 版本,建议先升级。brew doctor会给出环境警告,比如未接受的 Xcode Command Line Tools 许可、写权限错误、可疑的 PATH 配置等。这些警告不处理,BrewUI 操作到一半可能突然失败。- 统计已安装包数量,方便后面到 BrewUI 里对照验证。
我遇到过最典型的情况是/opt/homebrew目录下的某些文件权限不对,导致brew update失败。BrewUI 读取数据时也会跟着卡住。所以安装 BrewUI 之前,先把brew doctor的警告清干净,能省掉后面一大半麻烦。
2.2 用 Homebrew 直接安装 BrewUI
BrewUI 本身可以通过 Homebrew 的 Cask 安装。这一步要注意,如果你的 Homebrew 环境是 Apple Silicon Mac,默认前缀是/opt/homebrew,Intel Mac 则是/usr/local,不同机器上的包路径会不一样,安装命令是通用的:
brew update brew install --cask brewui如果 cask 仓库里能搜到,执行完后系统会把它安装到应用程序目录。打开“启动台”或在“应用程序”文件夹里找到 BrewUI,直接双击启动即可。
如果你的网络环境导致访问 GitHub Releases 比较慢,安装过程可能会卡在下载阶段。这种情况下可以先用浏览器手动从项目 Releases 页面下载最新版.dmg或.zip包,再拖进“应用程序”文件夹。手动安装和 cask 安装的区别在于,前者不会自动帮你处理签名验证,macOS 首次打开时可能提示“无法验证开发者”,你需要在“系统设置-隐私与安全性”里手动点击“仍要打开”。
2.3 图形界面首次启动与权限设置
第一次启动 BrewUI,它会请求访问本地 Homebrew 数据。这里有个关键点:如果你是用普通用户身份运行的 Homebrew,一般不需要管理员权限;但如果你的 Homebrew 安装时用了 sudo 或历史遗留原因导致目录归属 root,BrewUI 的很多写操作会触发权限弹窗。我在测试机上遇到过类似情况,解决方案是修正目录归属:
sudo chown -R $(whoami) /opt/homebrew这句话的作用是把 Homebrew 目录的属主改成当前用户,避免每次安装、更新都要输入密码。不过建议你先确认自己的 Homebrew 是不是真的装在/opt/homebrew,如果装在/usr/local就把路径替换掉。BrewUI 启动后如果没有立刻显示已安装包列表,可以等它在后台执行完一次brew list和brew outdated的同步,通常几秒钟就会刷新出来。
3. 核心功能拆解与实际操作
3.1 仪表盘概览:先把“家底”看清楚
BrewUI 的主界面长得像一个数据面板,顶部是几个大数字:已安装的 Formula 数量、已安装的 Cask 数量、可更新的包数、当前占用的磁盘空间估算。我第一次打开的时候,发现我机器上居然躺着 173 个公式和 42 个 Cask,很多都是某个项目装完就再也没用过的东西。
仪表盘的意义不是让你看热闹,而是帮你快速判断系统的“健康状态”。比如可更新数量如果长期大于 20,说明你已经有一段时间没有做系统维护了;磁盘占用如果异常大,说明缓存和旧版本堆积严重。BrewUI 会把信息聚合成明确的“待办项”,例如“13 个可更新包”“2 个残留依赖可以清理”,相比在终端里自己分析要直观得多。
这部分还有一个很实用的筛选功能。你可以按“只显示公式”“只显示 Cask”“只显示有更新”等维度过滤列表。我习惯每个月初点开“可更新”标签,把重要工具的更新批量处理掉,再把不熟悉的包单独留下来观察一段时间,避免盲目升级。
3.2 安装、更新、卸载:把 brew install 变成点按操作
BrewUI 的软件列表页提供搜索框,你输入关键词时会调用与 Homebrew 同样的搜索逻辑。搜索结果会区分公式和 Cask,并显示简要描述。点“安装”按钮后,BrewUI 会在底部日志区实时输出命令执行过程,相当于把终端输出搬进了图形界面。
这里我必须提醒一个容易踩坑的地方:BrewUI 界面上的“更新”按钮,对应的是brew upgrade,而不是brew update。两者的区别在于,brew update只会同步远端仓库信息,把可更新的包列表刷新出来;brew upgrade才是真正下载安装新版本。如果你只想看有哪些新版本,不要点“全部更新”,否则会一次性把所有包都升上去。BrewUI 的按钮文字如果没写清楚,建议先用它的“刷新”按钮同步仓库信息,再单独选择某个包点更新。
批量卸载也一样。你可以勾选多个不再需要的包,统一卸载。卸载操作前,BrewUI 会弹出确认框,列出将要被移除的依赖。这里要多看一眼,因为有些依赖可能同时被其他包使用,强制卸载会把别人的依赖也带走。如果你不确定,可以先在终端跑一次:
brew uses --installed <包名>这个命令会告诉你当前环境中还有哪些已安装包依赖它。如果输出为空,那这个包大概率是可以放心卸载的;如果有输出,卸载前就要慎重。
3.3 依赖关系可视化:不再被依赖树绕晕
依赖关系是 BrewUI 最有价值的部分之一。在终端里看依赖树时,遇到层级一深、节点一多,基本就晕了。BrewUI 会把整个依赖关系绘制成可点击的图形界面,一个包指向它依赖的包,同时显示哪些包正在依赖它。你点其中一个节点,可以看到它被谁需要,以及它自己又需要谁。
这个功能在实际排障中非常有用。有次我发现某个项目突然编译失败,错误信息指向某个底层库版本不对。用 BrewUI 打开依赖图后,立刻看到有四个包都依赖这个库,其中一个是上个月手动升级时把版本带偏了。如果靠命令行去查brew deps --tree也能查出来,但图形界面的直观程度完全不是一个量级。
依赖可视化还能帮你发现“孤立包”——那些没有被任何其他包依赖,同时你也不再直接使用的包。这些包属于可清理对象。不过,孤立包并不一定等于垃圾包,有些是编译器工具链的组成部分,有些是你手动安装但忘记用途的工具。我建议看到孤立包列表后,先回想一下它是干什么的,或者去目录里看看最近访问时间,再做删除决定。
3.4 清理与维护:缓存、旧版本一起收拾
Homebrew 用久了,最占空间的往往不是已安装的包,而是~/Library/Caches/Homebrew里的下载缓存和已经更新后留下的旧版本文件。BrewUI 提供了一个“清理”入口,对应brew cleanup。它会列出可以删除的文件大小,并支持一键清理。
我建议清理前先点一下“预览”,看看它打算删什么。默认策略下,brew cleanup会保留每个包当前安装的版本,删除其他残留版本;同时清理下载缓存。如果你磁盘空间不紧张,可以保留自动清理功能,或者设置一个缓存保留天数。BrewUI 的设置项通常能调整这些参数,如果你找不到对应选项,直接编辑 Homebrew 的环境变量HOMEBREW_CLEANUP_MAX_AGE_DAYS也有效。
除了清理缓存,BrewUI 有时还会显示brew autoremove可移除的依赖清单。这是 Homebrew 4.x 以后提供的功能,用来删除那些已经没有任何“父包”依赖的遗留公式。执行前同样建议先看清单,尤其要注意一些以@结尾的版本化公式,比如python@3.9,可能只是当前默认版本切换后被认为多余,但如果你想保留备用环境,就不要自动移除。
4. 常见问题与排查技巧实录
4.1 启动闪退:大概率是权限和缓存问题
BrewUI 启动时就闪退,或者打开后什么都读不到,我遇到过的原因有三类,按概率排序:
第一,Homebrew 目录权限异常。前面提到的sudo chown -R $(whoami) /opt/homebrew可以解决大部分“有权限但身份混乱”的问题。
第二,BrewUI 的本地缓存损坏。它会像很多 App 一样把索引数据缓存在~/Library/Application Support/BrewUI下。如果 Homebrew 已经正常,但 BrewUI 显示的数据明显不对,可以退出 BrewUI 后删除缓存目录再启动:
rm -rf "$HOME/Library/Application Support/BrewUI"这个操作不会动 Homebrew 的任何包,只是让 BrewUI 重新建立索引,我非常推荐遇到诡异问题时先试这一步。
第三,版本过旧。Homebrew 的接口和 Cask 定义一直在变,旧版 BrewUI 可能解析不了新格式,导致启动时读取数据库异常。升级 BrewUI 到最新版,或者重新手动安装一遍,通常能解决。
4.2 命令执行失败:先手动跑一遍 brew 命令确认错误原因
BrewUI 最大的优点是“透明”,因为它的核心操作都是调 Homebrew 命令,所以当某个操作失败时,别急着怪界面。点开操作日志,找到实际执行的命令,复制到终端里手动执行一遍,往往能得到比界面更完整的错误输出。
举一个真实案例:我在 BrewUI 里尝试安装某个 Cask,一直报“下载失败”。我原本以为是 App 网络代理设置的问题,后来手动到终端里跑brew install --cask xxxx,看到错误显示校验值不匹配。继续排查,发现是上游服务器上某个版本文件更新了,但 Homebrew 的 Cask 定义还没同步。这时候手动执行brew update再重装,问题就解决了。
如果日志里的命令信息不全,你可以在启动 BrewUI 的终端里用以下方式观察它调用了什么:
sudo fs_usage -w -f filesys BrewUI 2>&1 | grep brew这条命令会抓取 BrewUI 对文件系统的访问记录,帮助你确认它是否真的在执行/opt/homebrew/bin/brew。这个方法稍微硬核一些,适合喜欢折腾的读者,普通用户只要记住“手动跑一遍 brew 命令”这个原则就够了。
4.3 误删依赖恢复:BrewUI 不等于 Git,操作前记得备份
BrewUI 操作是基于 Homebrew 的,而 Homebrew 本身没有优雅的“撤销删除”机制。虽然brew uninstall通常会尽量保存依赖,但如果你手动勾选了强制清理,一些被错误标记为孤立的包可能就会被移除。一旦误删,恢复的成本可能不低。
我个人的做法是:在批量操作前,先导出一份当前已安装清单:
brew list --formula > formulas.txt brew list --cask > casks.txt这两个文件相当于一份“系统快照”。即使误删了包,只要照着清单逐条执行brew install $(cat formulas.txt),大部分包都能装回来。配置和用户数据是另一回事,但至少包层面的恢复不难。
另外,BrewUI 如果支持“回收站”或“待处理列表”功能,操作前留意确认。我现在用 BrewUI 时,仍然会坚持“能点单个包就绝不勾选全选”,这个习惯帮我躲过了不少次手滑。
4.4 我的使用心得和几个小配置建议
用 BrewUI 一段时间后,我的工作流变成了这样:每天开始工作时打开它,看一眼有没有关键工具更新;周末做一次深度清理,把缓存和孤立依赖处理掉;遇到编译问题不再凭经验乱猜,而是先打开依赖图确认关系。它没有让我彻底抛弃命令行,反而让我更愿意去理解命令行背后的逻辑。
有几个小配置建议可以分享。第一,如果你有多台 Mac,建议每台都用 iCloud 或 Git 保存formulas.txt和casks.txt,换机时恢复环境会非常快。第二,BrewUI 里如果能看到“自动更新检查”选项,我建议打开,因为 Homebrew 的仓库信息不更新,很多安装操作都会变慢甚至失败。第三,不要在 macOS 系统更新后立刻用 BrewUI 批量升级所有包,有些包的二进制版本可能还没适配新系统,等一两天再更新会更稳。
最后再分享一个小技巧:BrewUI 显示的可更新数量如果突然异常变大,先检查是否最近更换了 macOS Beta 版本。系统大版本升级会让很多 Formula 的兼容标记失效,此时直接brew upgrade不一定安全。正确做法是先brew update再brew upgrade,必要时查看具体某个包的上游说明。有了 BrewUI 的图形化列表,这个判断过程会轻松很多。