¿Cómo enumerar el contenido de un paquete usando YUM?

320

Sé cómo usar rpm para enumerar el contenido de un paquete ( rpm -qpil package.rpm). Sin embargo, esto requiere conocer la ubicación del archivo .rpm en el sistema de archivos. Una solución más elegante sería usar el administrador de paquetes, que en mi caso es YUM. ¿Cómo se puede utilizar YUM para lograr esto?

Lorin Hochstein
fuente
8
Sin el -pparam ( rpm -ql packageName) no necesita saber la ubicación del archivo rpm. Es prácticamente la forma más fácil de obtener "todas" las rutas de un paquete. Para algunos resultados de ejemplo, vea mi respuesta .
Levite
Desafortunadamente eso solo funciona con paquetes instalados
WallStProg

Respuestas:

438

Hay un paquete llamado yum-utilsque se basa en YUM y contiene una herramienta llamada repoqueryque puede hacer esto.

$ repoquery --help | grep -E "list\ files" 
  -l, --list            list files in this package/group

Combinado en un ejemplo:

$ repoquery -l time
/usr/bin/time
/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz

En al menos un sistema RH, con rpm v4.8.0, yum v3.2.29 y repoquery v0.0.11, repoquery -l rpmno imprime nada.

Si tiene este problema, trate de añadir la --installedbandera: repoquery --installed -l rpm.


DNF Actualizar:

Para usar en dnflugar de yum-utils, use el siguiente comando:

$ dnf repoquery -l time
/usr/bin/time
/usr/share/doc/time-1.7
/usr/share/doc/time-1.7/COPYING
/usr/share/doc/time-1.7/NEWS
/usr/share/doc/time-1.7/README
/usr/share/info/time.info.gz
Thomas Vander Stichele
fuente
12
Tenga en cuenta que este comando fallará silenciosamente si el paquete nombrado no existe realmente.
Joshua Hoblitt
17
Para buscar más rápidamente los paquetes instalados, incluya la opción --instalada. por ej $ repoquery -lq --installed time.
Mohsenme
Nota: el nombre del paquete distingue entre mayúsculas y minúsculas
Putnik
77
Debería agregarse como una característica de yum, IMO.
Lqueryvg
1
¿Por qué instalar un nuevo paquete cuando puedes usarlo rpm -ql $PACKAGE_NAME?
isapir
159
rpm -ql [packageName]

Ejemplo

# rpm -ql php-fpm

/etc/php-fpm.conf
/etc/php-fpm.d
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
...
/run/php-fpm
/usr/lib/systemd/system/php-fpm.service
/usr/sbin/php-fpm
/usr/share/doc/php-fpm-5.6.0
/usr/share/man/man8/php-fpm.8.gz
...
/var/lib/php/sessions
/var/log/php-fpm

No es necesario instalar yum-utils ni conocer la ubicación del archivo rpm.

Levita
fuente
44
Esto parece ser el equivalente de dpkg -Ltodos los que no quieran instalar otro paquete solo para enumerar los archivos.
Dmitry Minkovsky
55
@dimadima: La pregunta era para yum (= RHEL sistemas basados), que utiliza rpmcomo gestor de paquetes nativo ( R ed Sombrero P Acket M anager). Si el OP estaría en un sistema debian / ubuntu / .., dpkgsería el camino a seguir, ya que es el back-end de apt .
Levite el
2
@Levit: Estoy bastante seguro de que lo que Dimadima está tratando de decir es que esto no responde estrictamente a la pregunta: no está utilizando, yumpero lo rpmque tiene la mayor implicación de que el paquete debe instalarse (lo que OP no dijo explícitamente era su escenario) Simplemente estaba haciendo la comparación paralela rpm == dpkg / yum == apt para explicar esto en caso de que alguien estuviera familiarizado con el empaquetado basado en Debian y no con el empaquetado basado en RH.
TNE
3
^ 1 porque por alguna razón, esto funciona y la respuesta aceptada no devuelve nada
Izkata,
2
Parece que no hay comandos yumequivalentes rpm -qly repoquery -l(del yum-utilspaquete) para enumerar archivos locales y remotos, respectivamente.
78
$ yum install -y yum-utils

$ repoquery -l packagename
Hüseyin Ozan TOK
fuente
31

No creo que pueda enumerar el contenido de un paquete usando yum, pero si tiene el archivo .rpm en su sistema local (como probablemente sea el caso para todos los paquetes instalados), puede usar el comando rpm para enumerar el contenido de ese paquete así:

rpm -qlp /path/to/fileToList.rpm

Si no tiene el archivo del paquete (.rpm), pero tiene el paquete instalado, intente esto:

rpm -ql packageName
Thomi
fuente
24
si no tiene el archivo del paquete (.rpm), pero tiene el paquete instalado, intente rpm -ql packageName
Jared Updike
1
si no tiene el paquete y no está instalado, puede encontrar la url del paquete con youdownload --urls.
kamae
Eso debería seryumdownloader --urls
Evgeni Sergeev
3

Aquí hay varias buenas respuestas, así que permítanme proporcionar una terrible:

: you can type in anything below, doesnt have to match anything

yum whatprovides "me with a life"

: result of the above (some liberties taken with spacing):

Loaded plugins: fastestmirror
base | 3.6 kB 00:00 
extras | 3.4 kB 00:00 
updates | 3.4 kB 00:00 
(1/4): extras/7/x86_64/primary_db | 166 kB 00:00 
(2/4): base/7/x86_64/group_gz | 155 kB 00:00 
(3/4): updates/7/x86_64/primary_db | 9.1 MB 00:04 
(4/4): base/7/x86_64/primary_db | 5.3 MB 00:05 
Determining fastest mirrors
 * base: mirrors.xmission.com
 * extras: mirrors.xmission.com
 * updates: mirrors.xmission.com
base/7/x86_64/filelists_db | 6.2 MB 00:02 
extras/7/x86_64/filelists_db | 468 kB 00:00 
updates/7/x86_64/filelists_db | 5.3 MB 00:01 
No matches found

: the key result above is that "primary_db" files were downloaded

: filelists are downloaded EVEN IF you have keepcache=0 in your yum.conf

: note you can limit this to "primary_db.sqlite" if you really want

find /var/cache/yum -name '*.sqlite'

: if you download/install a new repo, run the exact same command again
: to get the databases for the new repo

: if you know sqlite you can stop reading here

: if not heres a sample command to dump the contents

echo 'SELECT packages.name, GROUP_CONCAT(files.name, ", ") AS files FROM files JOIN packages ON (files.pkgKey = packages.pkgKey) GROUP BY packages.name LIMIT 10;' | sqlite3 -line /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite 

: remove "LIMIT 10" above for the whole list

: format chosen for proof-of-concept purposes, probably can be improved a lot

fuente
0

Yum no tiene su propio tipo de paquete. Yum opera y ayuda a administrar los RPM. Por lo tanto, puede usar yum para enumerar los RPM disponibles y luego ejecutar el comando rpm -qlp para ver el contenido de ese paquete.

Haabda
fuente
0

actualmente reopqueryestá integrado en dnfy yum, por lo que escribe:

dnf repoquery -l <pkg-name>

enumerará el contenido del paquete desde un repositorio remoto (incluso para los paquetes que aún no están instalados)

lo que significa que ya no es necesario instalar un paquete dnf-utilso yum-utilspaquete para la funcionalidad, ya que ahora se admite de forma nativa.


para listar el contenido de paquetes instalados o locales ( *.rpmarchivos) hayrpm -ql

no creo que sea posible con yumorg dnf(no repoquerysubcomando)

Por favor, corríjame si estoy equivocado


fuente