
1. 為什么我最終決定在 Homebrew 命令行邊上再裝一個(gè) BrewUI說(shuō)句實(shí)話我用 Homebrew 五六年了一直是命令行重度用戶。brew install、brew upgrade這些命令閉著眼都能敲按理說(shuō)根本不需要一個(gè)圖形界面來(lái)多此一舉。但今年年初發(fā)生的一次升級(jí)事故徹底改變了我的想法。那天我準(zhǔn)備裝一個(gè) Python 工具鏈習(xí)慣性地先跑了一遍brew update brew upgrade想順手把系統(tǒng)里的包都更新到最新。結(jié)果沒(méi)留意到上周為了調(diào)試某個(gè)服務(wù)用brew tap加了好幾個(gè)第三方倉(cāng)庫(kù)這次升級(jí)直接把一個(gè)依賴底層的庫(kù)從 3.x 拉到了 4.x導(dǎo)致三個(gè)正在跑的項(xiàng)目啟動(dòng)直接失敗。等我去brew list --versions里翻舊版本號(hào)試圖回滾的時(shí)候已經(jīng)徹底忘了當(dāng)初是哪些包被一起升級(jí)了。折騰了大半天最后只能一個(gè)個(gè)對(duì)著官方倉(cāng)庫(kù)的發(fā)布記錄找兼容版本。那之后我開始反思Homebrew 本身是個(gè)優(yōu)秀的包管理工具但它所有的信息都藏在命令行輸出里像哪些包很久沒(méi)更新了哪些包依賴了同一個(gè)底層庫(kù)哪些倉(cāng)庫(kù)占用了大量磁盤空間這類問(wèn)題brew list、brew outdated的輸出對(duì)新手甚至對(duì)老手都很不友好。這時(shí)候我找到了 BrewUI——一個(gè)把 Homebrew 常用操作封裝成圖形界面的開源工具。BrewUI 解決的痛點(diǎn)很直接它把brew list、brew outdated、brew upgrade、brew cleanup、brew services這些高頻命令全部變成可視化的窗口和按鈕。你不需要記住命令參數(shù)不需要在一大段終端輸出里找信息打開界面就能看到當(dāng)前系統(tǒng)里安裝了哪些軟件包、哪些有更新、哪些占空間最大、哪些服務(wù)正在運(yùn)行。對(duì)于剛接觸 macOS 開發(fā)環(huán)境、或者不想跟命令行較勁的人來(lái)說(shuō)這個(gè)工具能省掉大量學(xué)習(xí)成本對(duì)于我這樣的老用戶它則是一個(gè)很好的系統(tǒng)體檢儀表盤讓我在批量操作之前先看清楚全局狀態(tài)。我把這個(gè)思路整理下來(lái)給同樣在 macOS 上做開發(fā)、或者日常用 Homebrew 管理軟件的朋友一個(gè)參考。下面這幾部分我會(huì)從安裝環(huán)境、界面操作、底層原理、實(shí)際踩坑、工具對(duì)比這幾個(gè)角度完整聊聊 BrewUI 到底值不值得裝、你該怎么用。2. BrewUI 的安裝與環(huán)境準(zhǔn)備不止是下載一個(gè) App安裝 BrewUI 本身不難但我在幫兩個(gè)同事裝的時(shí)候發(fā)現(xiàn)很多人卡住的點(diǎn)不在下載而在前置環(huán)境沒(méi)準(zhǔn)備好。要是上來(lái)就雙擊運(yùn)行然后報(bào)錯(cuò)第一反應(yīng)往往是這工具真爛其實(shí)問(wèn)題大半出在 Homebrew 本身。2.1 安裝前必須先確認(rèn)的事BrewUI 的本質(zhì)是一個(gè)圖形化前端它自己不維護(hù)軟件源、不下載軟件包所有實(shí)際工作都是調(diào)用系統(tǒng)里現(xiàn)有的 Homebrew 命令行工具完成的。所以安裝 BrewUI 前第一件事是確認(rèn)你的 macOS 上已經(jīng)裝好了 Homebrew而且是能正常工作的狀態(tài)。打開終端Terminal先跑這幾個(gè)命令自檢brew --version brew doctor which brewbrew --version能看到 Homebrew 的版本號(hào)。brew doctor是 Homebrew 自帶的環(huán)境體檢命令它會(huì)檢查路徑配置、權(quán)限、Xcode 命令行工具是否齊全等如果有紅色警告Warning甚至Error建議先處理完再裝 BrewUI不然圖形界面里操作時(shí)一樣會(huì)炸。which brew則是為了確認(rèn) brew 的可執(zhí)行文件路徑——這一步特別重要后面 BrewUI 能否找到 brew 就靠它了。還需要確認(rèn) Xcode Command Line Tools。Homebrew 編譯安裝很多軟件包時(shí)需要編譯器如果系統(tǒng)里沒(méi)有 CLTbrew install時(shí)通常會(huì)彈窗自動(dòng)安裝但 BrewUI 這種圖形界面里觸發(fā)安裝彈窗邏輯可能沒(méi)那么順暢。提前裝好能省很多事xcode-select --install這條命令在系統(tǒng)已裝有 CLT 時(shí)會(huì)提示 command line tools are already installed那就直接跳過(guò)。最后看一眼 macOS 系統(tǒng)版本。BrewUI 這類持續(xù)維護(hù)的開源工具一般會(huì)跟緊新系統(tǒng)但如果你還在 macOS 10.15 Catalina 甚至更老的 Mojave 上下載前最好看一眼官方 Release 說(shuō)明里標(biāo)注的最低系統(tǒng)要求。我實(shí)測(cè)下來(lái)Big Sur 之后的系統(tǒng)體驗(yàn)最順暢。2.2 兩種安裝路徑對(duì)比BrewUI 的安裝主要有兩種方式我在不同機(jī)器上都試過(guò)第一種是直接去它的 GitHub Releases 頁(yè)面下載.dmg鏡像文件雙擊打開后把 BrewUI.app 拖進(jìn) Applications應(yīng)用程序文件夾。這個(gè)方式最直觀也最容易理解缺點(diǎn)是以后每次更新都要手動(dòng)去下載新版本。第二種是在終端里用 Homebrew 的 cask 方式安裝brew install --cask brewui這個(gè)方式的好處是以后能用brew upgrade --cask brewui一起更新。但這里存在一個(gè)邏輯上的雞生蛋問(wèn)題BrewUI 是管理 Homebrew 的工具如果你連 Homebrew 都還不會(huì)用、只是裝了它準(zhǔn)備安裝 BrewUI那圖形界面其實(shí)是你用命令行裝回來(lái)的。聽起來(lái)有點(diǎn)繞實(shí)際操作中倒也沒(méi)問(wèn)題——畢竟你既然要裝 BrewUI大概率已經(jīng)會(huì)brew --version了多敲一句安裝命令不算難。我個(gè)人在幾臺(tái)新機(jī)器上的習(xí)慣是先下載 dmg 拖進(jìn) Applications 挨個(gè)試功能確認(rèn)這工具順手之后再考慮 cask 統(tǒng)一管理。畢竟 GUI 工具的更新頻率不高手動(dòng)三五周更新一次完全來(lái)得及。2.3 常見安裝報(bào)錯(cuò)的排查邏輯安裝 BrewUI 最容易遇到的第一道坎是 macOS 的 Gatekeeper 安全機(jī)制。因?yàn)?BrewUI 是開源社區(qū)項(xiàng)目沒(méi)有花錢做 Apple 開發(fā)者賬號(hào)的公證Notarization第一次打開時(shí)會(huì)提示無(wú)法打開因?yàn)?Apple 無(wú)法檢查其是否包含惡意軟件。這時(shí)候不要急著去系統(tǒng)設(shè)置里關(guān)掉 Gatekeeper那是把整個(gè)安全屏障都拆了。正確的做法是右鍵點(diǎn)擊應(yīng)用圖標(biāo)選擇打開然后在彈窗里再點(diǎn)一次打開。這個(gè)操作只對(duì)這個(gè) App 放開一次限制后續(xù)啟動(dòng)就不需要重復(fù)了。裝好后雙擊啟動(dòng)如果界面里一直提示找不到 Homebrew大概率是 brew 的路徑?jīng)]被正確識(shí)別。常見的坑有兩個(gè)一是 Intel Mac 上 Homebrew 裝在/usr/local/bin/brewApple SiliconM1/M2/M3上裝在/opt/homebrew/bin/brew。BrewUI 一般會(huì)自動(dòng)探測(cè)這兩個(gè)經(jīng)典路徑但你如果用了自定義安裝目錄它就可能找不到。二是 GUI 應(yīng)用默認(rèn)不會(huì)加載用戶 shell 配置文件里的環(huán)境變量比如.zshrc里額外加的 PATH萬(wàn)一你之前把 brew 路徑改過(guò)圖形界面里就跟終端里看到的不一致。碰到這類問(wèn)題去 BrewUI 的設(shè)置界面里看有沒(méi)有自定義 brew 路徑的選項(xiàng)手動(dòng)填上which brew輸出的完整路徑重啟應(yīng)用一般就正常了。如果工具本身沒(méi)有這個(gè)設(shè)置項(xiàng)不同版本功能有差異可以通過(guò)一個(gè)臨時(shí)手段解決在終端里直接執(zhí)行open -a BrewUI讓應(yīng)用繼承當(dāng)前 shell 的環(huán)境變量再啟動(dòng)。這種用命令行開 GUI的小技巧雖然土但實(shí)測(cè)有效。3. 界面布局與核心操作第一次見面要怎么看BrewUI 裝好啟動(dòng)后很多人第一反應(yīng)是界面還挺清爽。詳情頁(yè)也好、列表頁(yè)也好用的都是 macOS 原生風(fēng)格那一套不像某些跨平臺(tái)框架套殼的軟件那么別扭。但正因?yàn)榻缑嫘畔⒚芏雀叩谝淮斡萌菀撞恢揽茨倪@里我把幾個(gè)核心區(qū)域拆開講一遍。3.1 頂部狀態(tài)欄與全局狀態(tài)一眼看懂 brew 體系狀態(tài)BrewUI 的主窗口頂部一般會(huì)有一個(gè)工具欄里面有刷新Refresh、升級(jí)全部Upgrade All、清理Cleanup這類快捷按鈕它旁邊通常還有個(gè)小狀態(tài)區(qū)會(huì)顯示當(dāng)前 Homebrew 是否是最新狀態(tài)、有幾個(gè)包可更新、有幾個(gè)服務(wù)在運(yùn)行。這個(gè)全局狀態(tài)區(qū)是我最??吹牡胤健槭裁茨匾?yàn)樗喈?dāng)于給brew outdated、brew services list、brew doctor三個(gè)命令的結(jié)果做了個(gè)可視化摘要。以前我在終端里要看系統(tǒng)更新情況得先跑brew update再跑brew outdated輸出一大串還得自己去區(qū)分哪些是 formula命令行工具庫(kù)、哪些是 cask圖形界面應(yīng)用、哪些是服務(wù)。在 BrewUI 里這些信息是按類別分好組顯示的哪個(gè)模塊有問(wèn)題一眼就能定位。關(guān)于刷新按鈕我要多說(shuō)一句它執(zhí)行的不只是 UI 刷新背后通常還帶著brew update邏輯也就是會(huì)先從遠(yuǎn)端拉取 Homebrew 倉(cāng)庫(kù)的最新索引。所以點(diǎn)了刷新之后如果卡個(gè)十幾秒不是在轉(zhuǎn)圈玩是真的在從 GitHub 同步數(shù)據(jù)耐心等就好。3.2 formula 與 cask 視圖的差異別把兩種軟件包搞混Homebrew 里有兩類東西一類叫 formula通常翻譯成軟件包是命令行工具比如git、python、wget它們裝在系統(tǒng)目錄里另一類叫 cask是完整的圖形界面應(yīng)用比如 Chrome、VS Code、微信它們會(huì)被裝進(jìn) Applications 文件夾。BrewUI 在主界面左側(cè)會(huì)把這兩類分開展示你可以在已安裝、可更新、所有可用這幾個(gè)視圖之間切換。這個(gè)區(qū)分非常重要。很多人拿到 BrewUI 后點(diǎn)進(jìn)可更新列表發(fā)現(xiàn)里面既有 formula 也有 cask如果直接點(diǎn)升級(jí)全部那 cask 類型的更新會(huì)直接替換你正在用的 GUI 應(yīng)用版本——比如正在開著的瀏覽器、IDE 可能被迫退出重啟。所以在批量更新之前我習(xí)慣先切到對(duì)應(yīng)的分類標(biāo)簽下看清楚這一批次更新的都是些什么再?zèng)Q定是全部升級(jí)還是擇一部分升級(jí)。在包列表中每個(gè)條目會(huì)顯示當(dāng)前版本號(hào)和可更新到的目標(biāo)版本號(hào)點(diǎn)擊條目進(jìn)入詳情頁(yè)還能看到更完整的信息安裝路徑、依賴了哪些包、被哪些包依賴、安裝時(shí)間、說(shuō)明文檔等。說(shuō)實(shí)話brew info在終端里也能打出這些內(nèi)容但 BrewUI 把依賴關(guān)系做成了可點(diǎn)擊的關(guān)聯(lián)列表順著鏈條翻出去非常清晰。3.3 高頻操作更新索引、升級(jí)包、清理磁盤空間天天用 BrewUI最核心的操作其實(shí)就是三個(gè)更新索引、升級(jí)軟件包、清理磁盤空間。更新索引對(duì)應(yīng)的是brew update點(diǎn)擊刷新就能完成。升級(jí)單個(gè)包的話在包列表勾選目標(biāo)包點(diǎn)升級(jí)即可升級(jí)全部就是工具欄上的Upgrade All。清理磁盤空間對(duì)應(yīng)brew cleanup它會(huì)刪除軟件包的歷史版本、緩存下載文件等。我每次操作前都強(qiáng)制自己先刷新再看列表因?yàn)?Homebrew 的索引不更新你看到的最新版本是過(guò)期的。反正 BrewUI 把刷新做成了一個(gè)按鈕成本低養(yǎng)成習(xí)慣之后終端里那種先 update 再 outdated 再 upgrade的三連也就順手遷移到圖形界面里了。這里要特別提醒一件事不要一上來(lái)就點(diǎn)Upgrade All。命令行里跑brew upgrade是一次性處理所有包BrewUI 的 Upgrade All 也是一樣的邏輯。但一個(gè)交互式界面給了你勾選的空間你就應(yīng)該利用起來(lái)。我見過(guò)不止一個(gè)人因?yàn)闊o(wú)腦 Upgrade All把系統(tǒng)里某個(gè)舊版工具鏈給升級(jí)壞了最后還得費(fèi)勁回滾。圖形界面的核心價(jià)值是讓你在操作前看得更清楚而不是讓你更草率地批量操作。4. BrewUI 背后做了什么從按鈕到底層命令BrewUI 不是包管理器它只是一個(gè)遙控器。理解它怎么工作能幫你判斷出問(wèn)題時(shí)去哪里排查而不是只會(huì)點(diǎn)按鈕。4.1 它本質(zhì)上是命令行封裝器BrewUI 的核心機(jī)制是在圖形界面里封裝了對(duì) brew 命令行工具的調(diào)用。你點(diǎn)擊升級(jí)某個(gè)包程序?qū)嶋H執(zhí)行的還是brew upgrade 包名你點(diǎn)擊清理它執(zhí)行的是brew cleanup你查看某個(gè)服務(wù)的狀態(tài)背后跑的是brew services list。也就是說(shuō)BrewUI 就像一個(gè)翻譯器把圖形操作翻譯成終端命令再執(zhí)行。這個(gè)設(shè)計(jì)有一個(gè)巨大的好處它永遠(yuǎn)不需要自己去模擬 Homebrew 的安裝邏輯。Homebrew 的升級(jí)、編譯、依賴解析機(jī)制極其復(fù)雜任何 GUI 想完全復(fù)制一套都是吃力不討好。直接調(diào)用原生命令問(wèn)題少、兼容性好Homebrew 更新了新功能BrewUI 只要稍作適配就能支持。但壞處也很直接寬松地講BrewUI 的安全邊界等于 Homebrew 的安全邊界。如果你在 BrewUI 里批量升級(jí)了某個(gè)帶惡意腳本的第三方包它和你在終端里跑同樣命令的危險(xiǎn)程度是一樣的。圖形界面不會(huì)自動(dòng)幫你消毒。4.2 權(quán)限處理機(jī)制什么時(shí)候會(huì)彈密碼框不少人在使用中會(huì)遇到一個(gè)問(wèn)題在 BrewUI 里安裝或升級(jí)某些 cask 應(yīng)用時(shí)會(huì)突然彈出系統(tǒng)級(jí)的管理員密碼驗(yàn)證框。這不是 BrewUI 的 bug而是因?yàn)槟承?cask 應(yīng)用的安裝包比如 pkg 格式的安裝器必須以 root 權(quán)限執(zhí)行安裝腳本BrewUI 本身沒(méi)有安裝器進(jìn)程那么高的權(quán)限所以會(huì)借道系統(tǒng)授權(quán)。理解這個(gè)邏輯后遇到彈密碼框就不用慌看清楚是誰(shuí)在要權(quán)限——是系統(tǒng)的Installer進(jìn)程還是 BrewUI 自身——再?zèng)Q定是否輸入密碼。正常的 cask 安裝需要這個(gè)授權(quán)是合理的。但我建議盡量少用管理員權(quán)限亂裝東西裝之前先在詳情頁(yè)看看這個(gè) cask 的安裝方式如果是基于 pkg 安裝器的老式應(yīng)用要有點(diǎn)心理預(yù)期。brew services相關(guān)的操作有時(shí)也會(huì)觸發(fā)權(quán)限驗(yàn)證因?yàn)榉?wù)啟動(dòng)后要常駐后臺(tái)。如果只是查看服務(wù)狀態(tài)一般不需要密碼啟動(dòng)、停止服務(wù)時(shí)則可能觸發(fā)。4.3 日志與狀態(tài)刷新邏輯卡住了怎么查前面提到BrewUI 刷新時(shí)實(shí)際上先跑brew update這個(gè)過(guò)程的耗時(shí)波動(dòng)很大——快的時(shí)候幾秒慢的時(shí)候可能超過(guò)一分鐘。為什么因?yàn)?Homebrew 的倉(cāng)庫(kù)源默認(rèn)托管在 GitHub 上網(wǎng)絡(luò)狀況直接決定速度。在實(shí)際使用中如果刷新卡在一個(gè)狀態(tài)超過(guò)兩分鐘大概率是網(wǎng)絡(luò)連接問(wèn)題或者 Homebrew 本身的并發(fā)鎖被占用了。BrewUI 通常會(huì)提供日志面板或者把日志寫到特定目錄例如~/Library/Logs/BrewUI/或類似位置不同版本有所不同。出問(wèn)題時(shí)先去日志里翻一翻看看它卡在哪一步如果卡在Updating Homebrew...是網(wǎng)絡(luò)問(wèn)題換個(gè)時(shí)間段再試。如果卡在Already up-to-date之后的某個(gè)包上可能是那個(gè)包的源倉(cāng)庫(kù)響應(yīng)緩慢。如果有權(quán)限錯(cuò)誤的記錄回看 4.2 的權(quán)限說(shuō)明。另外一個(gè)容易忽略的點(diǎn)是并發(fā)鎖。Homebrew 有個(gè)機(jī)制同一時(shí)間只允許一個(gè)brew進(jìn)程執(zhí)行寫操作。如果你之前在終端里跑了一個(gè)長(zhǎng)時(shí)間運(yùn)行的brew install忘了等它結(jié)束再在 BrewUI 里點(diǎn)操作會(huì)提示等待鎖釋放。遇到這種情況別反復(fù)點(diǎn)按鈕先去終端查一下有沒(méi)有殘留的 brew 進(jìn)程ps aux | grep -E brew|ruby | grep -v grep有的話等它跑完或者確認(rèn)是殘留就直接kill掉。我遇到過(guò)好幾次是開的 iTerm 標(biāo)簽頁(yè)里跑著半截命令把整個(gè) brew 鎖死了關(guān)掉那個(gè)終端窗口或者終止對(duì)應(yīng)進(jìn)程后BrewUI 就立刻恢復(fù)正常。5. 真實(shí)使用中的幾個(gè)坑不是官方文檔會(huì)告訴你的工具本身寫得很靠譜但真實(shí)使用中總有些邊邊角角的狀況屬于沒(méi)踩過(guò)不知道踩過(guò)一次就記住的類型。這幾條是我在幾臺(tái)電腦上用了小半年踩出來(lái)的。5.1 環(huán)境變量與 PATH 路徑不一致文章前面提過(guò) GUI 應(yīng)用不讀 shell 配置的問(wèn)題這里我再展開講一個(gè)更隱蔽的場(chǎng)景如果你用mise、asdf這類工具管理語(yǔ)言運(yùn)行時(shí)版本比如 node、python你通常會(huì)在.zshrc里寫一段類似eval $(mise activate zsh)的配置。這些配置只對(duì)終端會(huì)話生效BrewUI 作為 GUI 應(yīng)用加載不到它們。帶來(lái)的具體影響是你在 BrewUI 里看到的某個(gè)依賴包版本、某個(gè)服務(wù)的啟動(dòng)環(huán)境可能和你在終端里實(shí)際使用的版本不完全一致。比如你在終端里用node -v看到的是 20.x但通過(guò) BrewUI 啟動(dòng)的服務(wù)可能調(diào)用了系統(tǒng)默認(rèn)的 node 18.x因?yàn)樗沫h(huán)境變量里沒(méi)有 mise 注入的那一套。我建議把 BrewUI 定位成一個(gè)純 Homebrew 管理工具別指望它幫你管理運(yùn)行時(shí)環(huán)境。碰到需要特定環(huán)境變量的服務(wù)還是回終端里用brew services或前臺(tái)啟動(dòng)不要強(qiáng)行塞給 GUI 處理。5.2 大環(huán)境下列表刷新慢的標(biāo)準(zhǔn)解法如果你brew list有幾百個(gè)包裝了十幾個(gè) tap 倉(cāng)庫(kù)BrewUI 首次啟動(dòng)加載列表時(shí)確實(shí)會(huì)慢一些。這是因?yàn)樗x取 Homebrew 的完整安裝信息還要從各個(gè) tap 目錄拉取可用的更新數(shù)據(jù)。網(wǎng)絡(luò)好的時(shí)候也就十幾秒網(wǎng)絡(luò)差的時(shí)候能磨蹭到一分鐘。我的應(yīng)對(duì)方案是日常使用中不要頻繁點(diǎn)刷新。因?yàn)樗⑿聞?dòng)作背后是brew update頻繁更新索引其實(shí)沒(méi)有必要。我一般一天只點(diǎn)兩三次刷新——開機(jī)后看一次下午工作前看一次晚上下班前收尾時(shí)再看一次。中間要操作某個(gè)具體包時(shí)直接用搜索功能定位不依賴全局列表刷新這樣體驗(yàn)會(huì)順暢很多。如果你打開 BrewUI 后長(zhǎng)列表滾動(dòng)明顯卡頓可以看看電腦內(nèi)存是不是吃緊了。BrewUI 加載完整包列表時(shí)會(huì)有一定的內(nèi)存占用老款 Mac 上表現(xiàn)明顯。實(shí)在影響使用的話去設(shè)置里看看有沒(méi)有關(guān)閉某個(gè)大倉(cāng)庫(kù)展示的選項(xiàng)或者直接清理掉那些早就不用的第三方 tapbrew tap | grep -v ^homebrew/core|^homebrew/cask | head -20把不用的倉(cāng)庫(kù) untap 掉界面加載和刷新都會(huì)快不少。5.3 與系統(tǒng)自帶軟件、競(jìng)品管理工具的沖突Homebrew 自己并不會(huì)管到系統(tǒng)預(yù)裝的軟件它管的是它自己裝的那部分。但 BrewUI 在界面上會(huì)列出 cask 程序而 macOS 自帶的一些應(yīng)用比如 Safari、快捷指令等是不會(huì)出現(xiàn)在列表里的——這沒(méi)問(wèn)題。容易出問(wèn)題的是你同時(shí)裝了多個(gè)軟件管理工具用了 Homebrew 又用 MacPorts或者裝了 Setapp、直接去官網(wǎng)下載 dmg 自己拖入 Applications 的應(yīng)用。BrewUI 在檢查有哪些 cask 應(yīng)用可更新時(shí)是跟 Homebrew 的數(shù)據(jù)庫(kù)對(duì)版本的。如果你某個(gè)應(yīng)用是從官網(wǎng)直接下載安裝的Homebrew 的數(shù)據(jù)庫(kù)里可能沒(méi)有它BrewUI 自然是不會(huì)展示的這不是它的問(wèn)題。反過(guò)來(lái)如果你某個(gè)應(yīng)用是之前用 Homebrew 安裝的后來(lái)你嫌舊又從官網(wǎng)下載 dmg 覆蓋安裝了一版新的此時(shí) Homebrew 數(shù)據(jù)庫(kù)里記錄的版本和實(shí)際版本可能出現(xiàn)差異BrewUI 會(huì)誤以為版本異常。出現(xiàn)這種情況時(shí)在終端里跑一下brew reinstall --cask 應(yīng)用名讓它重新對(duì)齊數(shù)據(jù)庫(kù)與真實(shí)安裝文件通常就恢復(fù)了。還有一類坑和brew services相關(guān)BrewUI 的服務(wù)標(biāo)簽頁(yè)能管理后臺(tái)服務(wù)但你如果在系統(tǒng)中用 launchd 手動(dòng)配置過(guò)同類服務(wù)BrewUI 展示的狀態(tài)可能和 launchd 實(shí)際狀態(tài)不同步。原則就是一類服務(wù)只用一種方式管別混著來(lái)。6. 和命令行及其他 GUI 工具對(duì)比BrewUI 到底適合誰(shuí)用文章寫到這里估計(jì)有人會(huì)問(wèn)那這個(gè)大按鈕工具到底比我直接敲命令強(qiáng)在哪是不是有點(diǎn)雞肋我用一個(gè)比較理性的態(tài)度來(lái)回答這個(gè)問(wèn)題。6.1 三個(gè)日常場(chǎng)景下的效率對(duì)比場(chǎng)景一查看已安裝包。終端里brew list輸出是一長(zhǎng)串純文字快速掃一眼還行想找某個(gè)包就得開搜索BrewUI 里列表有搜索框、有分類標(biāo)簽、有版本號(hào)基本上秒定位。場(chǎng)景二查看哪些包需要更新。終端里要跑brew outdated輸出格式還挺工整但只告訴你有新版不告訴你這個(gè)新版等了多久、是不是長(zhǎng)期不維護(hù)的坑包BrewUI 里能結(jié)合安裝時(shí)間、依賴關(guān)系看上下文。場(chǎng)景三批量升級(jí)。終端里brew upgrade一把梭中途想跳過(guò)某個(gè)包還得CtrlC再寫排除語(yǔ)法BrewUI 里勾選自己想升級(jí)的包再點(diǎn)按鈕精細(xì)程度完全不同。你說(shuō)終端是不是絕對(duì)不行當(dāng)然不是。老手用命令行速度一定快過(guò) GUI。但對(duì)如下兩種人來(lái)說(shuō)GUI 是實(shí)打?qū)嵉男侍嵘皇呛苌倥鼋K端、不記得命令參數(shù)的人二是電腦上軟件很多、需要定期整理的人。6.2 與同類圖形工具的能力對(duì)比Homebrew 的 GUI 管理工具不止 BrewUI 一個(gè)。以前比較有名的還有 Cakebrew但那個(gè)項(xiàng)目更新頻率已經(jīng)很低了對(duì) Apple Silicon 的支持完整性存疑。市面上也有包管理全家桶性質(zhì)的工具但往往功能冗雜、界面復(fù)雜。工具維護(hù)狀態(tài)功能覆蓋上手難度我的評(píng)價(jià)純命令行 Homebrew官方維護(hù)完整但門檻高高進(jìn)階用戶的最終歸宿BrewUI活躍日常高頻操作全覆蓋低目前我用得最順手的Cakebrew 等老牌 GUI更新偏慢基礎(chǔ)操作低新機(jī)器上不太推薦了系統(tǒng)設(shè)置/App Store系統(tǒng)自帶只覆蓋自家應(yīng)用低和 Homebrew 生態(tài)無(wú)關(guān)可能還有人會(huì)提一些帶 AI 特性的終端工具它們能幫你自然語(yǔ)言生成 brew 命令。但請(qǐng)注意那些工具定位在幫你寫命令本身不維護(hù)狀態(tài)視圖。BrewUI 的核心優(yōu)勢(shì)是狀態(tài)的可視化兩者解決的問(wèn)題不一樣不是非此即彼。我自己就在終端里用別名簡(jiǎn)化日常命令同時(shí)把 BrewUI 掛在后臺(tái)當(dāng)監(jiān)控面板用完全沒(méi)有沖突。6.3 我個(gè)人的選擇GUI 看全局命令行做精準(zhǔn)操作經(jīng)過(guò)這段時(shí)間的混合使用我最終形成的習(xí)慣是BrewUI 負(fù)責(zé)每天開機(jī)后給我體檢報(bào)告——哪些包可更新、哪個(gè)服務(wù)掉線了、磁盤緩存要不要清理一看便知真正決定升級(jí)某個(gè)包之前還是會(huì)回到終端里跑brew info 包名看一下這個(gè)包的具體變更記錄、dependencies 變化確認(rèn)不會(huì)牽一發(fā)動(dòng)全身再動(dòng)手。這個(gè)習(xí)慣的形成本質(zhì)上是因?yàn)槲蚁肭宄艘粋€(gè)道理工具是為人服務(wù)的不是為用哪個(gè)顯得專業(yè)服務(wù)的。BrewUI 把 Homebrew 的全局狀態(tài)從一堆需要記憶的命令輸出變成了一目了然的窗口這就是它最大的價(jià)值。命令行很好但沒(méi)有必要事事都用命令行。最后再分享一個(gè)小經(jīng)驗(yàn)裝好 BrewUI 后第一次使用先別急著批量操作。用兩三天時(shí)間只看不改讓自己熟悉界面上那些數(shù)字、標(biāo)簽、狀態(tài)的日常波動(dòng)范圍。等你習(xí)慣了什么狀態(tài)是正常的、什么狀態(tài)是異常的再開始用它做批量升級(jí)和清理你會(huì)發(fā)現(xiàn)自己比原來(lái)在終端里操作時(shí)更有掌控感。這大概就是圖形界面工具存在的最實(shí)在的意義了。