Перерахуйте всі пакети 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 збирається вивести цей рядок, окрім "@epel", але не попереднього рядка з назвою пакета.
Тодд Уолтон

Можливо, вам доведеться запустити ці команди як корінь, поки не буде виправлено bugzilla.redhat.com/show_bug.cgi?id=1525645 .
proski

Команда yum, здається, не працює, якщо у одного репосту виникають проблеми. Мені потрібен цей список, щоб побачити, чи хочу я відключити репо з питаннями.
Jayen

@Todd Watson Я знаю, це хак, але як щодо "експорту COLUMNS = 999 yum ..."
Массімо

Це працює, @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
Це також чудова відповідь. Вихід довший, ніж прийнятий відповідь, але він відформатований у приємніший спосіб.
Ротатор

Це може бути спрощено, repoquery -a --repoid=REPONAMEтому що відповідно до -qпараметра man page для сумісності 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 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.