ฉันจะค้นหาแพ็คเกจ rpm ที่จัดส่งไฟล์ที่ฉันกำลังค้นหาได้อย่างไร


207

ตัวอย่างเช่นฉันกำลังมองหาmod_files.shไฟล์ที่น่าจะมาพร้อมกับphp-develแพคเกจ ฉันเดาว่าyumจะติดตั้งmod_files.shไฟล์ด้วยphp-devel x86_64 5.1.6-23.2.el5_3แพ็คเกจ แต่ดูเหมือนว่าไฟล์จะไม่ได้รับการติดตั้งในระบบไฟล์ของฉัน

ฉันจะค้นหาแพ็คเกจที่ติดตั้งไฟล์เฉพาะได้อย่างไร ฉันกำลังมองหาที่ที่ไม่จำเป็นต้องดาวน์โหลดแพคเกจภายในเครื่องซึ่งอาจรวมถึงไฟล์ที่ฉันกำลังค้นหาอยู่

ฉันใช้ CentOS 5


7
superuser.com ___?
Grzegorz Oledzki

@Grzegorz จุดที่ดีฉันได้ลงคะแนนเพื่อย้าย
rjh

นี่เป็นคำตอบที่ดีกว่า: unix.stackexchange.com/a/4706/39281
Sam Watkins

1
@ SamWatkins คำตอบนั้นจะใช้ได้ก็ต่อเมื่อแพ็คเกจที่จัดหาไฟล์ที่คุณกำลังค้นหาติดตั้งอยู่ในระบบ ถ้าแพคเกจไม่ได้ติดตั้ง (ตามที่กล่าว OP) แล้วคุณจะไม่สามารถใช้คุณจำเป็นต้องใช้rpm yum
rjh

คำตอบ:


266

นี่เป็นคำถามเก่า แต่คำตอบปัจจุบันไม่ถูกต้อง :)

ใช้yum whatprovidesพร้อมพา ธ สัมบูรณ์ไปยังไฟล์ที่คุณต้องการ (ซึ่งอาจเป็น wildcard) ตัวอย่างเช่น:

yum whatprovides '*bin/grep'

ผลตอบแทน

grep-2.5.1-55.el5.x86_64 : The GNU versions of grep pattern matching utilities.
Repo        : base
Matched from:
Filename    : /bin/grep

คุณอาจต้องการผลลัพธ์และความเร็วของrepoqueryเครื่องมือที่มีอยู่ในyum-utilsแพ็คเกจ

sudo yum install yum-utils
repoquery --whatprovides '*bin/grep'
grep-0:2.5.1-55.el5.x86_64
grep-0:2.5.1-55.el5.x86_64

repoquery สามารถทำแบบสอบถามอื่น ๆ เช่นการแสดงรายการเนื้อหาของแพ็คเกจการพึ่งพาการพึ่งพาแบบย้อนกลับและอื่น ๆ


199

หากต้องการทราบว่าเป็นเจ้าของแพคเกจ (หรือการให้) ไฟล์ที่ติดตั้งแล้ว:

rpm -qf myfilename

4
คำสั่งนี้ดูเหมือนว่าจะมีประสิทธิภาพมากกว่า yum whatprovides - ไม่จำเป็นต้องรับการอัพเดตจากที่เก็บที่อาจช้า
80x25

รุ่นนี้ยังใช้งานได้กับ distro ที่ไม่ใช่ redhat ที่ยังคงใช้ rpm เช่น openSUSE
simotek

5
ดูเหมือนว่าฉันrpm -qf <filename>จะเหมาะที่สุดสำหรับการพิจารณาว่าแพ็กเกจใดมีแอปพลิเคชันที่ติดตั้งไว้ (เนื่องจากอาจแตกต่างจากที่อยู่ในแคชที่เก็บ yum ปัจจุบัน) และyum whatprovides <filename>เหมาะที่สุดสำหรับการพิจารณาว่าแพ็คเกจใดที่มีการติดตั้ง ใบสมัคร แต่ละคนมีจุดประสงค์ของตัวเอง
StockB

นอกจากนี้yum whatprovides ...ต้องใช้รูทหากแอปพลิเคชันเป็นแพ็กเกจรูท (เช่นมีอยู่/sbin) แต่rpm -qf ...ยังต้องมีรากในการอ่าน RPMs /sbinจาก ดังนั้นฉันเสนอว่าความต้องการของรูทนั้นเทียบเท่ากับทั้งสองวิธี
StockB

