Как я могу получить список всех пакетов 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
Это должно вернуть все репозитории, из которых установлены пакеты.