Bagaimana cara membuat daftar isi suatu paket menggunakan YUM?

320

Saya tahu cara menggunakan rpm untuk daftar isi paket ( rpm -qpil package.rpm). Namun, ini membutuhkan mengetahui lokasi file .rpm pada sistem file. Solusi yang lebih elegan adalah dengan menggunakan manajer paket, yang dalam kasus saya adalah YUM. Bagaimana YUM dapat digunakan untuk mencapai ini?

Lorin Hochstein
sumber
8
Tanpa -pparam ( rpm -ql packageName) Anda tidak perlu tahu lokasi file rpm. Ini adalah cara termudah untuk mendapatkan "semua" jalur dari sebuah paket. Untuk beberapa contoh, lihat jawaban saya .
Levite
Sayangnya itu hanya berfungsi dengan paket yang diinstal
WallStProg

Jawaban:

438

Ada paket yang disebut yum-utilsyang dibangun di atas YUM dan berisi alat yang disebut repoqueryyang bisa melakukan ini.

$ repoquery --help | grep -E "list\ files" 
  -l, --list            list files in this package/group

Digabungkan menjadi satu contoh:

$ repoquery -l time
/usr/bin/time
/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz

Pada setidaknya satu sistem RH, dengan rpm v4.8.0, yum v3.2.29, dan repoquery v0.0.11, repoquery -l rpmtidak mencetak apa pun.

Jika Anda mengalami masalah ini, coba tambahkan --installedflag: repoquery --installed -l rpm.


DNF Memperbarui:

Untuk menggunakan dnfalih-alih yum-utils, gunakan perintah berikut:

$ dnf repoquery -l time
/usr/bin/time
/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz
Thomas Vander Stichele
sumber
12
Perhatikan bahwa perintah ini akan gagal secara diam-diam jika paket bernama tidak benar-benar ada.
Joshua Hoblitt
17
Untuk mencari paket yang diinstal dengan lebih cepat, sertakan opsi --installed. mis $ repoquery -lq --installed time.
Mohsenme
tolong perhatikan nama paket peka huruf besar kecil
Putnik
7
Harus ditambahkan sebagai fitur yum, IMO.
Lqueryvg
1
Mengapa menginstal paket baru saat Anda dapat menggunakan rpm -ql $PACKAGE_NAME?
isapir
159
rpm -ql [packageName]

Contoh

# rpm -ql php-fpm

/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
...
/run/php-fpm
/usr/lib/systemd/system/php-fpm.service
/usr/sbin/php-fpm
/usr/share/doc/php-fpm-5.6.0
/usr/share/man/man8/php-fpm.8.gz
...
/var/lib/php/sessions
/var/log/php-fpm

Tidak perlu menginstal yum-utils, atau untuk mengetahui lokasi file rpm.

Orang Lewi
sumber
4
Ini tampaknya setara dengan dpkg -Luntuk semua ya yang tidak ingin menginstal paket lain hanya untuk mendaftar file.
Dmitry Minkovsky
5
@dimadima: Pertanyaan itu untuk yum (= RHEL sistem berbasis) yang menggunakan rpmsebagai manajer paket asli ( R ed Hat P acket M anajer). Jika OP akan menggunakan sistem debian / ubuntu / .., dpkgakan menjadi cara untuk pergi, karena itu adalah backend ke apt .
Levite
2
@Levit: Cukup yakin apa yang ingin dikatakan oleh dimadima adalah bahwa ini tidak sepenuhnya menjawab pertanyaan - Anda tidak menggunakan yumtetapi rpmyang memiliki implikasi utama bahwa paket perlu diinstal (yang tidak secara eksplisit dikatakan OP adalah skenarionya). Dia hanya membuat rpm == dpkg / yum == perbandingan paralel untuk menjelaskan hal ini jika seseorang akrab dengan kemasan berbasis Debian dan bukan kemasan berbasis RH.
mentega
3
^ 1 karena karena alasan tertentu, ini berhasil dan jawaban yang diterima tidak menghasilkan apa
Izkata
2
Tampaknya tidak ada perintah yang yumsetara dengan rpm -qldan repoquery -l(dari yum-utilspaket) untuk masing-masing daftar file lokal dan jarak jauh.
78
$ yum install -y yum-utils

