用官方腳本解除安裝 Homebrew,並先匯出清單
Homebrew 內建官方解除安裝腳本,行為與說明一致。真正要留意的是範圍:它會卸掉 Homebrew,也會卸掉經它裝上的一切,這兩件事的分量,取決於你為什麼來到這裡。
如果只是想騰出空間,先看看 Homebrew 實際占了多少再決定要不要卸。如果只是某個 formula 出了問題,不必把整套環境一起拆掉。
動手前先記下 brew leaves 與 cask 清單,再用 --dry-run 跑一遍官方解除安裝腳本,把輸出當成刪除計畫來讀。如果問題只在某一個套件,到這裡就該停下來,改用 brew uninstall,或走更安全的 Homebrew 清理路徑。
什麼時候不該解除安裝 Homebrew
下面這些情況,先別上「核選項」:
- 只是某一個 formula 或 cask 壞了:用
brew uninstall <name>,相依成孤兒後再跑brew autoremove。 - 只是缺空間:
brew cleanup -s能清掉舊版本與下載快取,不會刪掉安裝前綴。 - 你還需要來自 Homebrew 的
git、node、python、資料庫服務或命令列工具。解除安裝腳本會連 Cellar 與 Caskroom 一起帶走。 - 你打算明天在同一台 Mac 上重裝同一套工具。先匯出下面的清單,用
brew cleanup清理,保留安裝本身。
真正該解除安裝的時候,是你準備徹底離開 Homebrew、在壞掉的安裝之後遷到乾淨前綴,或清掉一台不再需要那些套件的機器。
先認清前綴:Intel、Apple Silicon 與 Rosetta 殘留
Homebrew 的預設前綴取決於晶片:
| Mac | 預設前綴 | brew 二進位 |
|---|---|---|
| Apple Silicon | /opt/homebrew |
/opt/homebrew/bin/brew |
| Intel | /usr/local |
/usr/local/bin/brew |
刪任何東西之前,先確認自己真正用的是哪一套:
uname -m
brew --prefix
which brew
arm64 是 Apple Silicon。x86_64 是 Intel(或 Rosetta 終端機)。從 Intel 遷過來的 Apple Silicon Mac 上,/usr/local 下的舊 Intel Homebrew 可能和 /opt/homebrew 並存。官方解除安裝腳本會找目前機器的預設前綴;在 arm64 上也會考慮 /usr/local,以免漏掉殘留的 Intel 前綴。如果你有意保留兩套前綴,請傳 --path,只卸你指定的那一套。
在 Intel 上不要整棵手動刪 /usr/local。那個目錄還和其他軟體共用。用官方腳本,它只動 Homebrew 自己的樹。
官方解除安裝腳本
Homebrew 的 FAQ 指向 Homebrew/install 倉庫裡的解除安裝腳本。若 Homebrew 日後改了命令,優先從那一頁複製。目前的一行命令是:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
想先讀腳本再跑,可以先下載:
curl -O https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh
less uninstall.sh
/bin/bash uninstall.sh --help
常用參數:
--dry-run(也可寫-n):只列印將刪除的內容,不做改動。在你在意的機器上,第一次呼叫就該從這裡開始。--path=PATH:指定前綴(例如 Apple Silicon 上遺留的 Rosetta 時代/usr/local)。--force:跳過確認提示(設定了NONINTERACTIVE時也會隱含啟用)。--skip-cache-and-logs:不動快取與日誌目錄。
別理舊的 mxcl gist,也別跟那些還在寫 cd $(brew --prefix) 再用 git ls-files 刪檔案的教學。那套流程面向早期 /usr/local 佈局,在現在的安裝上不安全。
腳本實際會刪掉什麼
解除安裝程式會移除 Homebrew 安裝前綴及其下的目錄:bin、etc、include、lib、opt、sbin、share、var、Frameworks,以及 Cellar 與 Caskroom。
後兩者才是關鍵。Cellar 裡是每個 formula 的檔案,Caskroom 裡是 cask 中繼資料。卸掉 Homebrew 等於一併卸掉它們,經它裝上的命令列工具會同時消失。
它還會清理 ~/Library/Caches/Homebrew 與 ~/Library/Logs/Homebrew、系統級 Homebrew 快取、/etc/paths.d/homebrew,以及 /Applications 與 ~/Applications 裡由 Homebrew 管理的 App。
動手前先記下已裝了什麼
解除安裝前先用這兩條命令匯出清單:
brew leaves > ~/Desktop/brew-formulae.txt
brew list --cask > ~/Desktop/brew-casks.txt
brew leaves 列出沒有被其他已裝 formula 或 cask 相依的 formula。它是有用的起點,但不是你曾經明確安裝過的完整紀錄。拿去重建環境前,先通讀這兩個檔案。
套件資料和套件檔案要分開看。家目錄裡的設定可能還在,但 /opt/homebrew/var 或 /usr/local/var 下的 Postgres 資料庫仍在 Homebrew 前綴裡。解除安裝腳本會刪掉 var,那裡的資料可能一起走。需要留下的資料,先備份到前綴之外。若在用服務,先停掉:
brew services list
brew services stop --all
可選:先卸 formulae 和 casks
如果你想分階段拆,而不是一次核刪,可以在 brew 還能用時先卸套件:
brew list --formula
brew uninstall --force $(brew list --formula)
brew list --cask
brew uninstall --cask --force $(brew list --cask)
brew autoremove
brew cleanup -s
這樣會清空 Cellar 與 Caskroom,但保留 Homebrew 安裝本身。適合你還不確定 var 下有沒有要留的資料,或只想騰出套件占用、稍後用更小的工具集繼續留著 brew。真正告別 Homebrew 時,仍要跑官方解除安裝腳本,把前綴、tap 與快取一併清乾淨。
執行解除安裝
- 先帶
--dry-run跑一遍,逐條核對路徑。 - 去掉
--dry-run再跑,提示時輸入y;若受保護目錄需要sudo,再輸入 macOS 密碼。 - 終端機若印出 “possible Homebrew files were not deleted” 一類清單,關掉視窗前先複製下來。
下載腳本後的預覽範例:
/bin/bash uninstall.sh --dry-run
若用遠端一行命令,也建議先下載再傳參數,避免引號套引號,然後執行 /bin/bash uninstall.sh。
殘留檔案核對清單
腳本結束時可能提示:部分可能屬於 Homebrew 的檔案未能刪除,建議你自行處理,並附上路徑清單。
這些路徑通常只在這裡出現一次。常見原因是 Homebrew 自己沒建立過的目錄權限不對,清單一般不長。關掉終端機前先另存一份,因為在已經卸乾淨的安裝上重跑解除安裝腳本,不會再打出這份清單。
典型殘留會落在你剛卸掉的前綴下:
- Apple Silicon:
/opt/homebrew/etc、share、var、Frameworks以及類似空目錄或權限殘缺的目錄 - Intel:
/usr/local下同名目錄,但絕不要憑猜測刪掉無關的/usr/local樹
若腳本點名了路徑,且你確認它只屬於 Homebrew,再明確刪除(-rf 後面要有空格):
sudo rm -rf /opt/homebrew/share
然後核對:
ls /opt/homebrew
ls /usr/local/Homebrew
ls ~/Library/Caches/Homebrew
ls ~/Library/Logs/Homebrew
這些位置消失後,預期會看到 “No such file or directory”。如果腳本已經跑完,而 /opt/homebrew 或某棵純 Homebrew 樹還在,通常再用 sudo rm -rf 刪那個路徑。按 Return 前再確認一遍路徑。
前綴之外的套件設定常常會故意留下:~/.gitconfig、語言版本管理器、~/Library 下的 App 支援目錄,以及你已經挪出 var 的資料庫。那些不屬於 Homebrew 前綴。只有在你清楚歸屬時再刪。
Shell 設定裡還在提它
解除安裝腳本不會改 .zprofile、.zshrc、.zshenv、.zlogin 或 .bash_profile。Homebrew 安裝器常會寫入類似這樣的行:
eval "$(/opt/homebrew/bin/brew shellenv)"
Intel Mac 的預設 PATH 已經包含 /usr/local/bin,很多安裝根本不需要這行。Apple Silicon 上則需要它才能找到 brew;解除安裝之後,每個新開的 shell 都會去跑一個已經不存在的二進位。
搜尋並刪掉 brew shellenv(以及你不再需要、自己加過的 /opt/homebrew/bin 或 /usr/local/bin PATH 匯出):
grep -n "brew shellenv\|/opt/homebrew\|/usr/local/bin" ~/.zprofile ~/.zshrc ~/.zshenv ~/.zlogin ~/.bash_profile ~/.bashrc 2>/dev/null
然後開一個新的終端機分頁。若警告消失,且 which brew 沒有任何輸出,PATH 就清理完了。只有打算立刻重裝時,才保留那一行。
常見失敗情形
殘留路徑權限被拒絕。 腳本列出了路徑卻刪不掉。對每個點名的路徑用 sudo rm -rf,-rf 和路徑之間要有空格。寫成 rm -rf/opt/... 會報 illegal option,因為路徑被當成了參數。
卸到一半 / 提示 “Homebrew is already installed”。 上一次嘗試留下了 .git、Cellar 或 bin/brew。用正確的 --path 再跑官方解除安裝腳本,或按腳本報告清掉殘留前綴;若還想用 Homebrew,再按官方安裝文件重裝。
清理做到一半後出現 brew: command not found。 要麼解除安裝已經完成、PATH 仍指向舊前綴(修 shell 那一行),要麼 brew 沒了但套件還在。別去追經典 gist。前綴目錄還在的話,用官方腳本加 --path。
Apple Silicon 上卸錯前綴。 你卸掉了 /opt/homebrew,但 Rosetta 時代的工具還在 /usr/local。確認那棵樹確屬 Homebrew、不是和其他軟體混在一起之後,再以 --path=/usr/local 跑腳本。
服務與登入項目還在呼叫已消失的二進位。 能停的話,解除安裝前先停 brew services。之後檢查「登入項目」以及仍引用 /opt/homebrew 或 /usr/local/Cellar 的 LaunchAgents。
舊部落格文章與 2011 年的 gist。 靠 git ls-files 和 pbcopy 刪除的指南屬於更早的 Homebrew 佈局。只認 https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh。
要不要先做更小的清理
更小的清理:brew cleanup 清舊版本與下載快取,brew uninstall <formula> 卸單一套件,brew autoremove 清掉不再需要的相依。在 Mole 的「分析」檢視 裡,清理前先掃一遍 Homebrew 目錄,清理後再掃一次,對比體積變化。Mole 不會自動追蹤這些命令帶來的變化。
用匯出的清單重建
新機器裝好 Homebrew 之後,兩條命令就能裝回原來的內容:
xargs brew install < brew-formulae.txt
xargs brew install --cask < brew-casks.txt
必須分開跑,因為 cask 需要 --cask,混在一起會有一半失敗。
brew list 會帶上相依,整份重放會把那些相依也標成明確安裝,之後 brew autoremove 能刪掉的東西就變了。brew leaves 能避開不少這種情況,但它也不等於「你當初點過名的安裝歷史」:你主動裝過的東西,也可能同時被別的套件相依。重裝前通讀清單,把還需要的工具補進去。
常見問題
解除安裝 Homebrew 會刪掉它裝過的全部套件嗎?
還在 Cellar 與 Caskroom 裡的會。官方腳本會移除前綴,formula 與 cask 中繼資料一起走。前綴之外的設定與資料可能留下。
/opt/homebrew 和 /usr/local 有什麼差別?
/opt/homebrew 是 Apple Silicon 的預設前綴。/usr/local 是 Intel 的預設前綴,遷過來的 Mac 上也可能還裝著舊的 Rosetta Homebrew。刪之前務必先看 brew --prefix。
跑解除安裝腳本前,要不要先卸掉每個 formula?
只有當你想分階段清理,或需要先檢查 var 裡的資料時才有必要。腳本本來就會清掉前綴裡已裝的套件。無論哪種做法,只要可能重裝,都先匯出清單。
為什麼解除安裝後還會留下目錄?
權限問題,或 Homebrew 自己沒建立過的目錄,都可能擋住刪除。腳本只會列印一次這些路徑。確認它們是 Homebrew 殘留後,再用 sudo 刪。
整棵 /usr/local 都能刪嗎?
不能。在 Intel Mac 上這個目錄是共用的。用官方解除安裝腳本,若還有殘留,只刪它點名的路徑。
每個新終端機都還在報 brew shellenv 錯誤,怎麼辦?
從 zsh 或 bash 的啟動檔裡刪掉 eval "$(...brew shellenv)" 那一行,再開一個新分頁。解除安裝腳本不會替你改這些檔案。