मुझे कैसे पता चलेगा कि आरपीएम पैकेज किस फ़ाइल की आपूर्ति करता है जिसकी मुझे तलाश है?


207

एक उदाहरण के रूप में, मैं एक mod_files.shफाइल की तलाश कर रहा हूं जो संभवतः php-develपैकेज के साथ आएगी । मैंने अनुमान लगाया कि पैकेज के साथ फाइल yumको इंस्टॉल किया जाएगा , लेकिन फाइल मेरे फाइल सिस्टम पर इंस्टॉल नहीं होती है।mod_files.shphp-devel x86_64 5.1.6-23.2.el5_3

मुझे कैसे पता चलेगा कि कौन सा पैकेज एक विशिष्ट फ़ाइल स्थापित करता है? मैं उस स्थान की तलाश कर रहा हूं जहां मैंने पहले से ही स्थानीय रूप से पैकेज डाउनलोड नहीं किया है जिसमें वह फ़ाइल शामिल हो सकती है जिसे मैं खोज रहा हूं।

मैं CentOS 5 का उपयोग कर रहा हूं।



@Grzegorz अच्छा बिंदु, मैं एक वोट में स्थानांतरित करने के लिए डाल दिया है।
rjh

यहाँ एक बेहतर जवाब है: unix.stackexchange.com/a/4706/39281
सैम वाटकिंस

1
@SamWatkins जो उत्तर देगा वह केवल तभी काम करेगा जब आप जिस फ़ाइल की तलाश कर रहे हैं वह पैकेज सिस्टम पर पहले से इंस्टॉल हो। यदि पैकेज स्थापित नहीं है (जैसा कि ओपी कहता है) तो आप उपयोग नहीं कर सकते rpm, आपको उपयोग करने की आवश्यकता है yum
rjh

जवाबों:


266

यह एक पुराना प्रश्न है, लेकिन वर्तमान उत्तर गलत हैं :)

Yum whatprovides का उपयोग करें , अपनी इच्छित फ़ाइल के पूर्ण पथ के साथ (जो वाइल्डकार्ड हो सकता है)। उदाहरण के लिए:

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

यह संस्करण गैर रेडहैट आधारित डिस्ट्रो पर भी काम करता है जो अभी भी आरपीएम का उपयोग करते हैं जैसे कि ओपनएसयूएसई
सिमोटेक

5
यह मुझे लगता है कि rpm -qf <filename>यह निर्धारित करने के लिए सबसे उपयुक्त है कि कौन सा पैकेज एक स्थापित एप्लिकेशन प्रदान करता है (क्योंकि यह वर्तमान यम रिपॉजिटरी कैश में क्या है की तुलना में भिन्न हो सकता है), और yum whatprovides <filename>यह निर्धारित करने के लिए सबसे उपयुक्त है कि कौन सा पैकेज एक अभी तक स्थापित किया गया है आवेदन। प्रत्येक का अपना उद्देश्य है।
स्टॉकब

इसके अलावा, yum whatprovides ...केवल रूट की आवश्यकता होती है यदि एप्लिकेशन रूट पैकेज है (अर्थात यह अंदर रहता है /sbin)। हालाँकि, rpm -qf ...rpms को पढ़ने के लिए रूट की भी आवश्यकता होती है /sbin। इसलिए, मैं प्रस्ताव करता हूं कि जड़ आवश्यकताएं कार्यात्मक रूप से दोनों विधियों के लिए समान हैं।
स्टॉकब

1
इस कमांड का उपयोग करने वाला कोई भी व्यक्ति, कृपया ध्यान दें कि आपको पूर्ण फ़ाइल पथ + फ़ाइल नाम का उपयोग करना है, न कि केवल फ़ाइल नाम का।
आशीष

31

सबसे लोकप्रिय उत्तर अपूर्ण है:

चूँकि यह खोज आम तौर पर केवल संस्थापित संकुलों की फाइलों के लिए की जाती है, यम whatprovides को सभी बाहरी रेपो को निष्क्रिय करके तेजी से बनाया जाता है (निहित "रेपो" को निष्क्रिय नहीं किया जा सकता है)।

yum --disablerepo=* whatprovides <file>

4
इस मामले में, हालांकि, ओपी विशेष रूप से एक लापता फ़ाइल की तलाश कर रहा है जो सिस्टम पर स्थापित नहीं था , यहां तक ​​कि एक पैकेज स्थापित करने के बाद उसने सोचा कि यह होगा, इसलिए वह उपयोग नहीं कर सकता--disablerepo=*
रान्डेल

4

आप http://www.rpmfind.net पर जाएं और फ़ाइल खोजें।

आपको बहुत सारे डिस्ट्रोस और संस्करणों के परिणाम मिलेंगे, लेकिन काफी संभावना है कि फेडोरा और / या सेंटोस भी पॉप अप करेंगे और आपको yum के साथ स्थापित करने के लिए पैकेज का नाम पता होगा।


यह ऑफलाइन वेबसाइट है!
पीटर

1
वेबसाइट फ़ाइलों की खोज करने के लिए प्रकट नहीं होती है; खोज शब्द के साथ केवल पैकेज नाम।
jww

1
@jww फाइलों की खोज मेरे लिए कम से कम ठीक है। जैसा कि डॉक्स कहते हैं, आप निष्पादन पथ के लिए उनके एकल पथ नाम या निरपेक्ष पथ नाम के साथ किसी भी फ़ाइल को खोज सकते हैं।
nos

4

जब आप इंटरनेट (रिपॉजिटरी) से जुड़े होते हैं तो पैकेज ढूंढना आसान होता है, जब आपके पास केवल Redhat या Centos डीवीडी के अंदर RPM पैकेज तक पहुँच होती है (यह मेरे साथ अक्सर होता है जब मुझे सर्वर को पुनर्प्राप्त करना होता है और मुझे एक एप्लिकेशन की आवश्यकता होती है) नीचे दिए गए आदेशों का उपयोग करना जो पूरी तरह से इंटरनेट और रिपॉजिटरी से स्वतंत्र है। (संभवतः आपके पास डीवीडी में बहुत सारे अनइंस्टॉल किए गए पैकेज हैं)। मान लें कि आपने ~ / cent_os_dvd में पैकेज फ़ोल्डर माउंट किया है और आप एक ऐसे पैकेज की तलाश कर रहे हैं जो "सीमेन" प्रदान करता है, तो आप चला सकते हैं:

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

Daud: 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

पैकेज का नाम नंबर और सिस्टम प्रकार के बिना होना चाहिए ताकि yum packager उसके लिए सबसे अच्छा विकल्प चुन सके।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.