brew cleanup 用法:清除 Mac 的 Homebrew 快取與舊版本
AskClean 團隊 · 更新於 2026-11-02
動手前先執行 brew cleanup -n 預覽。一般的 brew cleanup 會移除陳舊的鎖定檔、過期的下載檔與舊版 formula;除非設定了 HOMEBREW_NO_AUTOREMOVE,全域的 cleanup 也會解除安裝已經沒有其他套件需要的依賴。-s(--scrub)清得更多:連最新版本的快取下載檔也會刪除,例如下載過卻沒安裝、或後來已經移除的套件。不管加不加 -s,仍安裝著的套件,其下載檔都會保留。用 brew --cache 確認目前的快取位置,也不要手動刪除已安裝的軟體、設定或使用者資料。

下載快取、舊 keg 與目前的工具要分開看
Homebrew 的下載快取預設在 ~/Library/Caches/Homebrew,但 HOMEBREW_CACHE 可以改變位置,應以 brew --cache 的結果為準。formula 依版本安裝成 keg,位於 brew --cellar;cask 的記錄位於 brew --caskroom;目前使用中的版本通常透過 brew --prefix 底下的連結存取。下載檔通常可以重新取得,舊 keg 的確切版本卻可能無法復原。目前安裝的軟體、Brewfile、dotfiles、服務狀態、憑證與專案資料都不是快取。
從唯讀預覽開始
先用 du -sh "$(brew --cache)" 測量實際的下載快取,再執行 brew cleanup -n,逐項檢查過期的下載檔、舊版 formula,以及列在「Would autoremove」底下、準備自動移除的依賴。用 brew list --versions 確認常用工具的目前版本與舊版本,判斷回復舊版的流程或寫死的路徑是否還依賴舊 keg。預演(dry run)只是預覽,不是備份;Homebrew 移除的項目不一定會進 macOS 的垃圾桶,上游也不一定還提供完全相同的版本。
- 執行 brew --cache,記下目前下載快取的實際路徑。
- 執行 du -sh "$(brew --cache)",在不修改任何資料的情況下測量大小。
- 執行 brew cleanup -n,檢查每個下載檔、舊版 formula 與準備自動移除的依賴;再用 brew list --versions 核對重要工具。
- 決定要用一般的 brew cleanup、只針對單一套件的 brew cleanup <name>,或先預演再執行 brew cleanup -s 或 brew cleanup --prune=all;想保留依賴時,在預演與實際指令前都加上 HOMEBREW_NO_AUTOREMOVE=1。
- 重新執行 brew cleanup -n 與 du -sh "$(brew --cache)",確認目前使用的 formula 版本仍在,並測試一個重要的指令。
brew autoremove --dry-run 是選用、唯讀的檢查。真正的 brew autoremove,以及沒有設定 HOMEBREW_NO_AUTOREMOVE 時的全域 brew cleanup,都會解除安裝依賴,可能立刻中斷 Homebrew 看不到的指令碼或本機服務;只想清除下載快取時,不必另外執行 autoremove。
依可接受的復原成本選擇 cleanup 範圍
核對 brew cleanup -n 後,執行 brew cleanup 做一般的保守維護:目前預設把超過 120 天的下載檔列為候選,也會移除舊版 formula。若不想讓 cleanup 順便移除沒用到的依賴,就在預演與實際指令前都加上 HOMEBREW_NO_AUTOREMOVE=1,例如 HOMEBREW_NO_AUTOREMOVE=1 brew cleanup -n。-s(--scrub)會把最近的下載檔也納入清理:沒有安裝的套件(下載過卻沒安裝的,或後來已移除的),連最新版本的快取下載檔都會刪除,但已安裝 formula 與 cask 的下載檔仍會保留;-s 指的是 --scrub,不是「safe」或「silent」,也不會清空整個快取,請先用 brew cleanup -n -s 預覽。只處理單一套件時,先用 brew cleanup -n <name>,再用 brew cleanup <name>,不要把角括號照貼。只有願意讓所有快取日後重新下載時,才先預演 brew cleanup -n --prune=all,再執行 brew cleanup --prune=all;它不會解除安裝目前的套件,但仍包含一般 cleanup 的舊版本清理。
保護已安裝的軟體,並驗證復原方式
brew autoremove 會解除安裝 Homebrew 判定已不再需要的依賴,不是快取清理;而且除非設定了 HOMEBREW_NO_AUTOREMOVE,全域的 brew cleanup 本身就會執行同樣的移除。若要另外處理,先單獨執行 brew autoremove --dry-run,確認指令碼、建置系統或服務沒有直接使用這些 formula。絕不要對 brew --prefix、brew --cellar 或 brew --caskroom 的輸出執行大範圍的 rm -rf,也不要為了清 Homebrew 就刪掉整個 ~/Library/Caches——那裡還有許多其他 App 的快取。清理後重新執行 brew cleanup -n、du -sh "$(brew --cache)" 與 brew list --versions,並測試重要的指令。AskClean 可以把整個 Homebrew 快取列為一個項目,經你確認後永久刪除,但不會清理 Cellar 裡的舊 keg;只有 Homebrew 本身能依套件狀態判斷哪些舊版本可以清。
清理決策與風險對照
brew cleanup 會刪掉什麼?先用 brew cleanup -n 預覽,弄懂 -s(--scrub)與 --prune=all 的差別,留意全域 cleanup 也會自動移除用不到的依賴,再安全清除 Homebrew 快取與舊版本。
| 項目或操作 | 檢查位置 | 刪除後果 |
|---|---|---|
| 下載快取、舊 keg 與目前的工具要分開看 | brew --cache | Homebrew 的下載快取預設在 ~/Library/Caches/Homebrew,但 HOMEBREW_CACHE 可以改變位置,應以 brew --cache 的結果為準。 |
| 從唯讀預覽開始 | brew cleanup -n | 先用 du -sh "$(brew --cache)" 測量實際的下載快取,再執行 brew cleanup -n,逐項檢查過期的下載檔、舊版 formula,以及列在「Would autoremove」底下、準備自動移除的依賴。 |
| 依可接受的復原成本選擇 cleanup 範圍 | brew cleanup / brew cleanup -s / brew cleanup --prune=all | 核對 brew cleanup -n 後,執行 brew cleanup 做一般的保守維護:目前預設把超過 120 天的下載檔列為候選,也會移除舊版 formula。 |
| 保護已安裝的軟體,並驗證復原方式 | brew autoremove --dry-run(不是快取清理) | brew autoremove 會解除安裝 Homebrew 判定已不再需要的依賴,不是快取清理;而且除非設定了 HOMEBREW_NO_AUTOREMOVE,全域的 brew cleanup 本身就會執行同樣的移除。 |
常見問題
brew cleanup 在 Mac 上安全嗎?
它是 Homebrew 支援的維護指令,但請先用 brew cleanup -n 預覽。它會移除過期的下載檔、已安裝 formula 的舊版本;除非設定了 HOMEBREW_NO_AUTOREMOVE,也會移除已經沒有人需要的依賴。執行前請確認沒有任何流程依賴舊 keg 或清單上的依賴。
brew cleanup -s 和 --prune=all 會刪什麼?
--prune=all 會不分檔案年齡清除快取檔;-s(--scrub)則連最新版本的快取下載檔也會清除——對象是沒有安裝的套件,例如下載過卻沒安裝、或後來已移除的;你仍安裝著的 formula 與 cask,其下載檔會保留。兩者都還包含一般 cleanup 對陳舊鎖定檔與舊版 formula 的清理。請先用 brew cleanup -n -s 或 brew cleanup -n --prune=all 預覽,並準備好之後重新下載。
brew cleanup 之後還要執行 brew autoremove 嗎?
通常不需要:除非設定了 HOMEBREW_NO_AUTOREMOVE,全域的 brew cleanup 已經會執行同樣的移除。如果要單獨執行,先跑 brew autoremove --dry-run。autoremove 會解除安裝 Homebrew 認為已不再需要的依賴 formula;它不會清除下載快取,還可能移除你的指令碼直接使用的工具。
參考來源