จะแสดงรายการเนื้อหาของแพ็คเกจด้วย YUM ได้อย่างไร?


320

ฉันรู้วิธีใช้รอบต่อนาทีเพื่อแสดงรายการเนื้อหาของแพ็คเกจ ( rpm -qpil package.rpm) อย่างไรก็ตามสิ่งนี้จำเป็นต้องรู้ตำแหน่งของไฟล์. rpm บนระบบไฟล์ โซลูชันที่หรูหรากว่านี้คือการใช้ตัวจัดการแพคเกจซึ่งในกรณีของฉันคือ YUM YUM สามารถใช้เพื่อให้บรรลุสิ่งนี้ได้อย่างไร


8
หากไม่มี-pพารามิเตอร์ ( rpm -ql packageName) คุณไม่จำเป็นต้องทราบตำแหน่งของไฟล์ rpm มันเป็นวิธีที่ง่ายที่สุดในการรับเส้นทาง "ทั้งหมด" ของแพ็คเกจ ตัวอย่างบางส่วนเอาท์พุทดูคำตอบของฉัน
Levite

น่าเสียดายที่ใช้งานได้กับแพ็คเกจที่ติดตั้งเท่านั้น
WallStProg

คำตอบ:


438

มีแพ็คเกจที่เรียกyum-utilsว่าสร้างบน YUM และมีเครื่องมือที่เรียกrepoqueryว่าสามารถทำได้

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

รวมเป็นหนึ่งตัวอย่าง:

$ 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

บนระบบ RH อย่างน้อยหนึ่งระบบที่มี rpm v4.8.0, yum v3.2.29 และ repoquery v0.0.11 จะไม่repoquery -l rpmพิมพ์อะไรเลย

หากคุณกำลังมีปัญหานี้ลองเพิ่มธง:--installedrepoquery --installed -l rpm


DNF ปรับปรุง:

หากต้องการใช้dnfแทนyum-utilsให้ใช้คำสั่งต่อไปนี้:

$ 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
โปรดทราบว่าคำสั่งนี้จะล้มเหลวอย่างเงียบ ๆ หากแพ็กเกจที่ระบุไม่มีอยู่จริง
Joshua Hoblitt

17
หากต้องการค้นหาแพคเกจที่ติดตั้งเร็วขึ้นให้รวม - ตัวเลือกที่ติดตั้ง $ repoquery -lq --installed timeเช่น
Mohsenme

กรุณาทราบชื่อแพ็คเกจว่าเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่
Putnik

7
ควรเพิ่มเป็นคุณลักษณะของ yum, IMO
Lqueryvg

1
ทำไมต้องติดตั้งแพ็คเกจใหม่เมื่อคุณสามารถใช้งานได้rpm -ql $PACKAGE_NAME?
isapir

159
rpm -ql [packageName]

ตัวอย่าง

# 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

ไม่จำเป็นต้องติดตั้ง yum-utils หรือรู้ตำแหน่งของไฟล์ rpm


4
นี่ดูเหมือนจะเท่ากับของdpkg -Lทุกคนที่ไม่ต้องการติดตั้งแพคเกจอื่นเพียงเพื่อแสดงรายการไฟล์
Dmitry Minkovsky

5
@dimadima: คำถามนี้มีไว้สำหรับyum (= ระบบที่ใช้ RHEL) ซึ่งใช้rpmเป็นตัวจัดการแพ็กเก็ตดั้งเดิม ( R ed Hat P acket M anager M ) หาก OP จะเป็นบน Debian / Ubuntu / .. ระบบdpkgจะเป็นวิธีที่จะไปเพราะมันเป็นแบ็กเอนด์ที่จะฉลาด
Levite

2
@ Levit: ค่อนข้างแน่ใจว่า dimadima พยายามที่จะพูดคือว่านี่ไม่ได้ตอบคำถามอย่างเคร่งครัด - คุณไม่ได้ใช้yumแต่rpmสิ่งที่มีนัยสำคัญที่แพคเกจจะต้องติดตั้ง (ซึ่ง OP ไม่ได้บอกอย่างชัดเจนว่าเป็น สถานการณ์ของเขา) เขาเพียงแค่สร้าง rpm == dpkg / yum == apt การเปรียบเทียบแบบขนานเพื่ออธิบายสิ่งนี้ในกรณีที่บางคนคุ้นเคยกับบรรจุภัณฑ์ที่ใช้ Debian ไม่ใช่บรรจุภัณฑ์ที่ใช้ RH
TNE

3
^ 1 เพราะด้วยเหตุผลบางอย่างงานนี้และคำตอบที่ยอมรับไม่ส่งผลอะไรเลย
Izkata

2
ดูเหมือนว่าไม่มีคำสั่งyumเทียบเท่าrpm -qlและrepoquery -l(จากyum-utilsแพ็คเกจ) เพื่อแสดงรายการไฟล์ในตัวเครื่องและรีโมทตามลำดับ


31

ฉันไม่คิดว่าคุณสามารถแสดงรายการเนื้อหาของแพ็คเกจโดยใช้ yum ได้ แต่ถ้าคุณมีไฟล์. rpm ในระบบโลคัลของคุณ (เป็นไปได้มากว่าเป็นกรณีของแพ็คเกจที่ติดตั้งทั้งหมด) คุณสามารถใช้คำสั่ง rpm เพื่อแสดงรายการ เนื้อหาของแพ็คเกจนั้นเป็นเช่นนั้น:

rpm -qlp /path/to/fileToList.rpm

หากคุณไม่มีไฟล์แพ็กเกจ (.rpm) แต่ติดตั้งแพ็กเกจไว้ให้ลองทำดังนี้:

rpm -ql packageName

24
หากคุณไม่มีไฟล์แพ็กเกจ (.rpm) แต่คุณได้ติดตั้งแพ็กเกจแล้วให้ลอง rpm -ql packageName
Jared Updike

1
หากคุณไม่มีแพ็คเกจและไม่ได้ติดตั้งคุณสามารถค้นหา URL ของแพ็คเกจyoudownload --urlsได้
kamae

นั่นควรเป็นyumdownloader --urls
Evgeni Sergeev

3

มีคำตอบที่ดีหลายข้อที่นี่ดังนั้นขอให้ฉันตอบแย่มาก:

: 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

ยำไม่มีแพ็คเกจเป็นของตัวเอง ยำดำเนินงานและช่วยจัดการ RPM ดังนั้นคุณสามารถใช้ yum เพื่อแสดงรายการ RPM ที่มีอยู่จากนั้นรันคำสั่ง rpm -qlp เพื่อดูเนื้อหาของแพ็กเกจนั้น


0

ปัจจุบันreopqueryถูกรวมเข้ากับdnfและyumดังนั้นการพิมพ์:

dnf repoquery -l <pkg-name>

จะแสดงรายการเนื้อหาของแพคเกจจากพื้นที่เก็บข้อมูลระยะไกล (แม้สำหรับแพ็คเกจที่ยังไม่ได้ติดตั้ง)

หมายถึงการติดตั้งแยกต่างหากdnf-utilsหรือyum-utilsแพคเกจไม่จำเป็นสำหรับฟังก์ชั่นอีกต่อไปตามที่ได้รับการสนับสนุนในขณะนี้


สำหรับรายการที่ติดตั้งหรือท้องถิ่น (*.rpmไฟล์) เนื้อหาแพคเกจมีrpm -ql

ฉันไม่คิดว่ามันเป็นไปได้กับyumorg dnf(ไม่repoqueryสั่งย่อย)

โปรดแก้ไขฉันหากฉันผิด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.