Hangi rpm paketinin aradığım bir dosyayı sağladığını nasıl bulabilirim?


207

Örnek olarak, mod_files.shmuhtemelen php-develpaketle birlikte gelen bir dosya arıyorum . Dosyayı paketle yumyükleyeceğini tahmin ettim , ancak dosya dosya sistemime yüklenmemiş gibi görünüyor.mod_files.shphp-devel x86_64 5.1.6-23.2.el5_3

Hangi paketin belirli bir dosyayı yüklediğini nasıl öğrenebilirim? Ben mutlaka yerel olarak aradığım dosyayı içerebilir paketi indirmedim değil arıyorum.

CentOS 5 kullanıyorum.


7
superuser.com ___?
Grzegorz Oledzki

@Grzegorz İyi bir nokta, hareket etmek için oy verdim.
rjh

İşte daha iyi bir cevap: unix.stackexchange.com/a/4706/39281
Sam Watkins

1
@SamWatkins bu yanıtı yalnızca aradığınız dosyayı sağlayan paket zaten sistemde kurulu ise çalışır. Paket kurulu değilse (OP'nin dediği gibi) kullanamazsınız rpm, kullanmanız gerekir yum.
rjh

Yanıtlar:


266

Bu eski bir soru, ama mevcut cevaplar yanlış :)

İstediğiniz dosyanın (joker karakterli olabilir) mutlak yolunu kullanarak yum whatprovides işlevini kullanın . Örneğin:

yum whatprovides '*bin/grep'

İadeler

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

Pakette bulunan repoqueryaletin çıktısını ve hızını tercih edebilirsiniz 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 paket içeriğini listeleme, bağımlılıklar, ters bağımlılıklar vb. gibi diğer sorguları yapabilir.


199

Önceden yüklenmiş bir dosyanın sahibi (veya sağlanması) paketini bilmek için:

rpm -qf myfilename

4
bu komut yum sağlayan ne daha verimli görünüyor - muhtemelen yavaş depolardan güncelleme almak gerek yok.
80x25

Bu sürüm ayrıca openSUSE gibi
rpm'leri

5
Bana göre rpm -qf <filename>, hangi paketin yüklü bir uygulama sağladığını belirlemek için en uygun (mevcut yum depo önbelleğindekinden farklı olabileceğinden) ve yum whatprovides <filename>hangi paketin henüz yüklenmemiş olduğunu belirlemeye en uygun olanı uygulama. Her birinin kendi amacı vardır.
StockB

Ayrıca, yum whatprovides ...yalnızca uygulama bir kök paketiyse (yani içinde bulunuyorsa /sbin) root gerektirir . Ancak, rpm -qf ...rpms okumak için de root gerektirir /sbin. Bu nedenle, kök gereksinimlerinin her iki yöntem için işlevsel olarak eşdeğer olduğunu öneriyorum.
StockB

1
Bu komutu kullanan herkes, yalnızca dosya adını değil, tam dosya yolunu + dosya adını kullanmanız gerektiğini lütfen unutmayın.
Ashish

31

En popüler cevap eksik:

Bu arama genellikle yalnızca kurulu paketlerdeki dosyalar için gerçekleştirileceğinden, tüm harici depoları devre dışı bırakarak ( ör. "Kurulu" repo devre dışı bırakılamaz) yum whatprovides hızlı bir şekilde yapılır.

yum --disablerepo=* whatprovides <file>

4
Ancak bu durumda, OP özellikle sistemde yüklü olmayan eksik bir dosya arıyor , hatta sahip olacağını düşündüğü bir paket kurduktan sonra bile kullanamıyor--disablerepo=*
Randall

4

Http://www.rpmfind.net adresine gidin ve dosyayı arayın.

Birçok farklı dağıtım ve sürüm için sonuç alırsınız, ancak büyük olasılıkla Fedora ve / veya CentOS da açılır ve yum ile yüklenecek paket adını bilirsiniz


Bu web sitesi çevrimdışı!
Peter

1
Web sitesi dosyaları arıyor gibi görünmüyor; yalnızca arama terimi olan paket adları.
jww

1
@jww Dosya aramak en azından benim için iyi çalışıyor. Dokümanlarda belirtildiği gibi, yürütülebilir dosyaları tek yol adlarına veya mutlak yol adına sahip herhangi bir dosyaya göre arayabilirsiniz.
nos

4

İnternete (depo) bağlandığınızda paketi bulmak kolaydır, ancak yalnızca Redhat veya Centos DVD içindeki RPM paketlerine erişiminiz olduğunda (bir sunucuyu kurtarmam gerektiğinde ve bir uygulamaya ihtiyacım olduğunda bu sık sık olur) İnternet ve depolardan tamamen bağımsız olan aşağıdaki komutları kullanarak. (muhtemelen bir DVD'de kaldırılmış çok sayıda paketiniz var). Diyelim ki ~ / cent_os_dvd'deki Package klasörünü kurdunuz ve "semanage" sağlayan bir paket arıyorsunuz:

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

Bunu hem burada hem de paketinizle yapabilirsiniz. Benim durumumdalsb_release

Çalıştırmak: yum whatprovides lsb_release

Tepki:

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`

Yüklemek için çalıştırın: yum install redhat-lsb-core

Paket adı numarasız ve sistem tipi olmadan olmalıdır, bu yüzden yum paketleyici onun için en iyisini seçebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.