開發者磁碟清理

Cargo 快取和 target 資料夾有什麼不同?Rust 開發者該刪哪個

了解 Rust 專案 target 建置成果與 Cargo 相依套件快取的差異、哪些可以安全刪除,以及 .cargo 裡哪些內容不該當成快取清理

發布於 2026年8月12日作者: Harry
將 Rust 相依套件與專案建置成果分開檢查後再安全清理

需要騰出磁碟空間時,通常應該先清理已經不再使用的專案 target 資料夾。這裡存放的是個別 Rust workspace 的建置成果,之後重新編譯就能產生。只有在 Cargo 共用快取確實很大、內容損壞,或近期不需要離線開發時,才考慮清理相依套件快取;清掉之後,Cargo 必須重新下載或解壓縮套件。

不要直接刪除整個 .cargo 資料夾。裡面還可能有 Cargo 設定、registry 認證資料,以及透過 cargo install 安裝的命令列工具,這些都不是一般快取。

本文路徑與指令已於 2026 年 8 月 12 日在 macOS 15.7.7、Cargo 1.84.0、rustc 1.84.0 上驗證。Cargo 可以自訂 Home 與建置資料夾,刪除前請先確認自己電腦上的實際路徑。

先講結論:先清 target,再考慮 Cargo 快取

Cargo 會保存兩種性質不同、但都能重新產生的資料:

  • workspace 裡的 target 資料夾,存放該專案的編譯成果;
  • Cargo Home(通常是 ~/.cargo),存放共用下載、解壓縮後的套件原始碼、Git 相依套件、設定、認證資料與已安裝工具。

兩者的復原成本不同。刪除 target 主要會增加重新編譯的時間;刪除相依套件快取,除了重新編譯,還可能需要網路。因此對多數開發者來說,舊專案的 target 是更合理的第一個清理目標。

路徑內容可以刪除嗎?刪除後的影響
project/targetDebug、Release、增量編譯、文件與不同目標平台的建置成果可以,先停止建置專案需要重新編譯
~/.cargo/registry/cache已下載的 crate 壓縮檔通常可以,但要確定能連網Cargo 會重新下載缺少的 crate
~/.cargo/registry/src從 registry 解壓縮出的套件原始碼通常可以,但要確定能連網Cargo 會重新解壓縮或下載
~/.cargo/git/dbgit/checkoutsGit 相依套件的 repository 與 checkout通常可以,但要確定能連網Cargo 會重新抓取與 checkout
~/.cargo/bin透過 cargo install 安裝的工具不可當成快取刪除已安裝的指令會消失
config.tomlcredentials.tomlCargo 設定與 registry 認證資料不可以建置、registry、Proxy 或登入可能失效
Cargo.tomlCargo.locksrc專案定義、相依版本鎖定與原始碼不可以會直接破壞專案

Windows 的預設 Cargo Home 通常位於 %USERPROFILE%\.cargo。如果有設定 CARGO_HOME,不論使用哪個作業系統,都應以該環境變數指向的位置為準。

target 資料夾為什麼會變得這麼大?

Cargo 預設把建置輸出寫進 workspace 的 target 資料夾。Debug 與 Release profile 使用不同的子資料夾;加入其他編譯目標後,各個 target triple 也會保存自己的成果。增量編譯還會保留中間資料,讓後續建置更快。

如果同一個 workspace 會建置桌面程式、WebAssembly、多種架構或多組 feature,累積容量遠大於原始碼並不意外。Cargo 官方把這些內容視為可重新產生的建置資料,但刪除仍有代價:下一次建置會從沒有快取的狀態開始。

撰寫本文時,MangoDisk repository 的 target 佔了 27 GB。同一台 Mac 的 Cargo registry 壓縮檔快取為 189 MB、解壓縮後的原始碼為 1.9 GB,Cargo Git 資料庫則是 17 MB。這只是這台電腦的實測結果,不代表每個人都能釋放相同空間;重點是應該先量測,而不是預設全域快取一定最大。

清理前先確認實際路徑與容量

在 macOS 或 Linux 的 Rust workspace 中,可以先執行這些唯讀指令:

cargo_home="${CARGO_HOME:-$HOME/.cargo}"

du -sh target 2>/dev/null
du -sh "$cargo_home/registry/cache" "$cargo_home/registry/src" \
  "$cargo_home/git/db" "$cargo_home/git/checkouts" 2>/dev/null

Cargo 也可能使用自訂的 target 資料夾。下列指令會輸出 workspace metadata,其中包含實際的 target_directory

cargo metadata --no-deps --format-version 1

在 PowerShell 中,可以分別檢查目前專案與預設 Cargo Home:

$CargoHome = if ($env:CARGO_HOME) { $env:CARGO_HOME } else { Join-Path $HOME ".cargo" }

Get-ChildItem .\target -Recurse -File -Force -ErrorAction SilentlyContinue |
  Measure-Object Length -Sum
Get-ChildItem "$CargoHome\registry\cache" -Recurse -File -Force -ErrorAction SilentlyContinue |
  Measure-Object Length -Sum

