Avatar ·

Как вывести список всех пакетов, установленных глобально через cargo install?

Всем привет! Я недавно начал изучать Rust и активно пользуюсь `cargo install` для установки различных утилит, например, `ripgrep`, `bat` и `fd-find`. Со временем я установил довольно много инструментов, и теперь хочу посмотреть, что именно у меня установлено глобально, чтобы, возможно, удалить ненужное. Я попробовал команду `cargo list`, но она не сработала — Cargo выдал ошибку, что такой команды нет. Потом я залез в директорию `~/.cargo/bin/`, но там просто куча бинарников, и непонятно, какие из них были установлены через `cargo install`, а какие я скачал вручную. К тому же, если пакет устанавливает несколько исполняемых файлов (как, например, `cargo-edit`), то сложно понять, откуда они взялись. Подскажите, есть ли встроенная команда Cargo для просмотра списка установленных глобальных пакетов? Если нет, то как можно получить эту информацию через командную строку или прочитав какой-нибудь конфигурационный файл? Буду благодарен за примеры с кодом. ```rust // Пример: я установил пакет "cargo-edit" с помощью // cargo install cargo-edit // Теперь хочу увидеть его в списке установленных пакетов. ``` Заранее спасибо! <<>>

Основной способ: команда cargo install --list

В Cargo действительно есть встроенная команда для вывода списка всех глобально установленных пакетов — cargo install --list. Она показывает не только названия пакетов, но и их версии, а также все исполняемые файлы, которые были установлены вместе с каждым пакетом.

cargo install --list

Пример вывода:

bat v0.24.0:
    bat
fd-find v9.0.0:
    fd
ripgrep v14.1.0:
    rg
cargo-edit v0.12.2:
    cargo-add
    cargo-rm
    cargo-upgrade

Как видите, для каждого пакета указана версия и список бинарников. Это гораздо удобнее, чем рыться в ~/.cargo/bin/.

Как это работает под капотом

Cargo хранит информацию об установленных пакетах в файле ~/.cargo/.crates.toml (или ~/.cargo/.crates2.json в новых версиях). Команда cargo install --list просто читает этот файл и форматирует вывод. Вы можете открыть его вручную, если хотите увидеть более детальную информацию:

cat ~/.cargo/.crates.toml

Пример содержимого:

[v1]
"bat 0.24.0" = ["bat"]
"fd-find 9.0.0" = ["fd"]
"ripgrep 14.1.0" = ["rg"]
"cargo-edit 0.12.2" = ["cargo-add", "cargo-rm", "cargo-upgrade"]

Дополнительные полезные команды

  • Удаление пакета: cargo uninstall <package-name> (например, cargo uninstall cargo-edit)
  • Установка с указанием версии: cargo install <package-name> --version <version>
  • Обновление всех пакетов: cargo install-update -a (требуется установка cargo install cargo-update)
  • Проверка установленных бинарников: ls -la ~/.cargo/bin/ — но помните, что там могут быть и вручную добавленные файлы

Пример для начинающих

Допустим, вы установили несколько пакетов и хотите убедиться, что они отображаются:

// Устанавливаем два пакета
cargo install bat
cargo install ripgrep

// Проверяем список
cargo install --list
// Вывод:
// bat v0.24.0:
//     bat
// ripgrep v14.1.0:
//     rg

// Удаляем один пакет
cargo uninstall bat

// Снова проверяем
cargo install --list
// Вывод:
// ripgrep v14.1.0:
//     rg

Обратите внимание: команда cargo install --list работает на всех платформах (Windows, macOS, Linux) и не требует дополнительных инструментов. Это официальный способ управления глобальными пакетами в Rust.

<<>>

Альтернативный подход: просмотр через файловую систему

Если по какой-то причине команда cargo install --list не работает (например, у вас старая версия Cargo или повреждён конфигурационный файл), можно получить список установленных пакетов, проанализировав содержимое директории ~/.cargo/bin/ и сопоставив его с метаданными.

Самый простой способ — использовать утилиту ls с фильтрацией, но она не покажет, откуда взялся каждый бинарник. Более надёжный вариант — прочитать файл ~/.cargo/.crates.toml напрямую:

cat ~/.cargo/.crates.toml 2>/dev/null || cat ~/.cargo/.crates2.json 2>/dev/null

Если файл существует, вы увидите структуру, аналогичную той, что выводит cargo install --list. Если файла нет — значит, пакеты не устанавливались глобально, или вы используете очень старую версию Cargo (до 1.40). В этом случае можно проверить, какие бинарники были установлены через Cargo, по их происхождению: обычно они имеют символические ссылки или скрипты-обёртки, созданные Cargo.

Также можно написать небольшой скрипт на Rust или Bash, который парсит содержимое ~/.cargo/bin/ и пытается определить установщик каждого файла, но это уже избыточно для повседневного использования.