2009-07-15 13 views
176

Als Beispiel suche ich nach einer mod_files.sh Datei, die vermutlich mit dem php-devel Paket kommen würde. Ich vermute, dass yum würde die mod_files.sh Datei mit dem php-devel x86_64 5.1.6-23.2.el5_3-Paket installieren, aber die Datei scheint nicht auf meinem Dateisystem installiert werden.Wie finde ich heraus, welches RPM-Paket eine Datei enthält, nach der ich suche?

Wie finde ich heraus, welches Paket eine bestimmte Datei installiert? Ich suche, wo ich nicht unbedingt schon lokal das Paket heruntergeladen habe, das die gesuchte Datei enthalten kann.

Ich bin mit CentOS 5.

+6

superuser.com ___? –

+0

@Grzegorz Guter Punkt, ich habe eine Stimme abgegeben, um zu bewegen. – rjh

+0

hier ist eine bessere Antwort: http://unix.stackexchange.com/a/4706/39281 –

Antwort

156

das Paket Um zu wissen, zu besitzen (oder Bereitstellung) eine bereits installierte Datei:

rpm -qf myfilename 

Hinweis: Dieser Befehl erfordert nicht als root ausgeführt werden (auf das Gegenteil von sudo yum whatprovides myfilename)

+10

Hiermit wird angegeben, welche Pakete eine bereits installierte Datei besitzen (oder zur Verfügung gestellt haben). Zum Glück, das war, was ich gesucht habe! –

+9

'yum whatprovides ...' braucht keine root – drs

+3

dieser Befehl sieht effizienter zu sein als yum whatprovides - keine Notwendigkeit, Updates von möglicherweise langsamen Repositories zu bekommen. – 80x25

1

Sie gehen zu http://www.rpmfind.net und suchen Sie nach der Datei.

Sie werden Ergebnisse erhalten für viele verschiedene Distributionen und Versionen, aber sehr wahrscheinlich, Fedora und/oder CentOS wird Pop-up, und Sie werden den Paketnamen kennen, mit yum zu installieren

+0

Diese Website ist offline! – Peter

+1

Die Website scheint nicht nach Dateien zu suchen. Nur Paketnamen mit dem Suchbegriff. – jww

+1

@jww Suche nach Dateien funktioniert gut für mich zumindest. Wie die Dokumentation sagt, können Sie nach ausführbaren Dateien anhand ihres einzelnen Pfadnamens oder einer Datei mit dem absoluten Pfadnamen suchen. – nos

226

Dies ist ein alter Frage, aber die aktuellen Antworten sind falsch :)

Verwenden Sie yum whatprovides, mit dem absoluten Pfad zu der Datei, die Sie wollen (die möglicherweise wildcarded). Zum Beispiel:

yum whatprovides '*bin/grep' 

Returns

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

Sie können die Leistung und Geschwindigkeit des repoquery Werkzeug, in dem yum-utils Paket bevorzugen.

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 können weitere Abfragen tun wie Auflistung Packgut, Abhängigkeiten, Reverse-Abhängigkeiten usw.

3

Nun, das Paket zu finden, wenn Sie mit dem Internet (Repository) verbunden sind, ist jedoch einfach, wenn man nur haben Zugriff auf RPM-Pakete in Redhat oder Centos DVD (dies passiert mir oft, wenn ich einen Server wiederherstellen muss und ich brauche eine Anwendung) Ich empfehle die folgenden Befehle, die völlig unabhängig von Internet und Repositories sind. (Möglicherweise haben Sie viele nicht installierte Pakete auf einer DVD). Angenommen, Sie haben Ordner Paket montiert in ~/cent_os_dvd und Sie sind für ein Paket suchen, „semanage“ bietet, dann können Sie laufen:

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 
22

Die populärste Antwort ist unvollständig:

Da diese Suche wird in der Regel nur für Dateien von installierten Paketen durchgeführt, yum whatprovides wird blitzartig schnell gemacht, indem alle externen Repos deaktiviert werden (der implizite "installierte" Repo kann nicht deaktiviert werden).

yum --disablerepo=* whatprovides <file> 
+0

In diesem Fall sucht das OP jedoch gezielt nach einer fehlenden Datei **, die ** nicht auf dem System installiert wurde, selbst nach der Installation eines Pakets, von dem er dachte, dass er es haben würde. Daher kann er '--disablerepo = nicht verwenden * ' – Randall

Verwandte Themen