Pregunta ¿Cómo verificar con precisión si el paquete está instalado en yum?


Sigo recibiendo respuestas como:

yum list installed | grep bind

o

rpm -qa | grep bind

Pero eso no es exacto ya que obtengo una lista de algunos otros paquetes de enlace como estos:

bind-utils-9.8.2-0.17.rc1.el6_4.5.x86_64
rpcbind-0.2.0-11.el6.x86_64
bind-libs-9.8.2-0.17.rc1.el6_4.5.x86_64
samba-winbind-3.6.9-151.el6.x86_64
samba-winbind-clients-3.6.9-151.el6.x86_64
ypbind-1.20.4-30.el6.x86_64

Eso no es lo que yo quería. En su lugar, me gustaría comprobar con precisión si el paquete de núcleo de enlace ha sido instalado. P.ej. bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

Esperaba algo como:

yum check installed bind

Pero espero que alguien pueda arrojar la luz.


50
2017-12-03 15:18


origen




Respuestas:


¿Has probado esto?

$ yum list installed bind

53
2017-12-03 15:24



Me estoy poniendo Error: No matching Packages to list y $? devuelve 1, y cuando lo intente yum list installed bind-libs, $? devuelve 0. Lo que debería ser correcto hasta ahora. ¿Puedo concluir con seguridad que su comando es determinar con precisión el paquete instalado? Me enteré rpm -q bind justo ahora. ¿Es equavalente a su mando también? - checksum
Eso es correcto AFAIK, salga del código 0 solo si el paquete está instalado. - plasmid87
Creo que esto está funcionando. Y me gustan las soluciones de una sola línea .:D - checksum
Creo que el comando correcto es con un comodín: yum list installed bind* - Alejandro Angelico
@NoahSussman Podrías intentarlo yum -C list installed bind para evitar la red. Esto mantiene habilitados todos los complementos (en caso de que tenga algo exótico que afecte a las búsquedas en yumdb) y también le informa el repositorio desde el que se instaló el paquete. - plasmid87


Hay una forma mucho más fácil de emitir esta consulta: rpm -qa | grep bind o rpm -q bind. Lo primero es mejor si no estás completamente seguro del nombre del paquete.


12
2017-12-03 15:36



+1 para rpm -q $package Creo que esta es la solución más rápida, ya que hacer cualquier cosa con yum podría forzar una actualización de caché (generalmente lenta). - Alex S
Esta solución (utilizando rpm) debe ser la respuesta aceptada ya que devuelve un estado de salida limpio y no requiere llamar a un grupo de URL remotas como yum las soluciones hacen - Noah Sussman
@NoahSussman Los códigos de salida para yum y rpm puedo seguir el mismo comportamiento en todos los ejemplos que se me ocurren (0 = instalado, 1 = no instalado / error), por lo que sería útil saber si está viendo un código de salida diferente. Mire mi respuesta anterior sobre el uso de la memoria caché para evitar el acceso a la red - plasmid87
@ plasmid87 no sabía que podía usar yum -C para evitar que yum pase todo ese tiempo extra contactando con los hosts de la red. Gracias, ahora veo cómo yum y rpm se pueden usar indistintamente aquí. - Noah Sussman


Analizar los resultados de este comando es la respuesta más completa. Tendrá que saber el nombre exacto del paquete.

yum info bind

Loaded plugins: refresh-packagekit, rhnplugin
This system is receiving updates from RHN Classic or RHN Satellite.
Installed Packages
Name        : bind
Arch        : x86_64
Epoch       : 32
Version     : 9.8.2
Release     : 0.17.rc1.el6_4.6
Size        : 7.3 M
Repo        : installed
From repo   : rhel-x86_64-workstation-6
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
URL         : http://www.isc.org/products/BIND/
License     : ISC
Description : BIND (Berkeley Internet Name Domain) is an implementation of the DNS
        : (Domain Name System) protocols. BIND includes a DNS server (named),
        : which resolves host names to IP addresses; a resolver library
        : (routines for applications to use when interfacing with DNS); and
        : tools for verifying that the DNS server is operating properly.

9
2017-12-03 15:27



Hmm no es eso lo que me dice bind ¿Está disponible el paquete yum válido en lugar de decirme si está instalado? - checksum
No es obvio, pero si está instalado aparece en la etiqueta Repo, está instalado. De lo contrario, listaría el repositorio desde el que está disponible. - Fred the Magic Wonder Dog
Esto se traduce en la conexión a repositorios remotos de yum cuando lo único que quiero es ver qué está pasando en mi local máquina. - Noah Sussman


El mejor forro que he encontrado para hacer esto (lo cual es excelente para usar rápidamente en scripts) es:

yum info <package_name> | grep Repo | awk '{ print $3 }'

Por ejemplo: si actualmente tengo git instalado:

yum info git | grep Repo | awk '{ print $3 }'

Esto volverá installed

Si actualmente no hacer tener git instalado que el mismo comando anterior devolverá: base/7/x86_64 que es la instalación actual disponible para git


1
2018-01-11 18:38



Esto se traduce en la conexión a repositorios remotos de yum cuando lo único que quiero es ver qué está pasando en mi local máquina. - Noah Sussman
@NoahSussman para enumerar todos los paquetes instalados actualmente en su máquina local que puede usar yum list installed. Desde allí puedes usar el grep Manda para obtener una respuesta más precisa para lo que estás buscando. Además, si desea buscar un paquete específico, puede agregarlo a su comando - Ej: php70w. yum list installed php70w listaría la información en el paquete instalado o la devolvería No matching Packages to list - domdambrogia


Use el código de Python para verificar si un paquete está instalado en python usando yum:

def is_installed(package_name):
    return "not installed" in commands.getstatusoutput("rpm -q " + package_name)[1]

0
2017-09-01 18:38



no debería ser esto not in ? - Inbar Rose


yum list installed bind >/dev/null ; echo $?

Si el resultado es 0 (cero) se instala el paquete.


-2
2018-04-26 20:25



Esto es muy lento en comparación con el rpm -q bind Solución mostrada en la respuesta de Juan. - Noah Sussman
Aunque tal vez usando yum -C ... seria rapido - Noah Sussman