Khi làm việc trong hệ sinh thái Rust, lệnh cargo install <crate> là công cụ tuyệt vời giúp bạn cài đặt các công cụ dòng lệnh (CLI) hiệu năng cao như ripgrep, bat, eza hay zellij.
Tuy nhiên, sau một thời gian thử nghiệm nhiều công cụ, thư mục nhị phân của bạn có thể chứa đầy các binary không còn sử dụng. Làm thế nào để gỡ bỏ chúng một cách sạch sẽ và an toàn?
Bài viết này sẽ hướng dẫn bạn chi tiết về cơ chế quản lý binary của Cargo, cách sử dụng lệnh cargo uninstall, cũng như cách xử lý các tình huống gỡ cài đặt thủ công.
Giải thích đơn giản (ELI5): Cargo quản lý Binary thế nào?#
Hãy tưởng tượng thư mục dòng lệnh của hệ điều hành giống như bảng treo dụng cụ trong xưởng làm việc:
- Khi bạn gõ
cargo install <crate>: Cargo tải mã nguồn về, biên dịch ra file thực thi (.exe hoặc file nhị phân) và móc chiếc kìm/cờ-lê đó lên chiếc giá chung có tên$HOME/.cargo/bin. Đồng thời, Cargo ghi một dòng vào “sổ nhật ký” (.crates2.json) để nhớ đã gắn những dụng cụ nào. - Khi bạn gõ
cargo uninstall <crate>: Cargo mở sổ nhật ký ra, tìm các file binary liên kết với crate đó, gỡ chúng khỏi giá$HOME/.cargo/binvà xóa dòng ghi chú trong sổ.
flowchart TD
subgraph Install["Cài đặt (cargo install)"]
CRATES_IO["Crates.io / Git Repository"] -->|Tải & Biên dịch| CARGO_BUILD["Cargo Compiler"]
CARGO_BUILD -->|Sao chép binary| BIN_DIR["$HOME/.cargo/bin<br>(Nằm trong PATH)"]
CARGO_BUILD -->|Ghi nhật ký metadata| METADATA[".crates2.json<br>(Metadata Tracker)"]
end
subgraph Uninstall["Gỡ cài đặt (cargo uninstall)"]
CMD["cargo uninstall <crate>"] -->|Tra cứu| METADATA
CMD -->|Xóa file thực thi| BIN_DIR
CMD -->|Cập nhật & xóa metadata| METADATA
end
1. Liệt kê các Binary Crate Đã Cài Đặt#
Trước khi quyết định xóa bất kỳ package nào, bạn nên kiểm tra xem hiện tại máy tính đang có những binary crate nào được cài đặt qua Cargo.
Chạy lệnh sau trong terminal:
cargo install --listbashKết quả hiển thị sẽ bao gồm tên crate, phiên bản đã cài đặt và các file thực thi đi kèm:
bat v0.24.0:
bat
ripgrep v14.1.0:
rg
cargo-update v13.3.0:
cargo-install-update
cargo-install-update-configtext[!NOTE] Lưu ý quan trọng: Một crate có thể cài đặt nhiều binary khác nhau (ví dụ:
cargo-updatetạo ra cả 2 binary làcargo-install-updatevàcargo-install-update-config). Ngoài ra, tên crate có thể khác tên binary (ví dụ: crateripgreptạo ra lệnhrg).
2. Gỡ Cài Đặt Cơ Bản Bằng cargo uninstall#
Để gỡ cài đặt một package đã cài đặt qua cargo install, cú pháp cơ bản là:
cargo uninstall <package_name>bashVí dụ thực tế#
Nếu bạn từng cài đặt ripgrep và muốn gỡ bỏ:
cargo uninstall ripgrepbashKết quả phản hồi từ Cargo:
Removing /Users/username/.cargo/bin/rgtextHệ thống sẽ lập tức xóa file thực thi rg khỏi thư mục .cargo/bin và cập nhật lại file nhật ký metadata.
3. Các Lệnh Nâng Cao & Tùy Chọn Hữu Ích#
3.1. Gỡ cài đặt một binary cụ thể (--bin)#
Nếu một crate cài đặt nhiều file thực thi nhưng bạn chỉ muốn xóa một file nhị phân cụ thể, hãy dùng cờ --bin:
cargo uninstall <package_name> --bin <binary_name>bashVí dụ, chỉ xóa binary cargo-install-update-config từ crate cargo-update:
cargo uninstall cargo-update --bin cargo-install-update-configbash3.2. Gỡ cài đặt từ thư mục Root tùy chỉnh (--root)#
Nếu bạn đã từng cài đặt package vào một thư mục tùy chỉnh bằng cờ --root, bạn cần chỉ định lại đường dẫn đó khi gỡ:
cargo uninstall --root /custom/path <package_name>bash4. Gỡ Cài Đặt Thủ Công (Manual Removal)#
Trong một số trường hợp file metadata (.crates2.json) bị hỏng hoặc bạn muốn xóa trực tiếp file nhị phân mà không cần thông qua Cargo, bạn có thể xóa thẳng file từ thư mục binary.
Vị trí lưu trữ mặc định của Cargo#
- macOS / Linux:
$HOME/.cargo/bin/(hoặc~/.cargo/bin/) - Windows:
%USERPROFILE%\.cargo\bin\(ví dụ:C:\Users\YourUsername\.cargo\bin\)
Thao tác xóa thủ công#
Trên macOS / Linux:
rm ~/.cargo/bin/rgbashTrên Windows (PowerShell):
Remove-Item "$HOME\.cargo\bin\rg.exe"powershell[!WARNING] Khi xóa thủ công, file thực thi sẽ bị xóa nhưng thông tin trong
.crates2.jsoncó thể vẫn còn lưu lại. Lệnhcargo install --listcó thể vẫn hiển thị crate đó cho đến khi file metadata được dọn dẹp hoặc cài đè.
5. Xử Lý Các Sự Cố Thường Gặp#
Lỗi 1: error: no package found with name ...#
Lỗi này thường xảy ra khi bạn gõ tên lệnh thay vì tên package.
- Sai:
cargo uninstall rg - Đúng:
cargo uninstall ripgrep
Hãy chạy cargo install --list để xác định chính xác tên crate gốc.
Lỗi 2: Đã uninstall nhưng lệnh vẫn chạy được trong Terminal#
Nếu sau khi chạy cargo uninstall mà bạn vẫn gõ được lệnh trong terminal, nguyên nhân có thể là:
- Cache đường dẫn lệnh của Shell: Shell (Zsh/Bash) vẫn lưu cache đường dẫn cũ trong RAM session. Chạy lệnh sau để làm mới:
- Zsh:
rehash - Bash:
hash -r
- Zsh:
- Cài đặt qua trình quản lý khác: Công cụ đó có thể được cài qua Homebrew (
brew), APT, Pacman hoặc Scoop chứ không phải Cargo. Kiểm tra nguồn gốc bằng:
bashwhich <tên_lệnh>
Bảng Tổng Kết Lệnh#
| Tác vụ | Lệnh Terminal |
|---|---|
| Xem danh sách package đã cài | cargo install --list |
| Gỡ cài đặt một package | cargo uninstall <package_name> |
| Gỡ một binary cụ thể của package | cargo uninstall <package_name> --bin <binary_name> |
| Gỡ package khỏi custom root | cargo uninstall --root <path> <package_name> |
| Đường dẫn binary mặc định | ~/.cargo/bin/ (macOS/Linux) hoặc %USERPROFILE%\.cargo\bin\ (Windows) |