BrewUI这东西说白了就是把macOS上那个神一样的命令行包管理器Homebrew给套上了一层图形界面。Homebrew我用了快十年从当年在Leopard系统上折腾开始一直到现在它在开发者圈子里几乎是装机必备。但命令行这玩意儿对一部分人来说确实有门槛尤其是刚接触Mac的朋友一看到终端窗口就容易慌。BrewUI就是冲着这个痛点来的。先说个真实场景我有个做设计的朋友他电脑上要装nginx跑本地预览还得装ffmpeg处理视频每次都得让我远程帮他敲命令。后来我把BrewUI给他装好他直接在界面上点一下搜索再点一下安装完事了。那一刻我才意识到这类工具的价值不是取代Homebrew而是把Homebrew的能力辐射到更广泛的用户群体里。这篇文章就把BrewUI怎么装、怎么用、遇到问题怎么排查从头到尾捋一遍。也顺手把最近很多人问的“Intel Mac装不了Homebrew了”这事儿掰扯清楚。1. 先搞懂BrewUI到底是干嘛的1.1 Homebrew的痛点逼出来的图形界面Homebrew是macOS上最主流的第三方包管理器它做的事情类比一下就是手机上的应用商店——你想装什么软件、库、工具一条命令搞定还能自动处理依赖关系。比如你想装wget系统本来不自带一个brew install wget它自己会去下载编译装完就能用。但问题在于Homebrew的使用场景是纯命令行交互。你打开终端输入命令点击回车然后就是漫长的等待——编译、下载、再编译、再下载。一旦遇到网络问题、权限问题、依赖冲突输出的报错信息能让人头皮发麻。这些报错信息往往是大段的英文日志新手看完根本不知道从哪儿下手。BrewUI就是解决这个痛点的。它把Homebrew的能力用图形化界面封装起来让用户通过点击按钮来完成安装、卸载、更新、搜索等操作。你不需要记住brew install xxx、brew uninstall xxx这些命令界面上直接搜索、点选就行。而且BrewUI会读取Homebrew的日志和状态把报错信息翻译成更容易理解的中文提示排查问题的时候省事不少。1.2 BrewUI能做什么解决什么问题具体来讲BrewUI做了这四件事可视化搜索和浏览软件包你可以直接在搜索框里输入软件名不需要去Homebrew的网站查库也不用记包名。一键安装、卸载、更新点按钮的事情不用敲命令。可视化查看已安装组件哪些是依赖装进来的、哪些是你主动装的一眼就能看清楚。配置管理比如替换官方源为国内镜像、设置代理、查看Homebrew本身的运行状态都可以在界面里完成。对我来说BrewUI最舒服的一个场景是管理卸载残留。Homebrew卸载软件时经常有依赖残留比如你卸载了一个库它当时顺手装进来的依赖还在系统里。命令行里要处理这些得手动分析依赖树很麻烦。BrewUI会把依赖关系展示出来你勾选一下“同时卸载无用的依赖”这个问题就解决了。这个功能对维护系统干净度特别有帮助。1.3 适合谁来用我总结下来BrewUI适合这几类人刚接触macOS、不熟悉命令行的新手有图形界面兜底安装软件时不会发怵。被Homebrew安装、更新折腾烦了的人界面里重试、换源、看日志都比命令行直观得多。需要维护多台Mac的运维或开发者用BrewUI可以更直观地对比各台机器的组件差异。给女朋友/家人/同事远程解决软件安装问题的“热心肠”你教他点击比教他敲命令效率高太多。当然如果你是个坚定的命令行拥护者完全习惯brew命令的操作节奏BrewUI对你来说可能只是锦上添花。但它是一个很好的工具尤其是需要跟非技术背景的人协作时BrewUI能让你的“技术支持”工作轻松一半。2. 你大概率关心的Homebrew安装失败的真相既然聊BrewUI就不能不提它底层依赖的Homebrew本身。最近总看到有人在问“Intel Mac安装不了Homebrew了”“mac安装Homebrew报错”这里我把底裤揭开讲清楚到底是怎么回事。2.1 Intel Mac被“抛弃”的真实情况Homebrew官方确实在逐步调整对Intel Mac的支持力度。核心原因是Apple SiliconM1/M2/M3系列芯片已经成为绝对的主流Homebrew的开发资源在向arm64架构倾斜。但这不等于Intel Mac完全无法安装Homebrew。实际上Intel Mac仍然是支持安装的只是安装方式和某些包的支持优先级发生了变化。如果你用的是Intel Mac最稳妥的安装方式是/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)注意这里有个隐藏的坑。上面这个官方安装脚本它在执行时会检测你的CPU架构。如果你的系统自带Rosetta 2转译层或者终端进程本身是在Rosetta模式下运行的脚本可能误判环境导致安装过程出现各种奇怪问题。这个检测逻辑在社区里被诟病了很久也是“Intel Mac装不了Homebrew”这个说法的来源之一。2.2 安装报错的几种典型场景我自己实测和帮人排查的过程中遇到过这几类高频报错场景一网络连接失败最常见。官方源托管在GitHub上国内网络环境访问GitHub时灵时不灵可能断在下载阶段。报错通常是curl: (7) Failed to connect to raw.githubusercontent.com port 443: Operation timed out或者安装进度条卡在某个百分比不动半小时后彻底超时。场景二权限不足之前系统里装过Homebrew后来卸载没卸干净或者手动改过/usr/local目录的权限。安装脚本在写入/usr/local/Cellar或者/opt/homebrew时提示Error: The following directories are not writable by your user场景三系统版本和已安装的Xcode命令行工具不匹配安装时提示需要安装Command Line Tools for Xcode但你系统里装的是旧版本或者压根没有。执行xcode-select --install又弹出“Software is already installed”但实际上根本没装成功。场景四目录结构混乱最隐蔽的一种常见于Intel Mac升级系统后。因为历史原因Intel Mac的Homebrew默认安装目录是/usr/local。这个目录同时被系统其他东西占用如果你的用户对它没有写权限或者目录里残留了旧版Homebrew的文件安装脚本会检测到“目录非空且不属于Homebrew”直接中止安装。2.3 针对性的解决思路针对上面这些情况我的建议是分阶段处理先检查残留如果以前装过Homebrew先清理干净。如果你担心卸载不彻底参考本文后面的“卸载残留”清理部分把该删的目录都删了。更换安装源安装时用国内镜像比如中科大或者清华的Homebrew源把安装脚本和安装包下载链接都指过去。处理好权限确保/usr/localIntel或/opt/homebrewApple Silicon目录对当前用户可写。装好Xcode命令行工具执行xcode-select --install并且确认安装成功必要时把旧工具链删了重装。在这里插一句我经常被问“用了BrewUI还需要手动装Homebrew吗”答案是需要的。BrewUI只是一个前端界面它依赖系统里已经存在的Homebrew。所以在装BrewUI之前你得确保Homebrew本体已经能正常运行。3. Homebrew装完之后的那些基本操作BrewUI替代了大部分命令行操作但了解Homebrew的基本操作能让你在用BrewUI时对背后发生了什么心知肚明。这里快速过一遍。3.1 安装和版本管理Homebrew安装成功后brew命令就有了。它的核心命令不多brew install 软件名安装软件例如brew install gitbrew uninstall 软件名卸载软件brew update更新Homebrew自身的索引和软件定义文件brew upgrade升级所有可升级的软件包brew upgrade 软件名升级指定的软件包brew search 关键词搜索可安装的软件包brew info 软件名查看某个软件包的详细信息包括版本、依赖、安装路径等brew list列出所有已安装的软件包brew outdated列出所有有新版本的软件包brew services查看和管理通过Homebrew安装的服务比如nginx、redis这类常驻后台的程序我觉得其中最容易混淆的是update和upgrade。update更新的是“软件清单”就是你本地知道的软件列表upgrade才是真正把软件升级到高版本。很多新手只跑一条brew upgrade然后发现升级报错因为本地“清单”过期了升级的时候找不到新版本。所以正确的姿势是先update再upgrade。3.2 配置文件和环境变量Homebrew有两个关键的配置文件路径需要关注/usr/localIntel Mac/opt/homebrewApple Silicon如果你在Apple Silicon Mac上安装了Homebrew它会把相关的环境变量配置写进shell配置文件里。以zsh为例打开~/.zprofile或者~/.zshrc通常会有这样一行eval $(/opt/homebrew/bin/brew shellenv)这一行的作用是让shell能找到brew命令。如果你打开新的终端窗口后提示command not found: brew十有八九是这个环境变量没配置好。还有一个文件是~/.brewconfig或者/usr/local/Homebrew/.brewconfig有些版本会用到。如果你不确定自己机器上情况可以在终端里执行brew config它会输出Homebrew在你这台机器上的所有配置信息包括架构、安装目录、编译器版本等。排查问题时这个命令的打印内容非常关键。3.3 更换镜像源的通用做法如果你访问官方源不稳定国内镜像源是刚需。中科大的镜像源我做成了标准配置操作方式如下# 替换brew.git cd $(brew --repo) git remote set-url origin https://mirrors.ustc.edu.cn/brew.git # 替换homebrew-core.git cd $(brew --repo)/Library/Taps/homebrew/homebrew-core git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git # 替换homebrew-cask.git cd $(brew --repo)/Library/Taps/homebrew/homebrew-cask git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git替换完记得执行brew update重建索引。你如果觉得敲命令麻烦BrewUI的设置界面里基本都把换源功能做成了选项点两下鼠标就能完成。4. 实操BrewUI安装、配置与使用全流程现在正式进入BrewUI的实操环节。我会按步骤走一遍包含安装、基础配置、日常使用最后给出几组我实测好用的组合操作。4.1 安装BrewUI在安装BrewUI之前先用命令行确认Homebrew本体正常brew --version如果这行命令能正常输出版本号说明Homebrew环境没问题。接着把BrewUI的仓库克隆到本地这里我推荐用国内能稳定访问的镜像源。以GitCode平台为例操作方式如下git clone https://gitcode.com/mirrors/brewui/brewui.git /usr/local/brewui提示如果你是Apple Silicon的Mac目录建议换成/opt/brewui避免权限问题。BrewUI本质上是个开源项目你可以通过Homebrew自己搜索brew search brewui如果有版本直接brew install --cask brewui。装完之后打开终端进入到BrewUI目录执行启动命令cd /usr/local/brewui python3 app.py看到类似这样输出说明启动成功[INFO] BrewUI 已启动端口: 8080然后浏览器访问http://127.0.0.1:8080进入图形界面。4.2 把BrewUI用起来核心功能实测BrewUI的主界面一般分为这么几个区域搜索框、软件列表、已安装列表、设置面板。我用下来之后发现它的核心功能要在特定顺序下用才最顺手第一步设置好国内镜像进入设置面板把“软件源”切到中科大或者清华镜像。“其实这一步最重要默认源如果连接不稳定后面所有操作都会卡在下载上。”设置好后点击“测试连接”界面会返回一个延迟数值如果显示为绿色数字说明源已经通。这一步不做的后果是你在BrewUI里搜索任何软件包转圈转到怀疑人生。第二步用搜索功能找软件在搜索框输入你想要安装的软件名比如ffmpeg。BrewUI会调用brew search从本地的索引里找匹配项并把结果展示成卡片。每个卡片上会显示软件名、版本号、简介还有安装按钮。这个界面的好处是能直接看到哪些包是官方核心库的哪些是第三方的通过Tap添加的这样你在安装的时候心里有数。第三步安装并实时看日志点“安装”按钮后BrewUI会调用brew install然后把终端输出流式地转到一个日志面板里。你有两个选择让它自己在后台跑或者点开日志面板围观。我建议点开看为什么因为你可以实时观察它是不是卡在某一处下载上。如果进度条超过10分钟没动果断取消去换源或者重新安装“硬等”是最浪费时间的操作。第四步管理已安装的组件已安装列表会展示所有brew list能看到的东西。这里有个贴心设计它会用不同的颜色区分“你主动安装的”和“被依赖自动安装的”。你卸载一个软件时它会提示有哪些依赖可能变成孤儿依赖问你要不要一并清理。这个设计很实在能避免系统里堆满垃圾文件和无名目录。还有一些我常用的功能比如services管理。用Homebrew装过nginx或者MySQL的人都知道brew services start是启动、brew services stop是停止命令行时候最怕忘记哪个服务还挂着。BrewUI里会以开关形式显示一键开关。4.3 用BrewUI做一个完整的事情安装并运行nginx为了让你更直观地理解整个流程我用BrewUI装一个nginx并启动它这个例子覆盖了搜索、安装、服务管理的所有核心逻辑在BrewUI搜索框输入nginx选中nginx卡片点击“安装”。观察日志等待输出Pouring nginx-xxx.arm64_sonoma.bottle.tar.gz这就说明安装包已经成功下载并正在解压。安装完成后切到“服务管理”页签你会看到nginx出现在列表中状态是“已安装未启动”。点击开关BrewUI执行brew services start nginx。打开浏览器访问http://localhost:8080如果看到nginx欢迎页大功告成。这个过程中完全没用命令行。这个例子同时也展示了BrewUI作为“包管理”和“服务管理”双重角色的能力。你在命令行里要连续敲好几个命令的操作它在界面上不过是三五次点击。4.4 注意事项与踩坑心得BrewUI用久了我总结出几条经验写在这里不要同时在命令行和BrewUI里操作Homebrew两个进程同时操作数据库可能出现锁冲突导致目录权限变化或索引损坏。等一个操作彻底结束再开另一个。安装大软件包时保持屏幕常亮BrewUI调用的是终端命令电脑睡眠可能导致子进程中断表现为安装卡死。最好在系统设置里把“电池/电源适配器”的自动睡眠时间调长或者干脆插着电源干活。定期点一下“更新源”按钮Homebrew的索引需要定时更新BrewUI里的“更新”按钮等于brew update建议每周至少跑一次。不更新的后果是你搜出来的软件版本信息是几周前的装完还得再升级一次。BrewUI只是“壳”如果BrewUI本身出了bug比如日志面板抽风、按钮没反应第一反应不应该是重装BrewUI而是去命令行里手动执行brew list之类的原生命令确认Homebrew本体是否正常。八成情况是Homebrew那边的问题。5. 常见问题与排查技巧实录这部分内容是我实际使用和各种被咨询中积累的挑几个代表性的问题出来讲讲。5.1 安装BrewUI时提示端口被占用症状运行启动脚本时提示端口8080被占用BrewUI起不来。排查思路先确认哪个进程占用了8080端口lsof -i :8080如果看到PID用kill -9 PID杀掉进程。但如果你机器上跑着其他服务占用了8080而且不能停那就修改BrewUI的启动端口。多数版本的BrewUI支持环境变量指定端口PORT9090 python3 app.py然后在浏览器里访问http://127.0.0.1:9090。5.2 Homebrew卸载残留问题一个恶心但很常见的场景你曾经用/bin/bash -c $(curl -fsSL ...)的方式装过Homebrew后来用rm -rf粗暴删掉了/usr/local里的文件夹谁知道根本没有删干净。残留主要体现在几个地方/usr/local/Cellar/Homebrew的软件安装目录如果残留重新安装时脚本会检测到“非空目录”。/usr/local/Homebrew/Homebrew本体目录残留会导致版本判断混乱。/usr/local/etc/配置文件目录残留的配置会影响新安装的软件。/usr/local/var/数据文件和日志文件残留会占用磁盘空间。~/Library/Caches/Homebrew/下载缓存目录残留的下载包会占用几十G空间。~/Library/Logs/Homebrew/日志目录。处理残留时我建议分两拨删。第一拨删除Homebrew本体安装目录第二拨删除缓存和日志这些在用户目录下需要单独查找。具体命令# 清理本体 sudo rm -rf /usr/local/Cellar sudo rm -rf /usr/local/Homebrew sudo rm -rf /usr/local/etc sudo rm -rf /usr/local/var sudo rm -rf /usr/local/Frameworks sudo rm -rf /usr/local/share # 清理用户目录缓存和日志 rm -rf ~/Library/Caches/Homebrew rm -rf ~/Library/Logs/Homebrew清理完再执行安装成功率会大幅提升。5.3 常见报错速查表这里整理了一个表格方便你对照排查报错内容原因解决办法Failed to connect to raw.githubusercontent.com port 443: Operation timed out网络无法访问GitHub更换国内镜像源安装或者配置代理后重试The following directories are not writable by your userHomebrew目录无写权限sudo chown -R $(whoami) /usr/local修改目录所有者Error: Cannot install under Rosetta 2在ARM架构机器上以Rosetta转译模式运行Homebrew在终端设置为“使用Rosetta打开”改为“使用默认架构”或用原生arm64终端Error: Permission denied apply2files安装文件写入目录权限不足检查目标目录所有者必要时chownError: Your CLT does not support macOS 14.4Xcode命令行工具版本过低或不匹配更新系统或重装Command Line ToolsError: git is not installed系统自带git缺失或版本过低安装Xcode命令行工具里面自带gitError: Another active Homebrew process is already in progress有另一个Homebrew进程在运行等待进程结束或者ps auxHomebrew must be run under the Ruby 2.6 or newer系统Ruby版本太老安装新版本Rubybrew install ruby再设置PATH5.4 一个隐蔽问题BrewUI搜索不到某个包这个问题我最常被问到。比如你确定Homebrew里有一个叫wget2的软件但在BrewUI里搜wget只能搜到wget本身没有wget2。原因大概率是你的Homebrew索引里的第三个Tap没启用或者本地索引过期。Homebrew的第三方Tap需要额外添加比如brew tap homebrew/cask-versions。BrewUI在界面上一般不主动添加第三方Tap需要你先在命令行里把他们加好brew tap homebrew/cask-versions brew tap homebrew/cask-drivers brew tap homebrew/cask-fonts添加完再回到BrewUI点击“更新索引”按钮索引拉取完成后再搜索基本就能找到了。6. 再聊几句实在话BrewUI这种工具定位上有点像是Homebrew的“遥控器”——它不替代Homebrew也不试图替代。它解决的是“很多人对命令行天然有距离感”这个现实问题。我用命令行操作Homebrew十年现在依然会在批量处理几十个包的时候切回终端但如果是要给新手推荐一条稳妥的路BrewUI绝对是一个好选择。它在安装、卸载、更新、服务管理这几个核心环节上做了很好的图形化封装只要Homebrew本体健康它的体验称得上流畅。更实际的意义在于把很多“远古时期”的坑比如源访问不了、依赖残留、权限错乱用图形化的方式告诉我们哪里出了问题至少你不会对着满屏日志发慌了。我个人实际用下来的体会是如果你经常帮朋友处理Mac上软件安装问题装上BrewUI能让你远程省掉很多废话如果你是Mac新手从BrewUI入门等用熟了再逐步接触命令行学习曲线会平滑得多。最后再分享一个小技巧用BrewUI装完软件后去“已安装”列表里看一眼依赖树你会发现很多软件偷偷给你装了一堆东西定期清理孤儿依赖比任何所谓的“系统清理工具”都管用。