PowerShell 會以位元組回報結果。更重要的是,這些檢查會讓你在刪除前再次確認正確位置。

如何安全清理專案 target 資料夾

先停止 cargo build、測試、正在編譯的 rust-analyzer 工作,以及從該 workspace 啟動的程式。接著預覽 Cargo 準備移除的內容:

cargo clean --dry-run -v

確認範圍正確後,清理目前 workspace 的完整 target 資料夾:

cargo clean

如果想保留仍有用的建置資料,可以縮小範圍:

# 只移除 Release profile 的建置成果
cargo clean --release

# 只移除產生的文件
cargo clean --doc

# 只移除 workspace 中某個 package 的建置成果
cargo clean -p your-package-name

cargo clean 會遵循 Cargo 設定的 target 位置。對使用自訂 target-dir 的 workspace 而言,這比直接假設資料夾一定是 ./target 更穩妥。

清理後資料夾再次出現很正常。下一次建置會重新建立它;因為增量編譯資料已經移除,第一次完整編譯通常會慢不少。

什麼時候才需要清理 Cargo 共用快取?

以下情況可以考慮清理:

  • 實際量測後,快取容量確實大到值得處理;
  • 下載的壓縮檔或 Git 相依套件已損壞;
  • 舊 toolchain 與專案留下近期不會再用的套件;
  • 現在必須騰出空間,而且之後有穩定網路能夠復原。

搭飛機前、需要離線工作,或公司內部 registry 可能暫時無法連線時,不建議清理。也要先確認團隊是否使用自訂 registry、vendored dependencies 或非預設的 CARGO_HOME

Cargo Home 官方文件把 registry 與 Git 相關內容視為可以透過重新解壓縮、checkout 或下載復原的快取。若決定手動刪除,請先結束 Cargo 相關程序,設定正確的 Cargo Home,並做最後一次檢查:

cargo_home="${CARGO_HOME:-$HOME/.cargo}"
du -sh "$cargo_home/registry/cache" "$cargo_home/registry/src" \
  "$cargo_home/git/db" "$cargo_home/git/checkouts" 2>/dev/null

接著只刪除自己明確選定的快取子資料夾:

rm -rf "$cargo_home/registry/cache" "$cargo_home/registry/src" \
  "$cargo_home/git/db" "$cargo_home/git/checkouts"

這個指令不會經過垃圾桶,絕對不要把它簡化成 rm -rf ~/.cargo。完成後,下一次連網建置可能需要重新下載並解壓縮相依套件。

Windows 使用者可以透過檔案總管,檢查並刪除 %CARGO_HOME%%USERPROFILE%\.cargo 下對應的快取子資料夾。用圖形介面逐項確認,比較不容易把 bin、設定或認證檔案一起選進去。

哪些內容不能當作 Cargo 快取清理?

不要把以下內容列為清理目標:

  • .cargo/bin:這裡存放 cargo-auditcargo-edit 等已安裝指令;
  • .cargo/credentials.toml:這裡可能存放 registry 登入 token;
  • .cargo/config.toml:這裡可能定義 registry、alias、網路設定與編譯目標行為;
  • 專案裡的 Cargo.tomlCargo.lockbuild.rssrc
  • vendored dependencies 或團隊維護的離線 mirror,除非負責人已有復原計畫。

如果不確定某個資料夾是否只是快取,就停在檢查步驟。位於 .cargo 底下,不代表它可以隨意刪除。

使用 MangoDisk 檢查 Rust 建置成果

MangoDisk 深度清理可以辨識 Rust 專案的 target 資料夾,以及各平台對應的 Cargo 快取位置。規則不會把整個 .cargo 當成清理目標,專案建置成果也不會預設勾選。

掃描會在本機完成。你可以先查看路徑與實際容量,再決定是否刪除;當多個 workspace 都有自己的 target 時特別實用。完整的確認與清理記錄流程可參考 MangoDisk 安全指南

常見問題

Rust 專案的 target 資料夾可以安全刪除嗎?

可以,前提是它確實是 Cargo 設定的建置輸出位置,而且目前沒有建置工作。裡面是可重新產生的成果,不是專案原始碼;刪除後要預期第一次完整編譯會比較久。

cargo clean 會清掉 Cargo 的下載快取嗎?

不會。cargo clean 移除的是 target 資料夾中的建置成果,不會清空 Cargo Home 裡的 registry 或 Git 相依套件快取。

可以刪除 Cargo.lock 來省空間或修復相依套件嗎?

不可以。Cargo.lock 很小,用來記錄已解析的相依套件版本。刪除它不是磁碟清理,還可能讓 Cargo 選到不同版本。

為什麼 Cargo 快取和 target 又出現了?

這是正常現象。專案建置時,Cargo 會重新產生建置成果並復原缺少的相依資料。清理只會移除舊的可再生資料,不會停用快取機制。

資料來源與延伸閱讀

想先看清楚 Rust 建置成果與 Cargo 快取,再決定要不要刪除?可以下載 MangoDisk,直接在本機檢查掃描結果。

Cargo 快取Rust target 資料夾cargo clean開發者磁碟清理
全部文章