Как получить список доступных (то есть удаленных) пакетов в Debian?


19

По сути, я ищу Debian-эквивалент:

yum list available

чтобы показать мне, какие пакеты доступны (хотя в данный момент не установлены). Я бы предпочел что-то, что можно запустить из консоли, так как это на удаленном сервере. Благодарю.

Ответы:


7

grep-dctrlи его производные предоставляют отличный способ запрашивать файлы apt-кэша. (Вы можете установить эти инструменты в Ubuntu с помощью sudo apt-get install dctrl-tools)

В случае доступных (но не обязательно установленных) пакетов вы можете использовать grep-available. Например, чтобы перечислить все доступные пакеты:

grep-available  -s Package .

Редактировать:

aptitude может показать вам список неустановленных пакетов, просто запустив его.

Вы также можете получить список не установленных пакетов с aptitudeпомощью:

aptitude -F "%p" search "?not(?installed)"

Обратите внимание, что с новыми пакетами multi-arch вы получите пакеты для других архитектур, перечисленных в этом результате. Например, я получаю:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

У меня bashустановлен пакет, но это версия amd64, поскольку моя ОС установлена ​​вместе с версией amd64 Ubuntu Precise. Если вы не хотите видеть эти пакеты для других архитектур, вы можете исключить строки, содержащие ::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'

Спасибо, но проблема в том, что мне придется просмотреть весь список пакетов для выбранных мной репозиториев. Возможно, лучшим способом визуализации проблемы было бы следующее: представьте, что X - это универсальный набор всех пакетов в репозиториях пакетов Debian, на который указывает мой сервер, а Y - набор пакетов, которые я установил на указанном сервере; по сути, я ищу X - Y. Теперь я понимаю, что могу сделать это программно, но я надеялся, что будет относительно простая команда для достижения того же результата в системе Debian.
Freakwincy

Только что увидел ваш отредактированный ответ. Это именно то, что я искал! Благодарю.
freakwincy

PS Я бы проголосовал за ваш ответ, но пока не набрал достаточно очков репутации.
freakwincy

Нет проблем. Кстати, добро пожаловать в SU ;-)
ℝaphink

16

apt-cache используется для запроса кеша пакетов:

apt-cache pkgnames | Сортировать
APT-кэша поиска вещь
APT-кэша поиска --names только вещь

спасибо, но я боюсь, что это не сработает. Я сравнил список, сгенерированный первой командой, с ранее сгенерированным списком установленных пакетов, который я получил следующим образом: code"dpkg --get-selections | grep '[[: space:]] install $' | awk '{print $ 1}' > instal.txt "и найдены дубликаты. Две другие команд , предоставленные вами не будут работать , потому что я не ищу конкретный пакет , а скорее какой - либо пакет , который в настоящее время не установлен.
freakwincy

2

Используйте apt-cacheдля этого:

apt-cache search package

Поскольку в системе apt-cacheиспользуется только кеш пакетов, убедитесь, что этот кеш обновлен:

apt-get update

Вы также можете использовать утилиту, apt-fileесли знаете имя файла, который хотите найти; это должно быть добавлено к системе как бы то ни было. Например:

apt-file search somefilename

Я склонен использовать apt-cacheодин из следующих способов:

apt-cache search package | sort | grep item

(Это показывает вам вещи, у которых есть пункт в их резюме или именах.)

apt-cache search thing | sort | less

(Это ищет вещь, затем сортирует ее для приятного просмотра less.)


2

Моя точка зрения состоит в том, чтобы работать с командами, установленными по умолчанию, и избегать дополнительных пакетов, если нет какой-либо конкретной причины.

В моем Debian с GNU bash эти простые команды

apt list
apt list --all-versions

дает список всего (установленного и не установленного). Затем я могу ограничить результаты с помощью grep "Установлено" или grep -v "Установлено". Его также можно комбинировать с одним или несколькими именами пакетов (допускаются подстановочные знаки).

Переключатель «-all-version» обеспечивает в выходных данных отдельные строки для каждой версии пакета (стабильная, тестируемая, нестабильная, экспериментальная).

Простой «apt list» дает только одну (наивысший приоритет) версию.


0

Принимая ваш вопрос строго (вы хотите показать список не установленных пакетов), попробуйте использовать

(отредактировано в соответствии с комментариями ниже)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

Хотя я не уверен в точном синтаксисе, так как я пишу это в окне Windows и не могу проверить. Может быть, попытаться изменить то, что вы grep на


В этом списке перечислены установленные пакеты, а не удалены .
ℝaphink

@Raphink: Извините, я отредактировал пост, чтобы это исправить
КПП

Нет проблем, но вы все еще не видите список пакетов, которые не установлены. Исключая пакеты 'ii' (что на самом деле не совсем то, что делает ваше выражение, вы должны использовать, '^ii'а не '[ii]'), вы пропускаете пакеты, которые установлены, но не настроены, например (например, iFили, iHнапример).
ℝaphink

@PPC: Увы, это также не работает, так как dpkg -l только перечисляет установленные пакеты, т. Е. Все пакеты предваряются "ii", так что передача результатов в grep с использованием флагов --invert-match или -v дает только серия штрихов, которая является разделителем заголовка списка. Спасибо, в любом случае.
Freakwincy

@ freakwincy: Верно! Извините, что не протестировал его перед отправкой (работает на windows). Согласно manpage, вы должны использовать "dpkg -l '*'", чтобы вывести список всех пакетов.
КПП
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.