ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

BrewUI 实战:给 Homebrew 套上图形化外壳,Mac 开发环境管理不再难

BrewUI 实战:给 Homebrew 套上图形化外壳,Mac 开发环境管理不再难 mac上装开发环境绕不开Homebrew这个判断我做了快十年还是认。但这事儿有一个很尴尬的现实Homebrew官方只提供命令行接口所有的安装、卸载、清理、查依赖都得在终端里敲命令。对老手来说这是效率对接触不多的人来说就是门槛。我见过不止一个同事因为一条brew install报错卡在终端前半小时不敢动。后来我推荐他们用BrewUI——一个给Homebrew做图形界面的开源工具相当于给命令行套了一层可视化的壳本质上操作的还是同一个Homebrew。这篇文章把我身边人的实际使用经历、安装前后的各种坑以及最终选择BrewUI的理由完整写出来希望能帮你少走点弯路。1. 先回答一个反直觉的问题命令行工具为什么需要GUI1.1 被brew命令劝退的真实场景先说个不少人可能经历过的场景。身边的同学买了Mac想装个Node.js网上教程告诉他打开终端粘贴一条安装命令回车。命令是跑了满屏英文滚动最后抛出一个红色的错误提示。他根本不知道是装好了还是失败了更不知道怎么排查。这时候你跟他说跑一下brew doctor看看环境有没有问题他只会更慌。Homebrew的功能本身很强大查软件、装软件、卸软件、看依赖关系、启动后台服务一条命令能搞定很多事。但它把所有操作都压在命令行这一棵树上这对不懂终端操作的人来说成本一下子就上去了。BrewUI这类工具存在的意义就是把高频操作从背命令变成点按钮把猜结果变成看状态。1.2 BrewUI不是给程序小白准备的是给不想背命令的人准备的很多命令行老手看到这里可能会摇头GUI有什么好用的敲命令三秒钟就完事。这话没错但适用范围有限。BrewUI真正适合的其实是两类人一类是刚接触Mac开发环境、还在被终端吓住的新手另一类是日常已经用Homebrew装过不少软件、但记不住一堆命令和参数的人比如设计师、测试、产品经理偶尔装个工具查个包让他们完整学一遍命令行语法不现实一个能看的界面就友好得多。BrewUI本身不是Homebrew官方出品的它是第三方开发者做的开源项目本质上还是调用Homebrew的命令和机读输出把结果解析成图形化的状态。它没有改变Homebrew的安装位置也没有另起炉灶所有装进去的软件包、依赖关系、更新信息跟你在终端里用命令行操作看到的是完全一致的。这一点很重要如果你习惯了用命令行偶尔开BrewUI看看依赖关系不会搞乱环境。1.3 它和命令行其实是同一个Homebrew有不少人担心用了GUI会不会把环境搞坏或者是不是多装了一套东西。其实不会。BrewUI只是操作界面真正干活的还是Homebrew本身软件包还是装到/usr/local或者/opt/homebrew下面卸载逻辑、依赖清理逻辑都是Homebrew自己那套。你完全可以把BrewUI当成一个远程遥控器遥控的始终是那台Homebrew机器。也正因为如此BrewUI的安装方式很简单你不需要专门去装一个独立运行环境。下载应用包丢进Applications就行首次打开时它会去读取已经装好的Homebrew环境。如果电脑上压根没装HomebrewBrewUI反而跑不起来——因为它只是壳壳里没有引擎。2. 装BrewUI前的那场硬仗Homebrew安装失败的根因排查2.1 装之前先确认三件事系统版本、芯片架构、目录权限虽然BrewUI是个GUI应用但它的前提是电脑里已经有一个能正常工作的Homebrew。我帮别人装BrewUI时发现十个人里有七八个是卡在Homebrew本身装不上而不是BrewUI有问题。想避免这个局面动手之前先把三件事搞清楚。第一是系统版本。Homebrew对macOS版本有明确要求太老的系统版本会让最新版Homebrew直接拒绝安装。第二是芯片架构。Intel Mac的Homebrew装到/usr/local目录Apple Silicon的装到/opt/homebrew目录两条路线的环境变量、依赖路径全都不一样装错地方后面全是坑。第三是目录权限。Intel Mac上/usr/local目录经常因为权限问题导致安装脚本中途挂掉这个在旧机型上特别常见。确认方法很简单点左上角苹果图标选关于本机看系统版本和芯片型号权限问题可以先在终端跑一下ls -ld /usr/local看看属主和权限位。把这些基础信息确认好后面装Homebrew的成功率会高很多。2.2 最常见的安装报错和对应修法我整理了一下用户反馈里出现频率最高的几个报错。第一个是curl: (7) Failed to connect to raw.githubusercontent.com port 443这个基本属于网络环境对GitHub不友好导致的。终端里跑安装命令时脚本要从raw.githubusercontent.com拉取内容只要这一步握手失败后面全部白搭。老实说这一关挂掉的人大部分不是命令敲错纯粹是网络问题。处理办法因人而异。最朴素的是多试几次有时候是临时抖动也可以切换网络环境比如从Wi-Fi换到手机热点换个出口IP再试。如果长期处于网络不稳定的状态更靠谱的做法是使用国内开源镜像站提供的安装脚本中科大、清华的镜像都有Homebrew安装源。我不展开说具体步骤因为这些镜像站的文档写得已经很清楚了跟着走基本都能装上。第二个高发报错是fatal: unable to access https://github.com/Homebrew/brew/这是git clone阶段连接不上GitHub仓库。解决办法跟上面类似一个是换网络另一个是换git源。可以先把Homebrew的远程仓库地址改成镜像站地址再执行安装脚本。另外如果你使用的终端代理工具存在冲突也可能导致git访问异常这种情况可以临时关掉代理再试。第三个是权限类报错典型的是Permission denied dir_s_mkdir。这个一般出现在Intel Mac上因为/usr/local目录的属主不是当前用户。我以前在旧款Mac上装Homebrew就遇到过这类问题。解决办法是用sudo mkdir -p /usr/local/Homebrew创建目录然后用sudo chown -R $(whoami):admin /usr/local把目录归属权交回给当前用户。注意这里的路径要按Intel Mac的默认前缀来写Apple Silicon上一般不需要这么折腾。2.3 Intel Mac安装不了Homebrew到底是不是真的最近越来越多人在搜intel mac 安装不了homebrew了这个说法一半真一半假。真的部分是Homebrew新版确实在不断抬高系统版本门槛如果你的Intel Mac停在旧系统比如High Sierra或者更早装最新版Homebrew会直接提示系统版本过老。假的部分是只要系统还在受支持的范围内Intel Mac是可以正常装、正常用的只是后续软件包下载和更新频率会逐渐变少。如果你用的是比较老、又暂时没法升级系统的Intel Mac也不是完全没救。一个思路是装对应旧版本Homebrew但我不太推荐因为旧版会带来依赖兼容性问题而且官方不维护了出了bug很难查。另一个思路是用其他包管理器顶替比如MacPorts在旧系统上的兼容性反而更好。说实话对于老机器我更建议先确认自己到底需要Homebrew的哪些包再决定是不是非它不可。3. BrewUI核心功能实测每个按钮背后都藏着一条命令3.1 一眼看穿环境仪表盘和软件清单装好BrewUI第一眼看到的是Dashboard形式的概览页上面会列出现在装了多个 formulae命令行工具和多个 casks图形应用还有多少个软件包有可用更新。这个信息量其实不大但有个好处它把我的电脑上到底装了什么这个问题从翻终端记录变成了看一个面板。我帮同事排查环境时先开BrewUI看一轮安装列表基本就能定位是不是软件版本冲突或者残留了不该装的包。我用的版本里还有很直观的Outdated过期列表它会列出所有可以升级的软件包并提供一键升级入口。这个功能对应命令行里的brew outdated和brew upgrade但界面看得很清楚不用担心输入命令时把名字拼错。需要提醒的是升级前最好瞄一眼每个软件的更新说明有些大版本升级是会破坏兼容性的无脑全选升级所有有一定风险。3.2 搜索与一键安装告别手敲brew installBrewUI的搜索栏是我用得最频繁的功能。在搜索框里输入关键词它会同时匹配formulae和casks点进详情页能看到软件简介、版本号、依赖关系、所属tap。点击安装按钮后软件底部会显示安装进度和日志输出相当于把brew install和brew install --cask做了个可视化封装。这里有个细节值得讲搜索结果的来源还是Homebrew的官方仓库BrewUI不会自己造一个软件源所以你在命令行里搜不到的东西在BrewUI里同样搜不到。另外安装按钮区分了安装命令行工具和安装图形应用两条路径本质对应brew install和brew install --cask。新手很容易在这点上懵——搜索Visual Studio Code结果既有一个formula版本也有一个cask版本Word文档和App到底选哪个。简单结论是普通用户想装图形界面软件选cask版本就对了。3.3 依赖关系树终于知道每次安装都带了什么这是BrewUI里我认为最有技术价值的一个功能。命令行里看依赖你得敲brew deps --tree输出全是字符树依赖多了以后非常难读。BrewUI把依赖关系画成可展开的树形图你能直接看到某个包依赖了哪些底层库反向也能查某个库被哪几个上层软件引用。这个功能的价值在于清理和升级决策。比如你打算卸载一个软件又担心别的东西也在用它展开依赖树看一眼就不会误伤。我实际处理过一个案例同事卸载了某个开发库结果其他好几个项目编译直接挂掉就是因为没查反向依赖。在BrewUI里右键某个包就能看到被谁引用再决定动不动手这个习惯值得培养。3.4 一键体检与清理brew doctor和brew cleanup的图形化Homebrew用久了环境里难免有各种奇怪状态符号链接失效、目录权限不对、有软件包没装完。命令行里对应的操作是brew doctor输出一大篇英文新手看完更焦虑了。BrewUI把它做成了体检报告式的展示有问题列出问题没问题的打勾至少不用自己去猜那堆日志在说什么。清理功能也一样对应brew cleanup它会删掉已经下载的旧版本安装包和失效的缓存文件。BrewUI界面上会显示可以释放多少磁盘空间点一下就能完成。这个功能对硬盘紧张的人很有用Mac上Xcode缓存、node_modules这种东西动辄几个GHomebrew缓存其实也占不少。我见过最夸张的一台电脑brew cleanup清出来将近8个G的缓存纯靠命令行去查的话恐怕很多人根本没意识到这些垃圾在哪。4. 图形界面替代不了的那部分Homebrew基本操作还得会4.1 BrewUI操作与命令行命令对照表有人可能会想既然有了BrewUI是不是就再也不用碰终端了我的回答是日常80%的操作确实不用了但剩下20%还是得靠命令行。为了让心里有底我把BrewUI里常见的操作和命令行的对应关系整理成一张表建议刚接触的同学存一下。你想做的事BrewUI操作等价命令行命令搜索软件包搜索框输入关键词brew search 关键词安装命令行工具软件详情页点安装brew install 公式名安装图形应用选择cask版本安装brew install --cask 应用名卸载软件软件列表勾选后点卸载brew uninstall 公式名列出已装软件浏览已安装列表brew list查看软件信息点开详情页brew info 公式名查看依赖打开依赖树brew deps --tree升级所有软件更新面板一键升级brew upgrade清理缓存一键清理brew cleanup体检一键体检brew doctor管理后台服务服务管理页brew services list / start / stop这张表不是让你去背命令而是让你理解一件事BrewUI的每一个按钮背后都是Homebrew在做事。如果哪天它界面出错了或调试时遇到问题你至少知道它调用的是哪条命令能准确描述问题而不是只会说它报了一个错。4.2 什么时候必须回终端BrewUI再方便也有管不到的地方。比如要安装一个不在官方仓库里的包需要挂第三方的tap比如brew tap homebrew/cask-versions或者一些自定义tap这类操作目前还是命令行执行更顺手。再比如想调整安装参数比如brew install mysql --with-xx之类GUI里未必能找到对应的开关这时命令行是唯一选择。还有一种情况是Homebrew服务管理。brew services start/stop这个命令能管理MySQL、Redis这类后台服务BrewUI的服务管理页虽然能做基本的启动和停止但想开机自启、看日志位置、切换配置文件在命令行里做会更快更准。我的习惯是GUI看状态命令行做精细操作。4.3 给新手的一套最少够用命令清单说完哪些场景必须回终端给新手准备一套最精简的命令清单够用且不吓人brew install 名字安装命令行工具brew install --cask 名字安装图形应用brew uninstall 名字卸载brew update更新Homebrew自身索引brew upgrade升级所有已装软件brew list列出已装软件brew doctor检查环境问题这几条足够覆盖大部分日常场景。建议不要贪多等用熟了再慢慢扩展。BrewUI适合日常操作但这几条命令能在关键时刻救命——比如BrewUI打不开、显示不了列表或者你在一台没有GUI工具的服务器上管理软件包。5. 卸载残留清理Homebrew与BrewUI都没告诉你的收尾工作5.1 官方卸载脚本的正确打开方式聊到最后说一个很多人忽略的问题卸载残留。很多人在Mac上装软件随缘卸载也随缘直接把应用拖进废纸篓就算完事。Homebrew因为是命令行工具卸载之后留下的残余往往特别隐蔽。要彻底卸载Homebrew官方提供了一个卸载脚本在终端里执行/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)这个脚本会问你几个问题比如确认要删除哪些目录是否删除缓存按提示走就行。它干的事情包括卸载通过Homebrew安装的所有软件包、删除Homebrew自身的安装目录、清理一些基础关联文件。注意这个脚本默认不会删除你通过brew services注册的后台服务也不会动你在shell配置文件里加的环境变量。5.2 没被卸载脚本扫干净的残留目录脚本跑完之后你以为干净了实际上还残留了不少东西。我踩过这个坑处理到一半发现/usr/local下面还挂着一堆Cellar、Caskroom目录环境变量的PATH里还留着brew路径这时候才意识到光是跑官方脚本远远不够。根据我实际清理的经验卸载脚本跑完后还需要手动检查这些位置Intel Mac:/usr/local/Homebrew、/usr/local/Cellar、/usr/local/CaskroomApple Silicon:/opt/homebrew及内部的Cellar、Caskroom缓存目录:~/Library/Caches/Homebrew日志目录:~/Library/Logs/Homebrew临时文件:/tmp/install.*等服务文件:~/Library/LaunchAgents里带homebrew前缀的plist文件一句话总结只要是路径里带homebrew字样的文件夹都值得打开看看再决定删不删。当然删之前先确认它确实是Homebrew的残留别误删了你手动放进去的东西。5.3 环境变量和配置文件也要擦干净这是大多数人最容易遗漏的部分。Homebrew安装时会把eval $(/opt/homebrew/bin/brew shellenv)或者export PATH/usr/local/bin:$PATH这类配置写进shell的配置文件里。如果你用的是zsh那就是~/.zshrc如果你还在用bash就是~/.bash_profile或~/.bashrc。卸载完Homebrew这些配置不会自动消失下次打开终端还会报brew: command not found或者PATH里挂着一个不存在的路径。清理方式不复杂用文本编辑器打开配置文件找到带homebrew或brew shellenv的行删掉然后保存。之后新开一个终端窗口which brew确认已经没有输出PATH里也干净了才算真正卸干净。5.4 我踩过的卸载残留坑分享一个具体的案例。之前帮朋友清理旧电脑发现他早在一年多前就用卸载脚本把Homebrew卸了但每次打开终端都会等好几秒还偶尔报一个奇怪的路径错误。我查了很久最后定位到问题出在两处一是~/.zshrc里还留着Homebrew环境初始化命令每次启动终端都要尝试加载一个已经不存在的目录导致启动变慢二是~/Library/Application Support/Homebrew这个隐藏目录还占着三百多兆的空间里面是各种历史日志和临时文件。这个经历告诉我卸载Homebrew不能只看命令跑完了没更要看和它相关的配置是不是都清了。如果你打算卸载Homebrew的过程也被BrewUI管理过记得把BrewUI的应用配置目录也一并清理路径通常是~/Library/Application Support/BrewUI和~/Library/Preferences下对应文件这个场合下两者是一套东西。我个人在实际操作中的体会是BrewUI和Homebrew的关系就像一个图形化驾驶舱和一个发动机。日常驾驶座舱很舒服但真到了排查故障、决定走哪条路线的时候还是得你会看发动机原理。所以如果你是刚开始接触Mac开发环境大可以放心用BrewUI降低起步门槛但千万别把自己彻底隔离在命令行之外。两条腿走路一边用GUI点得顺手一边把最基本的brew命令记在心里这才是最舒服、也最不容易踩坑的状态。
返回列表