Mac 上用 brew cleanup 與 autoremove 清理 Homebrew
Homebrew 會在安裝和升級時清理相關舊版本,也會定期執行全域清理,長期使用後,下載快取、固定版本、建置產物和舊依賴仍可能累積。手動刪除目錄會繞過 Homebrew 的版本與依賴紀錄,用它自己的指令檢視和清理會更穩妥。
Homebrew 會留下什麼
- 舊版本: cleanup 通常會刪除被取代版本,但固定或剛升級的版本可能繼續保留一段時間
- 下載封存: bottle 與 cask 下載會進入快取,避免再次下載
- 未使用依賴: 目前 cleanup 和 uninstall 通常會自動移除不再需要的 formula 依賴。舊安裝、中斷操作或關閉自動移除後仍可能有殘留
檢視快取位置和大小:
brew --cache
du -sh "$(brew --cache)" 2>/dev/null
先預覽,再清理
以下是實際執行清理的指令,先不要執行,先看後面的預覽步驟:
brew cleanup
目前 Homebrew 手冊說明,一般 cleanup 預設移除舊安裝版本和超過 120 天的下載,HOMEBREW_CLEANUP_MAX_AGE_DAYS 可以調整保留時間。先用 -n 預覽。-s 會更深入地清理快取,但仍保留目前已安裝 formula 和 cask 所需的下載:
brew cleanup -n
brew cleanup -s
想單獨檢查未使用的相依套件時,先執行以下第一條預覽,確認列出的套件沒有被自己的腳本或專案直接使用,再單獨執行第二條刪除:
brew autoremove --dry-run
brew autoremove
brew list 列出已安裝套件,brew outdated 顯示待更新項目,brew --cellar、brew --caskroom 和 brew --cache 則會回傳實際路徑。Intel 與 Apple 晶片的安裝位置不同,寫死 /opt/homebrew 容易找錯目錄。
分開測量三個儲存區
一個總數會掩蓋三種不同決策。清理前先記錄已安裝 formula、cask 中繼資料和下載快取各占多少:
du -sh "$(brew --cellar)" "$(brew --caskroom)" "$(brew --cache)" 2>/dev/null
快取大最容易回收,因為 Homebrew 可以重新下載。Cellar 大多是已安裝軟體,cleanup 只能移除被取代的版本。Caskroom 很大也不表示 App 本體在那裡,cask App 通常位於 /Applications。清理後再執行同一命令,確認究竟哪一處變小。
安全來自版本與依賴紀錄
Homebrew 的清理讀的是自己的版本與依賴紀錄,比手動刪除 Cellar 目錄可控得多,但可控不等於沒有代價,留著回復用的舊版本或準備離線安裝的 bottle 都可能一起被清掉。brew cleanup 和 brew autoremove 各預覽一次,固定版本和關鍵工具鏈要主動留住。
為什麼不用 Finder 手動刪
Homebrew 會把 formula 的每個版本安裝到 brew --cellar 回傳的 Cellar,再把目前版本連結到前綴。升級時,新舊版本會先並存,然後作用中的連結才切換。cask 中繼資料位於 Caskroom,應用程式套件通常在 /Applications。下載則保存在 brew --cache 回傳的位置。
brew cleanup 會根據安裝版本、保留策略和依賴關係選擇對象,brew autoremove 只處理依賴判斷。它們比手動刪目錄安全,但仍可能移除用於回復的舊版本或離線安裝所需的 bottle,所以要先預覽,並有意保留固定版本與關鍵工具鏈。
其他工具應該停在哪裡
磁碟地圖可以找出 Homebrew 快取並顯示大小,Mole 也能展示這一類別,版本和依賴關係仍以 Homebrew 自己的紀錄為準,找到位置並不等於已經知道能否刪除。
安全的清理順序
路徑指令能說明各儲存實際有多大,brew cleanup -n 能預覽一般清理的候選項目;考慮 -s 時,也要替該模式加上預覽選項,重新確認範圍,不能把一般預覽當成更大範圍的刪除清單。相依關係可以單獨用 brew autoremove --dry-run 檢查,自動清理正常、磁碟空間充足時,沒有必要設定固定週期。