
用 Mac 的人几乎绕不开 Homebrew 这个名字。集成了那么多开源工具装个 node、git、python、ffmpeg一条 brew install 就能搞定省去了自己编译、瞎配路径的折腾。这么多年用下来我在终端里敲的 brew 命令少说也有几千条但说实话不是每个人都有时间和精力去记那一堆参数。很多人第一次接触 Homebrew就死在「mac 安装 homebrew 报错」这一步代码没写一行先跟终端搏斗了半天。BrewUI 就是在这种需求下出现的工具它给 Homebrew 套了一层图形化外壳把搜索、安装、卸载、升级、清理这些高频操作都搬到可视化界面上。这篇文章我会从 BrewUI 是什么讲到怎么安装配置再结合我踩过的坑把安装报错、Intel Mac 装不上、卸载残留这些高频问题一并说清楚。不管你是刚上手的新人还是已经用命令行很久的老手这篇文章里应该都有点对你有用的东西。1. BrewUI 是什么它解决的其实不是技术问题1.1 先聊聊 Homebrew 这个老伙计在说 BrewUI 之前必须先把 Homebrew 的底子说清楚。Homebrew 是 macOS 上非常流行的开源软件包管理器它最大的价值是把软件分发这件事标准化了。过去你想要用某个工具得去官网找源码包手动 configure、make、make install依赖缺了还得自己一个个找版本不兼容分分钟让人崩溃。Homebrew 把这些过程封装成了一套完整的「配方」你只需要 brew install它就会自动处理下载、编译、依赖安装、路径设置这些脏活累活。Homebrew 里有两个基本概念一个是 formula一个是 cask。formula 指的是命令行工具和库比如 git、wget、ffmpeg、opensslcask 指的是带有图形界面的完整应用比如 Google Chrome、微信、VS Code。二者打包格式不同安装命令也不同但底层都归 brew 管理。安装之后Intel 架构的 Mac 通常放在 /usr/localApple Silicon 放在 /opt/homebrew。理解这个目录差异对后面排查问题很有帮助。我个人的体会是Homebrew 最厉害的地方还不是安装而是它的更新和清理机制。brew update 更新索引brew upgrade 升级软件brew cleanup 做垃圾清理brew autoremove 把不再需要的依赖一并移除。这一整套生命周期管理做得好了一台 Mac 用三年开发环境依然干净。1.2 BrewUI 的定位命令行之上的 GUI 层说回 BrewUI。它并不是一个重新发明轮子的包管理器它本质上是一个「前端」。底层命令还是 brew 那些命令但用户不再需要打开终端、记住参数、手动解读输出而是通过一个图形窗口完成所有操作。你可以把它理解成Homebrew 是引擎BrewUI 是方向盘和仪表盘真正干活的是引擎方向盘只是让人更容易操控。这种「给命令行套 GUI」的设计思路在技术圈其实很常见比如 PostgreSQL 的 pgAdmin、Docker 的 Desktop、git 的 SourceTree走的都是同一条路子。它们的共同点是不改变底层逻辑只降低操作门槛。BrewUI 也一样界面里每一个按钮、每一个输入框背后都对应着一条或一组 brew 命令只是用户看不见罢了。一般来说BrewUI 这类工具会提供这些功能软件搜索与详细展示、一键安装/卸载、可用升级列表与批量升级、已安装软件清单、缓存清理、依赖信息展示、仓库源切换以及一些常见问题的引导修复。有的版本还支持监控 Homebrew 是否有新的更新并在菜单栏给出提醒。1.3 什么样的使用场景更适合 BrewUI你可能觉得用命令行很酷但现实是很多 Mac 用户并不是开发者或者只是轻度使用者。设计师要装 Sketch产品经理要装 Postman测试要装各种浏览器版本让他们上手 brew 命令不是不行但学习成本实在没必要。BrewUI 这类工具把这些人的需求降到了「看见什么点什么」。还有一类场景是记忆负担。brew 命令本身不长但组合起来多了比如 brew list --cask、brew deps --tree、brew outdated --greedy每次都要去查或者翻历史记录。用图形界面直接点选效率会高很多。当然这不意味着 GUI 能完全替代命令行。Homebrew 有非常多的参数和子命令GUI 能覆盖的只是高频的一部分一旦遇到复杂的依赖冲突或者自定义安装参数还是得回到终端去处理。我的建议是把 BrewUI 当成日常驾驶的默认工具把终端当作底牌。2. 安装与初始化先把环境和 BrewUI 跑通2.1 安装前必须检查的三件事安装 BrewUI 的先决条件是你的 Mac 上已经能正常运行 Homebrew。所以不要急着下载 BrewUI先确认三件事。第一确认系统版本。打开「关于本机」看 macOS 版本。如果系统太老比如 macOS 11 及以下新版本的 Homebrew 可能压根不支持这个接下来会细讲。第二确认处理器架构。打开终端输入uname -m输出 x86_64 说明是 Intel 芯片输出 arm64 说明是 Apple Silicon。不同架构对应的安装目录和镜像配置是不同的这个信息一定要记在心里。第三确认 Homebrew 是否已安装。在终端里输入brew --version如果能正常输出版本号说明已经装好。如果提示 zsh: command not found: brew说明需要先安装。2.2 安装 Homebrew 的正确姿势以及报错应对官方标准的安装命令是这个/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)这行命令会下载安装脚本并运行脚本会自动检测系统、判断架构、创建目录、拉取仓库。就是这一行命令让无数人在「mac 安装 homebrew 报错」的搜索页里来回徘徊因为它的执行过程并不总是顺利。最常见的报错是 curl 类错误比如curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL或者干脆curl: (28) Operation timed out。这类问题绝大多数是网络原因安装脚本需要从 GitHub 拉取大量数据而 GitHub 的连通性在一些网络环境下并不稳定。遇到这种问题不要反复重试同一件事而是要换一条路——使用镜像源。镜像源的思路很简单Homebrew 的核心仓库、安装脚本、以及下载用的 bottle 二进制包都有国内高校或云厂商的镜像。比较常用的是清华的 tuna 镜像、中科大的 USTC 镜像和阿里云镜像。设置方式一般是在环境变量里指定。以清华镜像为例我通常这样操作export HOMEBREW_BREW_GIT_REMOTEhttps://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git export HOMEBREW_CORE_GIT_REMOTEhttps://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git export HOMEBREW_BOTTLE_DOMAINhttps://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles执行完这几行之后再运行安装脚本配合的下载源就被替换掉了。不过终端重启后这些环境变量会失效如果想长期生效建议把它们写进 shell 配置文件比如 ~/.zshrc。注意镜像源配置有多种版本组合最好根据你所选镜像站的官方文档来设置避免混用导致 git 仓库源和 bottle 源不一致。2.3 Intel Mac 安装不上的原因拆解热搜里有「intel mac 安装不了 homebrew 了」这个说法有点危言耸听但要承认它的确反映了部分真实情况。Intel Mac 遇到安装失败绝大多数逃不出下面几个原因。一是系统版本过旧。新版 Homebrew 逐步放弃了对旧版本 macOS 的支持比如近几个大版本把最低系统要求提得越来越高。如果手里的 Intel Mac 停留在 macOS 10.15 甚至更老官方安装脚本会直接给出「Your macOS version is too old」之类的提示。解决办法要么是升级系统如果硬件还支持要么是安装旧版本的 Homebrew——但这个方案我不太推荐因为旧版本可能无法正确拉取新仓库反而引入新的问题。二是目录权限问题。Intel Mac 的 Homebrew 默认安装在 /usr/local 下这个目录属于系统管理员普通用户没有写入权限。如果安装脚本检测到目录存在但权限不对会安装失败。遇到这种情况可以手动修复目录所有权sudo chown -R $(whoami) /usr/local更稳妥的做法是先备份好 /usr/local 里已有的内容再操作不要乱改权限。三是网络问题这个其实在第一类报错里已经覆盖了。严格来说「Intel Mac 装不上 Homebrew」这句话并不准确它特指的是在特定系统版本、特定网络环境下的一种结果把原因定位清楚大多数机器都能装上。2.4 BrewUI 的安装与首次启动确认 Homebrew 就绪之后安装 BrewUI 本身非常简单。一般有几种途径第一种是直接从项目的 GitHub Releases 页面下载 dmg 安装包拖拽到 Applications 文件夹完成安装。第二种如果发行版本提供了 cask 支持也可以在终端里直接用 brew 安装brew install --cask brewui具体以你下载的版本说明为准。我个人的习惯是用 dmg 方式因为可以确认下载的文件是否完整也方便后续手动清理。首次启动时macOS 的 Gatekeeper 可能会因为应用未签名而拦截提示「无法打开因为无法验证开发者」。这时候需要到「系统设置 - 隐私与安全性」里点击「仍要打开」或者按住 Control 键再点应用图标选择打开。这是 mac 上运行从网上下载应用的常见流程不是什么大问题。启动后BrewUI 一般会先扫描本机已有的 Homebrew 环境。如果它检测到 brew 可执行文件会提示你确认路径如果检测不到会给出安装引导。之后主界面会列出 brew 的当前状态包括已安装包的数量、可更新包的数量、仓库源信息等。到这一步环境就基本跑通了。3. 核心操作实战用 BrewUI 管理你的软件包3.1 搜索与安装formula 和 cask 的区分打开 BrewUI 后最显眼的地方通常是搜索框。我以安装 Python 为例在搜索框里输入 python界面会列出名称相关的所有结果。这时候要注意区分它是 formula 还是 cask。python 这个关键字下通常会出现 python3.11、python3.12 这些公式它们是命令行版本的 Python如果搜索 pyenv 之类也可能是 cask因为 pyenv 虽然也以命令行使用为主但包形式可能不同。界面上一般会有类型标签或者靠包名规律也能判断凡是带 版本号后缀、纯小写命令名的大多是 formula。选好之后点安装按钮BrewUI 会转而去执行 brew install。图形界面最大的好处是你能实时看到进度和日志而不是在终端里盯着一堆滚动文本。安装完成后列表中对应软件的状态会变成已安装部分版本还会顺便展示这个包依赖了哪些库方便你了解它装了什么到系统里。这里我想给个建议在用图形界面搜索软件时多留意搜索结果的名称不要只看图标因为 BrewUI 的搜索结果来自 Homebrew 官方仓库里面不会有什么假冒应用但同名或近名的包可能代表不同的东西。比如搜索 chrome既能搜到 chrome-cli命令行控制工具也能搜到 google-chrome正式版浏览器和 google-chrome-canary金丝雀测试版选错了结果会和你预期差很多。3.2 升级与更新update、upgrade、outdated 三者别搞混BrewUI 一般会有一个「更新」或「升级」的页签显示当前有多少个包有可用更新。界面上点一下「全部升级」确实方便但我必须提醒你升级这件事没那么简单。Homebrew 升级涉及的底层命令有三个含义完全不同brew update 是拉取仓库索引相当于刷新可用软件列表brew outdated 是检查哪些已安装的包有新版本brew upgrade 才是真正执行升级。三者最常见的困惑是「点了更新但什么都没发生」。这种情况大概率是索引刷新了但可升级的包其实已经是最新或者有某些包被 pin 住不允许升级。我见过不少因为盲目执行 brew upgrade 导致开发环境被破坏的例子比如升级了 openssl 之后一堆老项目编译不过升级了 mysql 之后数据目录版本不兼容。我的经验是除非你有明确理由否则不要在项目上线前升级环境里的核心依赖。在 BrewUI 里更好用的功能是「可升级列表」——它会明确列出现在有哪些包的更新可以点。你可以只升级某一个而不用全量升级。这对日常维护来说非常友好。另外升级后如果发现新版本有兼容问题很多包支持回退。回退操作可能在 UI 里藏得比较深如果找不到可以用命令行brew install python3.10以此类推把版本号换成你要的旧版本即可。3.3 卸载与残留清理不止点一个「卸载」按钮卸载看起来简单BrewUI 里点一下卸载按钮底层调用 brew uninstall。但只做这一步往往会在系统里留下不少残余。热搜里专门有「homebrew 卸载残留」这个词说明受害人群不小。首先要知道brew uninstall 默认只删除包本体不删除该软件生成的配置文件。对于 cask 应用很多还会向系统写入偏好设置、日志、缓存。如果想让卸载更彻底命令行里一般要加 --zap 参数zap 的意思是把应用留在系统中的设置也一并删除brew uninstall --zap google-chrome其次卸载某个包之后它带来的依赖不会立刻被清理因为 Homebrew 为了安全不会自动删除那些可能被其他包使用的依赖。这时候需要执行 brew autoremove它会把不再被任何已安装包引用的那些依赖一并移走。最后还有 brew cleanup作用是清理旧的安装包缓存。在 BrewUI 里这三个操作通常被拆成两个按钮一个是「卸载」一个是「清理」界面按钮的名字可能不一样但原理就是这样。另外提醒一句如果你用的是 cask 安装的图形应用卸载后建议再手动清一下 ~/Library/Application Support/ 和 ~/Library/Preferences/ 下跟应用名相关的目录。这些不在 brew 的管理范围内但占用的磁盘空间可不少。3.4 用表格捋清高频命令与界面功能的对应关系为了让你更好地理解「界面按钮背后是什么命令」我整理了一张常用对照表界面操作底层命令说明搜索软件brew search从仓库索引匹配名称安装软件brew install安装 formula 或 cask卸载软件brew uninstall删除包本体彻底卸载 caskbrew uninstall --zap连同配置一起删除刷新索引brew update拉取最新仓库数据查看可更新brew outdated列出有新版本的包升级全部brew upgrade将所有可更新包升级清理孤儿依赖brew autoremove删除不再被引用的依赖清理缓存brew cleanup清理旧版本安装缓存这张表建议截图保存。很多界面上的行为本质上都是这些命令的组合理解了对应关系出了问题你就知道从哪里查起。4. 疑难杂症排查实录安装报错、Intel Mac、卸载残留4.1 典型报错一curl 下载超时或 SSL 错误这个我在前面提到过但值得再展开。安装 Homebrew 时如果遇到curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443或者超时类错误原因几乎都是 GitHub 的连接不稳定。这里有一个排查的顺序先试一次小请求比如 curl 能否访问一个常用的、不依赖目标的域名排除整体断网然后看是否为网络环境导致的连接问题。确认是 GitHub 连接问题后按前面说的方式切换到镜像源重新安装。重新执行安装脚本时建议加上 HOMEBREW_NO_AUTO_UPDATE1 环境变量避免安装过程中反复触发更新逻辑让过程更专注。不过这个变量对初次安装的脚本是否生效不同版本行为可能不同如果没效果安装完成后再配置也不迟。4.2 典型报错二目录不存在或无写权限如果遇到Error: /usr/local must be writable!说明 Homebrew 需要写入 /usr/local但当前用户没有权限。这个目录在 Intel Mac 上是系统预置目录普通用户默认不可写。解决办法是用 sudo 把目录属主改给当前用户sudo mkdir -p /usr/local sudo chown -R $(whoami):admin /usr/local注意如果 /usr/local 里已经存在很多由其他工具创建的内容直接递归修改属主可能会引发别的问题。更保守的做法是只创建 Homebrew 需要的子目录并授权不一定非得把整个目录的属主都改掉。网上很多教程上来就是一整条 chown我建议先看清楚目录里已经有什么再决定下手的范围。4.3 典型报错三卸载残留导致的 Git 仓库损坏这个现象很典型尤其是之前卸载 Homebrew 卸到一半、或者用不完整的脚本清除过环境的朋友。重新安装时会报类似Error: Not a valid ref: refs/remotes/origin/master或者fatal: Not a git repository: /opt/homebrew/Library/Taps/homebrew/homebrew-core/.git。这类问题的本质是Homebrew 的仓库目录残留在系统里但里面的 git 元数据已经不完整新安装脚本尝试拉取更新时被打断。处理方法是把残留的目录彻底清掉再重新安装。具体清理哪些目录我放在下一个小节讲。4.4 卸载残留全清单与彻底清理步骤很多人卸载 Homebrew 只删了主目录以为完事了其实残留非常多。我整理了一份检查清单按影响范围排序列在下面路径说明建议处理/usr/local/Homebrew 或 /opt/homebrewHomebrew 主程序目录需要删除/usr/local/Caskroom 或 /opt/homebrew/Caskroomcask 应用的安装包存放处按需删除/Library/Caches/Homebrew系统级下载缓存可删除~/Library/Caches/Homebrew用户级下载缓存可删除~/Library/LaunchAgents用户启动代理部分包会写入按需检查~/Library/Application Support应用支持文件部分 cask 写入按需检查/usr/local/Cellar 或 /opt/homebrew/Cellar包本体安装位置需要删除如果确定要彻底卸载并重装 Homebrew最稳妥的顺序是这样的第一步用 brew list 和 brew list --cask 记录你装过哪些包方便之后重装第二步如果系统里还有可用的 brew 命令用brew uninstall --cask 名称把 cask 应用逐一卸载再用brew uninstall 名称卸载 formula第三步brew cleanup和brew autoremove清理缓存和孤儿依赖第四步手动删除上表里的目录第五步检查环境变量文件 ~/.zshrc 或 ~/.bash_profile把里面 HOMEBREW_ 开头的 export 配置清理掉。做完这五步才算真正干净。之后再按新环境的要求重新安装成功率会高很多。4.5 Intel Mac 老机型安装 Homebrew 的实战记录最后复盘一个我实际经手的场景。机器是一台 2019 年的 Intel MacBook Pro系统还是 macOS 10.15。用户打开安装脚本就报错提示 macOS 版本过旧。我当时的处理流程是先 uname -m 确认是 x86_64再查 Homebrew 官方对系统版本的要求发现最新版已经不支持 10.15。这时候有两个选择一是升级 macOS硬件上 2019 年的机器升到 11 或 12 没有问题用户数据备份好就能升二是装旧版 Homebrew我不推荐。我最终建议用户先把系统升级到受支持的版本再用镜像源重装。整个重装过程大概十几分钟安装完成后 brew doctor 检查一遍没有再报错。这个案例说明搞清「报错背后的硬性约束」比盲目换命令更重要。安装报错的时候先别慌着复制粘贴网上的方案而是坐下来拆解一下系统够不够新、架构对不对、目录权限对不对、网络通不通。把这四个基本问题都排除掉百分之八十的安装报错都能解决。回到开头提到的几个高频问题我把这次实录里涉及的排查场景整理成一张速查表。它不算万能但覆盖了我在不同机器上遇到的大部分情况排查的时候先看报错文本里的关键字再对号入座走对应处理路径能省不少时间。需要提醒的是表格里的解决方向是通用路径实际执行时还要结合你自己机器的系统版本、安装目录和网络条件微调不要无脑复制命令。尤其是涉及 sudo 的命令动手之前一定想清楚后果。报错信息核心原因解决方向curl: (35) SSL_ERROR_SYSCALLGitHub 连接不稳定配置镜像源重试/usr/local must be writable目录权限不足sudo 修复属主Not a git repository in Taps残留仓库损坏清残留后重装Your macOS version is too old系统版本过低升级系统或装旧版5. 一些真实体会用 BrewUI 一段时间后的想法写了这么多最后说点真心话。我这个人在工具选择上比较务实BrewUI 这类工具我不会每天盯着用但确实会在一些场景里帮大忙。比如帮不怎么熟悉命令行的同事装环境我直接把 BrewUI 打开让他自己在搜索框里搜要装的软件自己点安装比我在终端里替他敲命令省心多了。再比如定期清理一下依赖和缓存不用每次都想命令怎么拼打开界面点两下就行。但也要泼一盆冷水千万别因为装了 GUI 就觉得可以彻底不学命令行。BrewUI 能覆盖的只是高频操作一旦遇到包冲突、依赖树复杂、编译参数定制这些场景你还是得回到终端用 brew deps、brew info、brew doctor 这些命令去诊断。我见过有人在群里发「BrewUI 里点安装一直转圈但就是不成功」的截图过来一问其实是磁盘空间满了。这种问题在图形界面里可能只是一个模糊的失败提示在终端里则直接给你一条清晰的 No space left on device。所以我始终建议把 BrewUI 当日常驾驶把终端当备胎两条路都会走心里才有底。最后分享一个小技巧brew 的自动更新有时会比较慢尤其是每次执行命令前自动触发的那一次。如果你不想每次都被卡住可以在 shell 配置里加一行 HOMEBREW_NO_AUTO_UPDATE1改为定时手动执行 brew update。界面里的更新按钮依然可以用只是不会强制打断了。这个小改动对日常使用流畅度的提升立竿见影。我自己的体会是工具终究是工具关键是把环境弄明白、维护勤快开发生活自然就顺了。希望你也少踩几个坑。