Làm thế nào để liệt kê nội dung của một gói bằng YUM?


320

Tôi biết cách sử dụng vòng / phút để liệt kê nội dung của gói ( rpm -qpil package.rpm). Tuy nhiên, điều này đòi hỏi phải biết vị trí của tệp .rpm trên hệ thống tệp. Một giải pháp thanh lịch hơn sẽ là sử dụng trình quản lý gói, trong trường hợp của tôi là YUM. Làm thế nào YUM có thể được sử dụng để đạt được điều này?


8
Nếu không có -pparam ( rpm -ql packageName) bạn không cần biết vị trí của tệp vòng / phút. Đó là cách dễ nhất để có được "tất cả" đường dẫn của một gói. Đối với một số ví dụ đầu ra xem câu trả lời của tôi .
Levite

Thật không may, nó chỉ hoạt động với các gói đã cài đặt
WallStProg

Câu trả lời:


438

Có một gói được gọi là yum-utilsxây dựng trên YUM và chứa một công cụ được gọi là repoquerycó thể làm điều này.

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

Kết hợp thành một ví dụ:

$ 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

Trên ít nhất một hệ thống RH, với vòng / phút v4.8.0, yum v3.2.29 và repoquery v0.0.11, repoquery -l rpmkhông in gì cả.

Nếu bạn gặp vấn đề này, hãy thử thêm --installedcờ : repoquery --installed -l rpm.


DNF Cập nhật:

Để sử dụng dnfthay vì yum-utils, sử dụng lệnh sau:

$ 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

12
Lưu ý rằng lệnh này sẽ thất bại trong âm thầm nếu gói có tên không thực sự tồn tại.
Joshua Hoblitt

17
Để tìm kiếm nhanh hơn cho các gói đã cài đặt, bao gồm tùy chọn - đã cài đặt. ví dụ $ repoquery -lq --installed time.
Mohsenme

vui lòng lưu ý tên gói là phân biệt chữ hoa chữ thường
Putnik

7
Nên được thêm vào như một tính năng của yum, IMO.
Lqueryvg

1
Tại sao phải cài đặt một gói mới khi bạn có thể sử dụng rpm -ql $PACKAGE_NAME?
isapir

159
rpm -ql [packageName]

Thí dụ

# 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

Không cần phải cài đặt yum-utils, hoặc để biết vị trí của tệp vòng / phút.


4
Điều này dường như tương đương dpkg -Lvới tất cả các bạn sẽ không muốn cài đặt gói khác chỉ để liệt kê các tệp.
Dmitry Minkovsky

5
@dimadima: Câu hỏi dành cho yum (= hệ thống dựa trên RHEL) sử dụng rpmlàm trình quản lý gói gốc ( R ed Hat P acket M anager). Nếu OP sẽ ở trên một hệ thống debian / ubfox / .., dpkgthì đó sẽ là cách để đi, vì đó là phần phụ trợ cho apt .
Levite

2
@Levit: Khá chắc chắn điều mà dimadima đang cố nói là điều này không trả lời đúng câu hỏi - bạn không sử dụng yumnhưng rpmđiều đó có hàm ý chính là gói cần phải được cài đặt (mà OP không nói rõ ràng là kịch bản của anh ấy). Anh ta chỉ đơn thuần thực hiện vòng / phút == dpkg / yum == apt so sánh song song để giải thích điều này trong trường hợp ai đó quen thuộc với bao bì dựa trên Debian và không phải là bao bì dựa trên RH.
tne

3
^ 1 vì một số lý do, điều này hoạt động và câu trả lời được chấp nhận không trả về kết quả gì
Izkata

2
Dường như không có lệnh yumtương đương rpm -qlrepoquery -l(từ yum-utilsgói) để liệt kê các tệp cục bộ và từ xa, tương ứng.


31

Tôi không nghĩ bạn có thể liệt kê nội dung của gói bằng yum, nhưng nếu bạn có tệp .rpm trên hệ thống cục bộ của mình (rất có thể là trường hợp cho tất cả các gói đã cài đặt), bạn có thể sử dụng lệnh rpm để liệt kê nội dung của gói đó như vậy:

rpm -qlp /path/to/fileToList.rpm

Nếu bạn không có tệp gói (.rpm), nhưng bạn đã cài đặt gói, hãy thử điều này:

rpm -ql packageName

24
nếu bạn không có các tập tin gói (.rpm), nhưng bạn đã gói cài đặt, hãy thử rpm -ql PACKAGENAME
Jared Updike

1
nếu bạn không có gói và nó chưa được cài đặt, bạn có thể tìm thấy url của gói đó youdownload --urls.
kamae

Đó phải làyumdownloader --urls
Evgeni Sergeev

3

Có một số câu trả lời hay ở đây, vì vậy hãy để tôi cung cấp một câu trả lời khủng khiếp:

: 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

0

Yum không có loại gói riêng. Yum vận hành và giúp quản lý RPM. Vì vậy, bạn có thể sử dụng yum để liệt kê các RPM có sẵn và sau đó chạy lệnh rpm -qlp để xem nội dung của gói đó.


0

hiện reopqueryđược tích hợp vào dnfyum, do đó, gõ:

dnf repoquery -l <pkg-name>

sẽ liệt kê nội dung gói từ kho lưu trữ từ xa (ngay cả đối với các gói chưa được cài đặt)

có nghĩa là cài đặt riêng dnf-utilshoặc yum-utilsgói không còn cần thiết cho chức năng vì hiện tại nó đang được hỗ trợ.


để liệt kê nội dung các gói được cài đặt hoặc cục bộ ( *.rpmtệp) córpm -ql

tôi không nghĩ là có thể với yumorg dnf(không phải repoquerytiểu ban)

xin vui lòng sửa cho tôi nếu tôi sai

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.