Список всех пакетов RPM, установленных из репозитория «X»


44

Как я могу получить список всех пакетов RPM, которые были установлены в моей системе из определенного репозитория (например, «epel»)?

Ответы:


45

CentOS / RHEL / Fedora 22 или более ранняя версия

yum list installed | grep @epel

Fedora 23 или позже

dnf list installed | grep @epel

8
Это не будет работать. Yum будет выводить строки в трубу, которая будет разорвана, если они станут слишком длинными. Таким образом, ввод grep в большинстве случаев составляет одну строку на пакет, но это может быть две строки. Yum может передать "whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel". (Представьте подчеркивания как пробелы.) «@Epel» находится на следующей строке ввода grep. Так что grep выведет эту строку только с «@epel», но не с предыдущей строкой с именем пакета.
Тодд Уолтон,

Возможно, вам придется запускать эти команды от имени пользователя root, пока bugzilla.redhat.com/show_bug.cgi?id=1525645 не будет исправлен.
Проски

команда yum не работает, если в репозитории возникают проблемы. Мне нужен этот список, чтобы увидеть, если я хочу отключить репо с проблемами.
Jayen

@ Тодд Уотсон: Я знаю, это взлом, но как насчет «экспортировать КОЛОННЫ = 999 ням ...»
Массимо,

Это работает, @Massimo? Это был бы хороший обходной путь. Я также нашел этот вопрос Unix StackExchange: unix.stackexchange.com/questions/308731/…
Тодд Уолтон,

17

Начиная с RHEL6, как предлагается в этом ответе stackoverflow , есть более тщательный способ сделать это с yumdb:

yumdb search from_repo REPOID*

Репоид принимает дикие карты.

Довольно-печать

Если мы собираемся обмануть и передать вывод, то мы также можем добиться эффекта симпатичной печати. Вот один, используяawk

yumdb search from_repo REPOID* |awk -F"\n" '{ RS=""; print $1 }'

Используя egrepилиgrep -e

yumdb search from_repo REPOID* |egrep -v '(from_repo|^$)'

list_ALL_AVAILABLE_from_repo

Чтобы вывести список всех доступных пакетов в указанном репозитории, выполните:

repoquery -a --repoid=REPONAME

Просто примечание: чтобы получить список всех пакетов из указанного репо, сделайтеrepoquery -qa --repoid=REPONAME
ILMostro_7

2
Это тоже отличный ответ. Результат длиннее принятого ответа, но отформатирован лучше.
Routhinator

Может быть упрощено до, repoquery -a --repoid=REPONAMEпотому что согласно man-странице -qопция для совместимости с rpmquery ничего не делает.
Rockallite

@Rockallite прав; для dnf -qaфактически терпит неудачу. Я не могу проголосовать за комментарий из-за того, что он ранее удалил голос :( Я обновляю ответ, чтобы отразить это.
ILMostro_7

11
dnf repo-pkgs <repoid> list installed

Заметки

Приведенная выше команда использует DNF для просмотра списка пакетов, установленных из <repoid>. Примечание repo-pkgsэто просто псевдоним repository-packages.

Со manстраниц:

man dnf | grep "repository-packages.*list.*installed" -A 1

Дальнейшее чтение:

man dnf

3

Пропустить вывод yum - самый очевидный способ:

yum list installed | grep @epel

Тем не менее, вы не можете отобразить дополнительные свойства пакетов, и это трудно проанализировать с помощью скрипта. Инструмент repoqueryиз пакета yum-utilsявляется инструментом, но по умолчанию он не установлен.

repoquery -a --installed --qf "%{ui_from_repo} %{name}" | grep '^@epel'

и более сложный пример:

repoquery -a --installed --qf "%-20{ui_from_repo} %-30{name} %-7{arch} %{epoch}:%-12{version} %-4{release}" | grep '^@epel'

2

RHEL Server 7.5 (Maipo)

yum repo-pkgs <repoid> list installedможет быть использован для получения той же информации yumdb search from_repo <repoid>, но в другом формате.

# yum help repo-pkgs
repo-pkgs <repoid> <list|info|install|remove|upgrade|reinstall*|remove-or-*> [pkg(s)]

Treat a repo. as a group of packages, so we can install/remove all of them

aliases: repo-packages, repository-pkgs, repository-packages

Пример epelвыходов:

# yumdb search from_repo epel
htop-2.2.0-1.el7.x86_64
    from_repo = epel

supervisor-3.1.4-1.el7.noarch
    from_repo = epel


# yum repo-pkgs epel list installed
Installed Packages
htop.x86_64            2.2.0-1.el7          @epel
supervisor.noarch      3.1.4-1.el7          @epel

1

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

В этом примере перечислены все пакеты из репозитория VideoLAN :

 rpm -q -a --qf "%{Name}:%{Vendor}\n" \
     | grep -F ":VideoLAN Project (http://www.videolan.org)"

Очевидно, вам необходимо определить, является ли Vendorзаголовок вашего хранилища уникальным среди разных хранилищ.


3
Между Продавцом и репозиториями нет однозначного сопоставления, а в некоторых случаях строка Продавца пуста.
Лорин Хохштайн

1

Для людей, которые просто хотят найти недостающие репозитории:

yum list installed | awk '{print $3}' | sort | uniq

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.