解除安裝 Homebrew 前,先把套件清單留下來
Homebrew 提供官方解除安裝工具,而且它確實會做到它所說的事。意外之處在於範圍:它會移除 Homebrew,也會移除 Homebrew 所安裝的內容,而這兩件事,會依你來這裡的原因而有完全不同的重量。
若你是為了回收磁碟空間而來,這通常是大多數開發者 Mac 上單次回收量最大的一項。若你只是因為某個 formula 出問題,這遠比你需要的還多。
官方解除安裝程式
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
執行前請先讀完腳本。它不長,而且是即將發生之事的權威說明,這比任何文章都更有資格下定論。
它支援 --dry-run,在你在意的機器上,這才是正確的第一次呼叫:它會列出將被刪除的內容,且不做任何變更。
腳本實際會刪除什麼
解除安裝工具會移除 Homebrew 的 prefix 及其底下目錄: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 管理的應用程式。
移除前先記錄你已安裝的項目
清單在之後無法還原,而取得它只需要一條指令:
brew leaves > ~/Desktop/brew-formulae.txt
brew list --cask > ~/Desktop/brew-casks.txt
brew leaves 列出的是你明確安裝的 formula,而不是背後一併拉進來的每一個相依套件,這才是重建時真正需要的清單。在新機器上,這兩個檔案能把一整天的回想,變成一行 brew install。
套件存放在自身目錄之外的東西會留下來,也值得保留:Postgres 的資料目錄、位於 /opt/homebrew/var 底下的本機資料庫、家目錄裡的設定。解除安裝工具會移除 prefix 底下的 var,所以住在那裡的資料庫也會一起消失。若它很重要,請先複製出去。
結尾那段常被滑過的訊息
腳本結束時,可能會印出部分可能屬於 Homebrew 的檔案未被刪除,以及你或許想自行移除它們,後面跟著路徑清單。
那些路徑只會在那裡被點名。通常是因為 Homebrew 未建立的目錄權限問題,清單也不長。關掉終端機之前先複製起來,因為在已經移除的安裝上重跑解除安裝工具,不會再產生這份清單。
你的 shell 設定檔仍提及它
解除安裝工具不會編輯 .zprofile、.zshrc 或 .bash_profile。你在安裝時加入的 eval
"$(/opt/homebrew/bin/brew shellenv)" 那一行會留著,之後每一個新 shell 都會試著執行一個已經不存在的二進位檔。
這無害,但很吵。刪掉那一行即可;若你打算重裝,也可以先留著。
先想想你是否其實只需要較小的操作
多數想解除安裝 Homebrew 的理由,其實用更窄的操作就夠了。brew
cleanup 會回收舊版本與已快取的下載。brew uninstall <formula> 只移除單一項目。brew autoremove 會清掉已無人需要的相依套件。無論你跑哪一個,Mole 都能顯示 prefix 在操作前後的體積,而這個數字,才決定完整移除是否真有必要。
從匯出清單重建
一旦在新機器上安裝好 Homebrew,以下兩道指令就能還原你原本的環境:
xargs brew install < brew-formulae.txt
xargs brew install --cask < brew-casks.txt
兩者必須分開執行,因為 cask 需要加上 --cask;若混在同一份清單,會有半數項目安裝失敗。
這套做法能成立,關鍵在用 brew leaves 而不是 brew list。brew list 會把相依套件也列進去,若照這份清單重裝,等於明確安裝數百個本來會自動帶入的套件;之後 brew autoremove 也不會再清理它們,因為你是用名稱點名安裝的。brew leaves 只回傳你實際安裝過的項目,相依關係則交給 Homebrew 處理。