Как я могу получить список всех пакетов в разделе репозитория из командной строки?

13

В Synaptic можно перечислять пакеты по разделам. Например, на изображении ниже перечислены все пакеты раздела «Любительское радио (вселенная)».

Как я могу получить такой список (изменить: с описанием пакета) в командной строке?

Мне нужен сырой список; терминальное приложение вроде aptitudeне подойдет.

синаптические

Серж Строобандт
источник
Оболочки поиска apt-cache
Panther
@ bodhi.zazen, это хорошее предложение, но оно не ищет только раздел
Стивен Пенни

Ответы:

5

Ну, хотя вы говорите, что не хотите использовать aptitude из-за вывода, вам нужно знать, что вы можете изменить его, чтобы получить то, что вам нравится:

aptitude -F'|%p|%d|' search '?section(hamradio)'

Хитрость заключается в -Fпереключателе, который изменяет формат вывода. %pозначает пакет. Это также выводится, когда пакет имеет различные архитектуры (например, amd64 против i386), и%d который выводит описание. Вы можете персонализировать шаблон поиска еще больше, например, для не установленных пакетов:

aptitude -F'|%p|%d|' search '?section(hamradio) !~i'

где ~iозначает «установлен», а « !нет», поэтому он читается как «не (!) установлен (~ i)», или если вам нужны только те из них, которые доступны для вашей архитектуры:

aptitude -F'|%p|%d|' search '?section(hamradio) ~r native'

~r существо ?architecture() которое соответствует архитектуре пакета и в nativeкотором перечислены только те, которые имеют ту же архитектуру, что и система, что эквивалентно dpkg --print-architecture.

Поэтому предыдущую строку можно записать еще более кратко:

aptitude -F'|%p|%d|' search '~s hamradio ~r native'
Braiam
источник
Очень элегантно, особенно с -F'|%p|%d|'. Однако можно ли не перечислить :i386пакеты, добавив !в searchстроку -expression ?
Серж Строобандт
1
@GinGordon да, просто добавьте ~r nativeв условия поиска. ~rто, ?architectureчто соответствует архитектуре пакета и в nativeкотором перечислены только те, которые имеют ту же архитектуру, что и система, эквивалентно dpkg --print-architecture. Кстати, вы хотели список с описанием пакета?
Брайам
Большой! И да, я отредактировал вопрос, чтобы включить описание пакета. Пожалуйста, отредактируйте свой ответ соответствующим образом, и вы заслуженно получите мой лучший ответный голос за то, что он самый лаконичный.
Серж Строобандт
@GinGordon проверить это.
Брайам
1
@GinGordon, если вы установите aptitude-docпакет и /usr/share/doc/aptitude/html/en/index.htmlперейдете к своему браузеру, вы найдете file:///usr/share/doc/aptitude/html/en/ch02s04s05.htmlвсе неприятные льготы.
Брайам
11

Убедитесь, что пакет dctrl-toolsУстановите dctrl-tools установлен. Он предоставляет полезные команды для поиска в списках пакетов apt и dpkg. Чтобы получить полное описание всех пакетов из определенного раздела, которые можно установить с помощью apt, запустите

grep-aptavail -F Section hamradio

Это покажет полные метаданные пакета для каждого пакета в hamradioразделе. Если вы хотите увидеть только имена пакетов, запустите

grep-aptavail -n -F Section -s Package hamradio

Если ваша система настроена на многоархивную архитектуру, один и тот же пакет может отображаться в этом списке более одного раза, если он построен для нескольких архитектур. Таким образом, чтобы уточнить это далее, используйте либо

grep-aptavail -n -F Section -s Package hamradio | sort | uniq

или

grep-aptavail -n -F Section -s Package hamradio | sort -u

отсортировать список пакетов и удалить дубликаты пакетов с одинаковыми именами.

Обратите внимание, что вам придется использовать фактическое имя раздела, которое отличается от «удобочитаемого» имени, которое Synaptic показывает в своем графическом интерфейсе. Например, при поиске выше используется имя разделаhamradio вместо строки «Любительское радио», показанной в Synaptic.

Смотрите man-страницу для grep-aptavail для полного описания всех опций и некоторых примеров.

Майк Миллер
источник
3

Больше полей в одной строке, с произвольным разделителем

Следующая строка будет печатать все уникальные имена пакетов раздела репозитория, вместе с их описанием, в одну строку. Все поля разделены символом канала, т.е. готовы для преобразования в таблицу каналов Markdown . Результирующая таблица можно найти на моем веб - сайте.

grep-aptavail -n -s Package,Description -F Section hamradio |paste -sd '||\n' |sed 's:^:|:' |sort -u
Серж Строобандт
источник
2

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

$ dpkg-query -W -f='${binary:Package} ${Section}\n' | awk '{if ($2 == "shells") {print $1}}'
bash
bash-completion
busybox-initramfs
busybox-static
dash
zsh
zsh-common
Сильвен Пино
источник