Comment puis-je trouver quel package rpm fournit un fichier que je recherche?


207

À titre d'exemple, je recherche un mod_files.shfichier qui viendrait vraisemblablement avec le php-develpaquet. J'ai deviné que yumcela installerait le mod_files.shfichier avec le php-devel x86_64 5.1.6-23.2.el5_3package, mais le fichier ne semble pas être installé sur mon système de fichiers.

Comment savoir quel package installe un fichier spécifique? Je cherche où je n'ai pas nécessairement déjà téléchargé localement le package qui peut inclure le fichier que je recherche.

J'utilise CentOS 5.


7
superuser.com ___?
Grzegorz Oledzki

@Grzegorz Bon point, j'ai mis un vote pour me déplacer.
rjh

voici une meilleure réponse: unix.stackexchange.com/a/4706/39281
Sam Watkins

1
@SamWatkins cette réponse ne fonctionnera que si le package qui fournit le fichier que vous recherchez est déjà installé sur le système. Si le paquet n'est pas installé (comme le dit l'OP), vous ne pouvez pas l'utiliser rpm, vous devez l'utiliser yum.
rjh

Réponses:


266

C'est une vieille question, mais les réponses actuelles sont incorrectes :)

Utilisez yum whatprovides , avec le chemin absolu du fichier que vous souhaitez (qui peut être un caractère générique). Par exemple:

yum whatprovides '*bin/grep'

Retour

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

Vous pouvez préférer la sortie et la vitesse de l' repoqueryoutil, disponibles dans le yum-utilspackage.

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 peut faire d'autres requêtes telles que lister le contenu du package, les dépendances, les dépendances inverses, etc.


199

Pour connaître le package possédant (ou fournissant) un fichier déjà installé:

rpm -qf myfilename

4
cette commande semble être plus efficace que ce que fournit yum - pas besoin d'obtenir des mises à jour à partir de référentiels éventuellement lents.
80x25

Cette version fonctionne également sur les distributions non basées sur redhat qui utilisent toujours des tr / min tels que openSUSE
simotek

5
Il me semble que rpm -qf <filename>c'est le mieux adapté pour déterminer quel package fournit une application installée (car il peut être différent de ce qui se trouve dans le cache du référentiel yum actuel), et yum whatprovides <filename>est le mieux adapté pour déterminer quel package fournit un encore à installer application. Chacun a son propre but.
StockB

En outre, yum whatprovides ...nécessite uniquement root si l'application est un package racine (c'est-à-dire qu'il réside dans /sbin). Cependant, rpm -qf ...nécessite également root pour lire les rpms /sbin. Par conséquent, je propose que les exigences de racine soient fonctionnellement équivalentes pour les deux méthodes.
StockB

1
Si vous utilisez cette commande, veuillez noter que vous devez utiliser le chemin d'accès complet au fichier + le nom de fichier, et pas seulement le nom du fichier.
Ashish

31

La réponse la plus populaire est incomplète:

Étant donné que cette recherche ne sera généralement effectuée que pour les fichiers des packages installés, yum whatprovides est rendu extrêmement rapide en désactivant tous les dépôts externes (le dépôt implicite "installé" ne peut pas être désactivé).

yum --disablerepo=* whatprovides <file>

4
Dans ce cas, cependant, l'OP recherche spécifiquement un fichier manquant qui n'a pas été installé sur le système, même après avoir installé un paquet qu'il pensait l'avoir, donc il ne peut pas l'utiliser--disablerepo=*
Randall

4

Vous allez sur http://www.rpmfind.net et recherchez le fichier.

Vous obtiendrez des résultats pour de nombreuses distributions et versions différentes, mais il est fort probable que Fedora et / ou CentOS apparaîtront également et vous connaîtrez le nom du package à installer avec yum


Ce site internet est hors-ligne!
Peter

1
Le site Web ne semble pas rechercher des fichiers; uniquement les noms de package avec le terme de recherche.
jww

1
@jww La recherche de fichiers fonctionne très bien pour moi au moins. Comme le dit la documentation, vous pouvez rechercher des exécutables par leur nom de chemin unique ou tout fichier avec le nom de chemin absolu.
nos

4

Eh bien, trouver le package lorsque vous êtes connecté à Internet (référentiel) est facile, mais lorsque vous n'avez accès qu'aux packages RPM dans Redhat ou Centos DVD (cela m'arrive fréquemment lorsque je dois récupérer un serveur et j'ai besoin d'une application), je recommande en utilisant les commandes ci-dessous qui sont complètement indépendantes d'Internet et des référentiels. (supposément, vous avez beaucoup de packages désinstallés sur un DVD). Supposons que vous ayez monté le dossier Package dans ~ / cent_os_dvd et que vous cherchiez un package fournissant "semanage", vous pouvez exécuter:

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

Vous pouvez le faire de la même manière ici mais avec votre package. Dans mon cas, c'étaitlsb_release

Courir: yum whatprovides lsb_release

Réponse:

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`

Exécutez pour installer: yum install redhat-lsb-core

Le nom du package DEVRAIT être sans numéro et sans type de système afin que yum packager puisse choisir ce qui lui convient le mieux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.