1
ทุกคนที่ใช้คำสั่งนี้โปรดทราบว่าคุณต้องใช้ไฟล์พา ธ เต็ม + ชื่อไฟล์ไม่ใช่แค่ชื่อไฟล์
Ashish

31

คำตอบที่ได้รับความนิยมสูงสุดไม่สมบูรณ์:

เนื่องจากโดยทั่วไปแล้วการค้นหานี้จะดำเนินการเฉพาะกับไฟล์จากแพ็คเกจที่ติดตั้งไว้yum whatprovidesนั้นทำขึ้นอย่างรวดเร็วโดยปิดการใช้งาน repos ภายนอกทั้งหมด (repo "ติดตั้ง" โดยปริยายไม่สามารถปิดการใช้งาน)

yum --disablerepo=* whatprovides <file>

4
ในกรณีนี้ OP กำลังมองหาไฟล์ที่หายไปซึ่งไม่ได้ติดตั้งไว้ในระบบโดยเฉพาะแม้หลังจากติดตั้งแพคเกจที่เขาคิดว่าจะมีอยู่แล้วเขาจึงไม่สามารถใช้งานได้--disablerepo=*
Randall

4

คุณไปที่http://www.rpmfind.netและค้นหาไฟล์

คุณจะได้รับผลลัพธ์สำหรับ distros และรุ่นต่าง ๆ มากมาย แต่ Fedora และ / หรือ CentOS ค่อนข้างจะปรากฏขึ้นและคุณจะรู้ชื่อแพ็คเกจที่จะติดตั้งกับ yum


เว็บไซต์นี้ออฟไลน์!
ปีเตอร์

1
เว็บไซต์ไม่ปรากฏขึ้นเพื่อค้นหาไฟล์; เฉพาะชื่อแพ็คเกจที่มีข้อความค้นหา
jww

1
@jww การค้นหาไฟล์ทำงานได้ดีสำหรับฉันอย่างน้อย ตามที่เอกสารระบุไว้คุณสามารถค้นหาไฟล์ที่เรียกใช้งานได้ด้วยชื่อพา ธ เดียวหรือไฟล์ใด ๆ ที่มีชื่อพา ธ สัมบูรณ์
เลขที่

4

การค้นหาแพ็คเกจเมื่อคุณเชื่อมต่ออินเทอร์เน็ต (พื้นที่เก็บข้อมูล) นั้นง่าย แต่เมื่อคุณเข้าถึงแพ็คเกจ RPM ภายใน Redhat หรือ Centos DVD (เกิดขึ้นบ่อยครั้งกับฉันเมื่อฉันต้องกู้คืนเซิร์ฟเวอร์และฉันต้องการแอปพลิเคชัน) ฉันแนะนำ ใช้คำสั่งด้านล่างซึ่งเป็นอิสระจากอินเทอร์เน็ตและที่เก็บ (สมมติว่าคุณมีแพ็กเกจที่ถอนการติดตั้งจำนวนมากใน DVD) สมมติว่าคุณติดตั้งโฟลเดอร์ Package ใน ~ / cent_os_dvd และคุณกำลังมองหาแพ็คเกจที่มี "semanage" จากนั้นคุณสามารถเรียกใช้:

for file in `find ~/cent_os_dvd/ -iname '*.rpm'`;  do rpm -qlp $file |grep '.*bin/semanage';  if [ $? -eq 0 ]; then echo "is in";echo $file  ; fi;  done


0

คุณสามารถทำสิ่งนี้ได้ที่นี่ แต่ด้วยแพ็คเกจของคุณ ในกรณีของฉันมันเป็นlsb_release

วิ่ง: yum whatprovides lsb_release

การตอบสนอง:

redhat-lsb-core-4.1-24.el7.i686 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-24.el7.x86_64 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.i686 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release

redhat-lsb-core-4.1-27.el7.x86_64 : LSB Core module support
Repo        : rhel-7-server-rpms
Matched from:
Filename    : /usr/bin/lsb_release`

รันเพื่อติดตั้ง: yum install redhat-lsb-core

ชื่อแพ็กเกจควรไม่มีหมายเลขและประเภทของระบบเพื่อให้ผู้ทำแพ็กเกจยำสามารถเลือกสิ่งที่ดีที่สุดสำหรับเขาได้

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