Par exemple, je cherche un fichier mod_files.sh
qui viendrait probablement avec le package php-devel
. J'ai deviné que yum
installerait le fichier mod_files.sh
avec le paquetage php-devel x86_64 5.1.6-23.2.el5_3
, mais le fichier ne semble pas être installé sur mon système de fichiers.
Comment savoir quel paquet installe un fichier spécifique? Je cherche où je n'ai pas nécessairement déjà téléchargé localement le paquet qui peut contenir le fichier que je cherche.
J'utilise CentOS 5.
C'est une vieille question, mais les réponses actuelles sont incorrectes :)
Utilisez yum whatprovides , avec le chemin absolu du fichier souhaité (qui peut comporter des caractères génériques). Par exemple:
yum whatprovides '*bin/grep'
Résultats
grep-2.5.1-55.el5.x86_64 : The GNU versions of grep pattern matching utilities.
Repo : base
Matched from:
Filename : /bin/grep
Vous préférerez peut-être la sortie et la vitesse de l'outil repoquery
, disponible dans le package 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
peut effectuer d'autres requêtes telles que lister le contenu du paquet, les dépendances, les dépendances inverses, etc.
Pour connaître le package possédant (ou fournissant) un fichier déjà installé:
rpm -qf myfilename
Remarque: cette commande n'a pas besoin d'être exécutée en tant que root (contrairement à Sudo yum whatprovides myfilename
)
La réponse la plus populaire est incomplète:
Etant donné que cette recherche sera généralement effectuée uniquement pour les fichiers des packages installés, yum ce qui fournit est rendu extrêmement rapide en désactivant tous les dépôts externes (le référentiel "installé" implicite ne peut pas être désactivé).
yum --disablerepo=* whatprovides <file>
Bien trouver le paquet lorsque vous êtes connecté à Internet (référentiel) est facile, mais lorsque vous n’avez accès qu’aux paquetages RPM dans le DVD Redhat ou Centos (cela m’arrive fréquemment lorsque je dois restaurer un serveur et que j’ai besoin d’une application). Je le recommande. en utilisant les commandes ci-dessous qui sont complètement indépendantes d'Internet et des référentiels. (supposons que vous ayez beaucoup de paquets désinstallés sur un DVD). Supposons que vous ayez monté le dossier Package dans ~/cent_os_dvd et que vous recherchiez un package fournissant "semanage". Vous pouvez ensuite 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
Vous allez sur http://www.rpmfind.net et recherchez le fichier.
Vous obtiendrez des résultats pour un grand nombre de distributions et de versions différentes, mais il est fort probable que Fedora et/ou CentOS apparaîtront également et vous connaîtrez le nom du paquet à installer avec yum.
En utilisant uniquement l'utilitaire rpm, cela devrait fonctionner dans tout système d'exploitation disposant de rpm:
rpm -q --whatprovides [file name]
Vous pouvez faire la même chose ici mais avec votre paquet. Dans mon cas, c'était lsb_release
Exécuter: 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écuter pour installer: yum install redhat-lsb-core
Le nom du paquet DEVRAIT être sans numéro ni type de système afin que le conditionneur yum puisse choisir ce qui lui convient le mieux.