Bagaimana saya menemukan paket rpm mana yang memasok file yang saya cari?

207

Sebagai contoh, saya mencari mod_files.shfile yang mungkin akan datang dengan php-develpaket. Saya kira itu yumakan menginstalmod_files.sh file dengan php-devel x86_64 5.1.6-23.2.el5_3paket, tetapi file tersebut tampaknya tidak diinstal pada sistem file saya.

Bagaimana cara mengetahui paket mana yang menginstal file tertentu? Saya mencari di mana saya belum tentu mengunduh paket secara lokal yang mungkin menyertakan file yang saya cari.

Saya menggunakan CentOS 5.

di mana
sumber
7
superuser.com ___?
Grzegorz Oledzki
@ Grzegorz Poin bagus, saya sudah memilih untuk pindah.
rjh
inilah jawaban yang lebih baik: unix.stackexchange.com/a/4706/39281
Sam Watkins
1
@SamWatkins jawaban itu hanya akan berfungsi jika paket yang memasok file yang Anda cari sudah diinstal pada sistem. Jika paket tidak diinstal (seperti kata OP) maka Anda tidak dapat menggunakan rpm, Anda harus menggunakannya yum.
rjh

Jawaban:

266

Ini adalah pertanyaan lama, tetapi jawaban saat ini salah :)

Gunakan yum whatprovides , dengan jalur absolut ke file yang Anda inginkan (yang mungkin wildcarded). Sebagai contoh:

yum whatprovides '*bin/grep'

Kembali

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

Anda dapat memilih output dan kecepatan repoqueryalat, tersedia dalam yum-utilspaket.

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 dapat melakukan pertanyaan lain seperti daftar isi paket, dependensi, dependensi terbalik, dll.

rjh
sumber
199

Untuk mengetahui paket yang memiliki (atau menyediakan) file yang sudah diinstal:

rpm -qf myfilename
dj_segfault
sumber
4
perintah ini terlihat lebih efisien daripada yum apa yang disediakan - tidak perlu mendapatkan pembaruan dari repositori yang mungkin lambat.
80x25
Versi ini juga berfungsi pada distro berbasis non redhat yang masih menggunakan rpm seperti openSUSE
simotek
5
Sepertinya saya yang rpm -qf <filename>paling cocok untuk menentukan paket mana yang menyediakan aplikasi yang terinstal (karena mungkin berbeda dari apa yang ada dalam cache repositori yum saat ini), dan yum whatprovides <filename>paling cocok untuk menentukan paket mana yang menyediakan paket yang belum diinstal aplikasi. Masing-masing memiliki tujuan masing-masing.
StockB
Selain itu, yum whatprovides ...hanya membutuhkan root jika aplikasi tersebut adalah paket root (yaitu ia berada di /sbin) Namun, rpm -qf ...juga membutuhkan root untuk membaca rpms dari /sbin. Oleh karena itu, saya mengusulkan bahwa persyaratan root secara fungsional setara untuk kedua metode.
StockB
1
Siapa pun yang menggunakan perintah ini, harap dicatat bahwa Anda harus menggunakan path file lengkap + nama file, dan bukan hanya nama file.
Ashish
31

Jawaban paling populer adalah tidak lengkap:

Karena pencarian ini umumnya hanya dilakukan untuk file dari paket yang diinstal, yum apa yang disediakan dibuat sangat cepat dengan menonaktifkan semua repo eksternal (repo "terpasang" implisit tidak dapat dinonaktifkan).

yum --disablerepo=* whatprovides <file>
pengguna93374
sumber
4
Namun dalam kasus ini, OP secara khusus mencari file yang hilang yang tidak diinstal pada sistem, bahkan setelah menginstal paket yang dia pikir akan memilikinya, jadi dia tidak dapat menggunakan--disablerepo=*
Randall
4

Anda pergi ke http://www.rpmfind.net dan mencari file tersebut.

Anda akan mendapatkan hasil untuk banyak distro dan versi yang berbeda, tetapi kemungkinan besar Fedora dan / atau CentOS akan muncul juga dan Anda akan tahu nama paket yang akan diinstal dengan yum

tidak
sumber
Situs web ini offline!
Peter
1
Situs web tampaknya tidak mencari file; hanya nama paket dengan istilah pencarian.
jww
1
@jww Mencari file berfungsi dengan baik untuk saya setidaknya. Seperti yang dikatakan oleh docs, Anda dapat mencari file executable dengan nama path tunggal atau file apa pun dengan nama path absolut.
no.
4

Yah menemukan paket ketika Anda terhubung ke internet (repositori) mudah namun ketika Anda hanya memiliki akses ke paket RPM di dalam Redhat atau Centos DVD (ini sering terjadi pada saya ketika saya harus memulihkan server dan saya membutuhkan aplikasi) Saya sarankan menggunakan perintah di bawah ini yang sepenuhnya independen dari internet dan repositori. (Andai Anda memiliki banyak paket yang tidak diinstal dalam DVD). Katakanlah Anda telah menginstal folder Paket di ~ / cent_os_dvd dan Anda mencari paket yang menyediakan "semanage" maka Anda dapat menjalankan:

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
Arash
sumber
0

Anda dapat melakukan ini sama di sini tetapi dengan paket Anda. Dalam kasus saya, itulsb_release

Lari: yum whatprovides lsb_release

Tanggapan:

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`

Jalankan untuk menginstal: yum install redhat-lsb-core

Nama paket HARUS tanpa nomor dan tipe sistem sehingga pembuat paket yum dapat memilih yang terbaik untuknya.

matson kepson
sumber