¿Cómo encuentro qué paquete de rpm proporciona un archivo que estoy buscando?

207

Como ejemplo, estoy buscando un mod_files.sharchivo que presumiblemente vendría con el php-develpaquete. Supuse que eso yuminstalaría el mod_files.sharchivo con el php-devel x86_64 5.1.6-23.2.el5_3paquete, pero parece que el archivo no está instalado en mi sistema de archivos.

¿Cómo averiguo qué paquete instala un archivo específico? Estoy buscando donde no necesariamente he descargado localmente el paquete que puede incluir el archivo que estoy buscando.

Estoy usando CentOS 5.

Wherestheph
fuente
77
superuser.com ___?
Grzegorz Oledzki
@Grzegorz Buen punto, he votado para mudarme.
rjh
Aquí hay una mejor respuesta: unix.stackexchange.com/a/4706/39281
Sam Watkins
1
@SamWatkins esa respuesta solo funcionará si el paquete que proporciona el archivo que está buscando ya está instalado en el sistema. Si el paquete no está instalado (como dice el OP), entonces no puede usar rpm, debe usarlo yum.
rjh

Respuestas:

266

Esta es una vieja pregunta, pero las respuestas actuales son incorrectas :)

Use yum whatprovides , con la ruta absoluta al archivo que desea (que puede estar en comodín). Por ejemplo:

yum whatprovides '*bin/grep'

Devoluciones

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

Puede preferir la salida y la velocidad de la repoqueryherramienta, disponible en el yum-utilspaquete.

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 puede hacer otras consultas, como enumerar el contenido del paquete, dependencias, dependencias inversas, etc.

rjh
fuente
199

Para conocer el paquete que posee (o proporciona) un archivo ya instalado:

rpm -qf myfilename
dj_segfault
fuente
44
este comando parece ser más eficiente que yum lo que proporciona: no es necesario obtener actualizaciones de repositorios posiblemente lentos.
80x25
Esta versión también funciona en distribuciones no basadas en redhat que todavía usan rpm como openSUSE
simotek
55
Me parece que rpm -qf <filename>es el más adecuado para determinar qué paquete proporciona una aplicación instalada (ya que puede ser diferente de lo que está en la memoria caché del repositorio yum actual), y yum whatprovides <filename>es el más adecuado para determinar qué paquete proporciona una aplicación aún por instalar solicitud. Cada uno tiene su propio propósito.
StockB
Además, yum whatprovides ...solo requiere root si la aplicación es un paquete raíz (es decir, reside en /sbin). Sin embargo, rpm -qf ...también requiere root para leer rpms /sbin. Por lo tanto, propongo que los requisitos raíz sean funcionalmente equivalentes para ambos métodos.
StockB
1
Cualquiera que use este comando, tenga en cuenta que debe usar la ruta completa del archivo + nombre del archivo, y no solo el nombre del archivo.
Ashish
31

La respuesta más popular es incompleta:

Dado que esta búsqueda generalmente se realizará solo para archivos de paquetes instalados, yum whatprovides se hace increíblemente rápido al deshabilitar todos los repositorios externos (el repositorio implícito "instalado" no se puede deshabilitar).

yum --disablerepo=* whatprovides <file>
usuario93374
fuente
44
En este caso, sin embargo, el OP está buscando específicamente un archivo faltante que no se instaló en el sistema, incluso después de instalar un paquete que pensó que lo tendría, por lo que no puede usarlo--disablerepo=*
Randall
4

Usted va a http://www.rpmfind.net y busca el archivo.

Obtendrá resultados para muchas distribuciones y versiones diferentes, pero es muy probable que también aparezca Fedora y / o CentOS, y sabrá el nombre del paquete para instalar con yum

nos
fuente
¡Esta página web se encuentra fuera de línea!
Peter
1
El sitio web no parece buscar archivos; solo nombres de paquetes con el término de búsqueda.
jww
1
@jww Buscar archivos funciona bien para mí al menos. Como dice la documentación, puede buscar ejecutables por su nombre de ruta único o cualquier archivo con el nombre de ruta absoluto.
nos
4

Bueno, encontrar el paquete cuando está conectado a Internet (repositorio) es fácil, sin embargo, cuando solo tiene acceso a paquetes RPM dentro de Redhat o Centos DVD (esto me sucede con frecuencia cuando tengo que recuperar un servidor y necesito una aplicación). Recomiendo utilizando los siguientes comandos, que es completamente independiente de internet y repositorios. (supuestamente tiene muchos paquetes desinstalados en un DVD). Supongamos que ha montado la carpeta Paquete en ~ / cent_os_dvd y está buscando un paquete que proporcione "semanage", entonces puede ejecutar:

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
fuente
0

Puedes hacer esto por igual aquí pero con tu paquete. En mi caso, fuelsb_release

Correr: yum whatprovides lsb_release

Respuesta:

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`

Ejecutar para instalar: yum install redhat-lsb-core

El nombre del paquete DEBE estar sin número y tipo de sistema para que yum packager pueda elegir qué es lo mejor para él.

matson kepson
fuente