Daftar semua paket RPM yang diinstal dari repo “X”

44

Bagaimana saya bisa mendapatkan daftar semua paket RPM yang telah diinstal pada sistem saya dari repo tertentu (misalnya, "epel")?

Lorin Hochstein
sumber

Jawaban:

45

CentOS / RHEL / Fedora 22 atau yang lebih lama

yum list installed | grep @epel

Fedora 23 atau lebih baru

dnf list installed | grep @epel
David Schwartz
sumber
8
Ini tidak akan berfungsi. Yum akan menampilkan jalur ke pipa yang akan rusak jika terlalu panjang. Jadi input grep sebagian besar satu baris per paket, tetapi bisa dua baris. Yum dapat melewati "whizbanger.x86_64 ___ 3.8.4-2.el6 _______________ @epel". (Bayangkan garis bawah sebagai spasi.) "@Epel" ada di baris berikutnya dari grep input. Jadi grep akan menampilkan baris itu dengan apa-apa selain "@epel" tetapi bukan baris sebelumnya dengan nama paket.
Todd Walton
Anda mungkin perlu menjalankan perintah itu sebagai root sampai bugzilla.redhat.com/show_bug.cgi?id=1525645 diperbaiki.
proski
perintah yum tampaknya tidak berfungsi jika salah satu repo mengalami masalah. saya perlu daftar ini untuk melihat apakah saya ingin menonaktifkan repo dengan masalah.
Jayen
@Todd Watson Saya tahu, ini adalah peretasan, tapi bagaimana dengan "ekspor KOLOM = 999 yum ..."
Massimo
Apakah itu berhasil, @ Massimo? Itu akan menjadi solusi yang bagus. Saya juga menemukan pertanyaan Unix StackExchange ini: unix.stackexchange.com/questions/308731/…
Todd Walton
17

Pada RHEL6, seperti yang disarankan dalam jawaban stackoverflow ini , ada metode yang lebih menyeluruh untuk melakukan ini dengan yumdb:

yumdb search from_repo REPOID*

Repoid mengambil kartu liar.

Cetak cantik

Jika kita akan menipu dan menyalurkan output, maka kita dapat mencapai efek cetak-cantik juga. Ini salah satu yang digunakanawk

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

Menggunakan egrepataugrep -e

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

list_ALL_AVAILABLE_from_repo

Untuk mendaftar semua paket yang tersedia di repositori tertentu, lakukan:

repoquery -a --repoid=REPONAME
ILMostro_7
sumber
Hanya catatan tambahan: Untuk membuat daftar semua paket dari repo yang ditentukan, lakukanrepoquery -qa --repoid=REPONAME
ILMostro_7
2
Ini juga jawaban yang bagus. Outputnya lebih panjang dari jawaban yang diterima, tetapi diformat dengan cara yang lebih baik.
Routhinator
Dapat disederhanakan repoquery -a --repoid=REPONAMEkarena menurut -qopsi halaman manual adalah untuk kompatibilitas rpmquery, tidak melakukan apa-apa.
Rockallite
@Rockallite benar; untuk dnf, -qasebenarnya gagal. Saya tidak dapat meningkatkan komentar karena sebelumnya menghapus upvote :( Saya memperbarui jawaban untuk mencerminkan itu.
ILMostro_7
11
dnf repo-pkgs <repoid> list installed

Catatan

Perintah di atas menggunakan DNF untuk mendaftar paket yang diinstal dari <repoid>. Note repo-pkgshanyalah alias dari repository-packages.

Dari manhalaman:

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

Bacaan lebih lanjut:

man dnf
Peque
sumber
3

Output grepping yum adalah cara yang paling jelas:

yum list installed | grep @epel

Namun, Anda tidak dapat menampilkan properti paket tambahan dan sulit untuk menguraikan skrip. Alat repoquerydari paket yum-utilsadalah alat, tetapi tidak diinstal secara default.

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

dan contoh yang lebih kompleks:

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

RHEL Server 7.5 (Maipo)

yum repo-pkgs <repoid> list installeddapat digunakan untuk mengambil info yang sama dengan yumdb search from_repo <repoid>, tetapi dalam format yang berbeda.

# 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

epelOutput sampel :

# 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
alexandrul
sumber
1

Anda dapat memeriksa Vendortajuk dari rpms yang diinstal.

Contoh ini mencantumkan semua paket dari repositori VideoLAN :

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

Jelas, Anda perlu menentukan apakah Vendorheader repositori Anda unik di antara repositori yang berbeda.

andcoz
sumber
3
Tidak ada pemetaan satu-ke-satu antara Vendor dan repo, dan dalam beberapa kasus, string Vendor kosong.
Lorin Hochstein
1

Untuk orang-orang yang hanya ingin menemukan repositori yang hilang:

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

Ini akan mengembalikan semua repositori tempat Anda menginstal paket.

derberlinersmurf
sumber