$ repoquery -l packagename
Hüseyin Ozan TOK
sumber
31

Saya tidak berpikir Anda bisa mendaftar isi paket menggunakan yum, tetapi jika Anda memiliki file .rpm di sistem lokal Anda (seperti yang akan terjadi pada semua paket yang diinstal), Anda dapat menggunakan perintah rpm untuk daftar isi paket itu seperti ini:

rpm -qlp /path/to/fileToList.rpm

Jika Anda tidak memiliki file paket (.rpm), tetapi Anda memiliki paket yang diinstal, coba ini:

rpm -ql packageName
Thomi
sumber
24
jika Anda tidak memiliki file paket (.rpm), tetapi Anda memiliki paket yang diinstal, coba rpm -ql packageName
Jared Updike
1
jika Anda tidak memiliki paket dan itu tidak diinstal, Anda dapat menemukan url paket dengan youdownload --urls.
kamae
Itu seharusnyayumdownloader --urls
Evgeni Sergeev
3

Ada beberapa jawaban bagus di sini, jadi izinkan saya memberikan jawaban yang mengerikan:

: you can type in anything below, doesnt have to match anything

yum whatprovides "me with a life"

: result of the above (some liberties taken with spacing):

Loaded plugins: fastestmirror
base | 3.6 kB 00:00 
extras | 3.4 kB 00:00 
updates | 3.4 kB 00:00 
(1/4): extras/7/x86_64/primary_db | 166 kB 00:00 
(2/4): base/7/x86_64/group_gz | 155 kB 00:00 
(3/4): updates/7/x86_64/primary_db | 9.1 MB 00:04 
(4/4): base/7/x86_64/primary_db | 5.3 MB 00:05 
Determining fastest mirrors
 * base: mirrors.xmission.com
 * extras: mirrors.xmission.com
 * updates: mirrors.xmission.com
base/7/x86_64/filelists_db | 6.2 MB 00:02 
extras/7/x86_64/filelists_db | 468 kB 00:00 
updates/7/x86_64/filelists_db | 5.3 MB 00:01 
No matches found

: the key result above is that "primary_db" files were downloaded

: filelists are downloaded EVEN IF you have keepcache=0 in your yum.conf

: note you can limit this to "primary_db.sqlite" if you really want

find /var/cache/yum -name '*.sqlite'

: if you download/install a new repo, run the exact same command again
: to get the databases for the new repo

: if you know sqlite you can stop reading here

: if not heres a sample command to dump the contents

echo 'SELECT packages.name, GROUP_CONCAT(files.name, ", ") AS files FROM files JOIN packages ON (files.pkgKey = packages.pkgKey) GROUP BY packages.name LIMIT 10;' | sqlite3 -line /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite 

: remove "LIMIT 10" above for the whole list

: format chosen for proof-of-concept purposes, probably can be improved a lot

sumber
0

Yum tidak memiliki jenis paket itu sendiri. Yum beroperasi dan membantu mengelola RPM. Jadi, Anda dapat menggunakan yum untuk membuat daftar RPM yang tersedia dan kemudian jalankan perintah rpm -qlp untuk melihat konten paket itu.

Haabda
sumber
0

saat reopqueryini terintegrasi ke dalam dnfdan yum, jadi ketikkan:

dnf repoquery -l <pkg-name>

akan mencantumkan konten paket dari repositori jarak jauh (bahkan untuk paket yang belum diinstal)

artinya menginstal paket terpisah dnf-utilsatau yum-utilstidak lagi diperlukan untuk fungsionalitas karena sekarang didukung secara bawaan.


untuk daftar konten yang diinstal atau lokal ( *.rpmfile) paket adarpm -ql

saya tidak berpikir itu mungkin dengan yumorg dnf(bukan repoquerysub - perintah)

mohon koreksi saya jika saya salah


sumber