Wyświetl wszystkie pakiety RPM zainstalowane z repozytorium „X”


44

Jak mogę uzyskać listę wszystkich pakietów RPM, które zostały zainstalowane w moim systemie z określonego repozytorium (np. „Epel”)?

Odpowiedzi:


45

CentOS / RHEL / Fedora 22 lub wcześniejsza

yum list installed | grep @epel

Fedora 23 lub nowsza

dnf list installed | grep @epel

8
To nie zadziała. Yum wyprowadzi linie do rury, które zostaną przerwane, jeśli będą zbyt długie. Zatem dane wejściowe grep to przeważnie jedna linia na pakiet, ale mogą to być dwie linie. Yum może przekazać „whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel”. (Wyobraź sobie podkreślenia jako spacje.) „@Epel” znajduje się w następnym wierszu wejścia grep. Zatem grep wypisze ten wiersz tylko „@epel”, ale nie poprzedni wiersz z nazwą pakietu.
Todd Walton,

Może być konieczne uruchomienie tych poleceń jako root, dopóki bugzilla.redhat.com/show_bug.cgi?id=1525645 nie zostanie naprawiony.
proski,

polecenie yum wydaje się nie działać, jeśli jeden z repozytoriów ma problemy. Potrzebowałem tej listy, aby zobaczyć, czy chcę wyłączyć repozytorium z problemami.
Jayen

@Todd Watson Wiem, to jest włamanie, ale co z „eksportem KOLUMN = 999 mniam ...”
Massimo,

Czy to działa, @Massimo? To byłoby miłe obejście. Znalazłem również to pytanie dotyczące Unix StackExchange: unix.stackexchange.com/questions/308731/...
Todd Walton,

17

Począwszy od wersji RHEL6, zgodnie z sugestią zawartą w tej odpowiedzi na przepełnienie stosu, istnieje dokładniejsza metoda wykonania tego za pomocą yumdb:

yumdb search from_repo REPOID*

Repoid bierze dzikie karty.

Całkiem druk

Jeśli zamierzamy oszukiwać i przesyłać dane wyjściowe, możemy również uzyskać efekt ładnego wydruku. Oto jeden używaawk

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

Za pomocą egreplubgrep -e

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

list_ALL_AVAILABLE_from_repo

Aby wyświetlić listę wszystkich dostępnych pakietów w określonym repozytorium, wykonaj:

repoquery -a --repoid=REPONAME

Na marginesie: Aby wyświetlić listę wszystkich pakietów z określonego repozytorium, wykonajrepoquery -qa --repoid=REPONAME
ILMostro_7

2
To także świetna odpowiedź. Wynik jest dłuższy niż zaakceptowana odpowiedź, ale jest sformatowany w ładniejszy sposób.
Routhinator,

Można to uprościć, repoquery -a --repoid=REPONAMEponieważ zgodnie z -qopcją man strona jest zgodna z rpmquery, nic nie robi.
Rockallite

@Rockallite ma rację; dla dnf -qafaktycznie się nie udaje. Nie mogę głosować za komentarzem ze względu na wcześniejsze usunięcie opinii :( Aktualizuję odpowiedź, aby to odzwierciedlić.
ILMostro_7,

11
dnf repo-pkgs <repoid> list installed

Notatki

Powyższe polecenie używa DNF do wyświetlenia listy pakietów zainstalowanych z <repoid>. Uwaga repo-pkgsto tylko pseudonim repository-packages.

Ze manstron:

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

Dalsza lektura:

man dnf

3

Grepping yum jest najbardziej oczywistym sposobem:

yum list installed | grep @epel

Nie można jednak wyświetlić dodatkowych właściwości pakietów i trudno jest je przeanalizować za pomocą skryptu. Narzędzie repoqueryz pakietu yum-utilsjest narzędziem, ale nie jest domyślnie instalowane.

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

i bardziej złożony przykład:

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 installedmożna użyć do pobrania tych samych informacji co yumdb search from_repo <repoid>, ale w innym formacie.

# 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

Przykładowe epelwyniki:

# 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

Możesz sprawdzić Vendornagłówek zainstalowanych RPM.

W tym przykładzie wymieniono wszystkie pakiety z repozytorium VideoLAN :

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

Oczywiście musisz ustalić, czy Vendornagłówek Twojego repozytorium jest unikalny wśród różnych repozytoriów.


3
Nie ma mapowania jeden na jeden między dostawcą a repozytorium, aw niektórych przypadkach ciąg dostawcy jest pusty.
Lorin Hochstein

1

Dla osób, które chcą tylko znaleźć brakujące repozytoria:

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

Powinno to zwrócić wszystkie repozytoria, z których masz zainstalowane pakiety.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.