Как я могу получить список всех пакетов RPM, которые были установлены в моей системе из определенного репозитория (например, «epel»)?
Как я могу получить список всех пакетов RPM, которые были установлены в моей системе из определенного репозитория (например, «epel»)?
Ответы:
yum list installed | grep @epel
dnf list installed | grep @epel
Начиная с 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|^$)'
Чтобы вывести список всех доступных пакетов в указанном репозитории, выполните:
repoquery -a --repoid=REPONAME
repoquery -qa --repoid=REPONAME
repoquery -a --repoid=REPONAMEпотому что согласно man-странице -qопция для совместимости с rpmquery ничего не делает.
-qaфактически терпит неудачу. Я не могу проголосовать за комментарий из-за того, что он ранее удалил голос :( Я обновляю ответ, чтобы отразить это.
dnf repo-pkgs <repoid> list installed
Приведенная выше команда использует DNF для просмотра списка пакетов, установленных из <repoid>. Примечание repo-pkgsэто просто псевдоним repository-packages.
Со manстраниц:
man dnf | grep "repository-packages.*list.*installed" -A 1
Дальнейшее чтение:
man dnf
Пропустить вывод 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'
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
Вы можете проверить Vendorзаголовок установленных rpms.
В этом примере перечислены все пакеты из репозитория VideoLAN :
rpm -q -a --qf "%{Name}:%{Vendor}\n" \
| grep -F ":VideoLAN Project (http://www.videolan.org)"
Очевидно, вам необходимо определить, является ли Vendorзаголовок вашего хранилища уникальным среди разных хранилищ.
Для людей, которые просто хотят найти недостающие репозитории:
yum list installed | awk '{print $3}' | sort | uniq
Это должно вернуть все репозитории, из которых установлены пакеты.