Comment vérifier avec précision si le paquet est installé dans yum?


56

Je continue à recevoir des réponses comme:

yum list installed | grep bind

ou

rpm -qa | grep bind

Mais ce n’est pas exact, car je reçois une liste de quelques autres packages de liaison comme ceux-ci:

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

Ce n'est pas ce que je voulais. Au lieu de cela, je voudrais vérifier avec précision si le paquet bind core a été installé. Par exemple.bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

J'espérais quelque chose comme:

yum check installed bind

Mais j'espère que quelqu'un pourra nous éclairer.

Réponses:


61

Avez-vous essayé cela?

$ yum list installed bind

Je reçois Error: No matching Packages to listet $?retourne 1, et quand j'ai essayé yum list installed bind-libs, $?renvoie 0. Ce qui devrait être correct jusqu'à présent. Puis-je en toute sécurité conclure que votre commande détermine avec précision qu'un paquet est installé? Je l'ai découvert rpm -q bindtout à l'heure. Est-il équivalent à votre commande également?
checksum

Autant que je sache, ne quittez le code 0 que si le package est installé.
plasmid87

Je pense que ça marche. Et j'aime les solutions
monolignes.:D

Je pense que la commande correcte est avec une wildcard: yum list installed bind*
Alejandro Angelico

2
@ NoahSussman Vous pouvez essayer yum -C list installed bindd'éviter le réseau. Ceci garde tous les plugins activés (juste au cas où vous auriez quelque chose d'exotique qui affecte les recherches dans yumdb) et vous indique également le repo où le paquet a été installé
plasmid87

13

Il existe un moyen beaucoup plus simple d’émettre cette requête: rpm -qa | grep bindou rpm -q bind. Le premier est le meilleur si vous n'êtes pas complètement sûr du nom du paquet.


4
+1 car rpm -q $packagej’estime que c’est la solution la plus rapide et la plus rapide, car tout ce qui yumpourrait entraîner une mise à jour forcée du cache (généralement lente).
Alex S

Cette solution (using rpm) doit être la réponse acceptée, car elle renvoie un statut de sortie vierge et ne nécessite pas d'appeler une multitude d'URL distantes, contrairement aux yumsolutions.
Noah Sussman le

1
@NoahSussman Les codes de sortie pour yumet rpmsuivent le même comportement dans tous les exemples auxquels je peux penser (0 = installé, 1 = pas installé / erreur), il serait donc utile de savoir si vous voyez un code de sortie différent. Veuillez consulter ma réponse ci-dessus concernant l'utilisation du cache pour éviter l'accès réseau
plasmid87

@ plasmid87 Je ne savais pas que je pourrais utiliser yum -Cpour empêcher yum de passer tout ce temps supplémentaire à contacter des hôtes du réseau. Merci, je vois maintenant comment miam et rpm peuvent être utilisés indifféremment ici !!
Noah Sussman

9

L'analyse des résultats de cette commande est la réponse la plus complète. Vous aurez besoin de connaître le nom exact du paquet.

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.

2
Hmm, est-ce que ça ne me dit pas que le bindpaquet yum est disponible / valide au lieu de me dire s'il est installé?
checksum

2
Ce n'est pas évident, mais si installé est répertorié sous la balise Repo, il est installé. Sinon, il répertorierait le référentiel auprès duquel il est disponible.
Fred le chien magique Wonder

Cela se traduit par la connexion à des dépôts de yum distants alors que tout ce que je veux, c'est voir ce qui se passe sur ma machine locale .
Noah Sussman le

1

Le meilleur support que j'ai créé pour ce faire (ce qui est excellent pour une utilisation rapide dans les scripts) est:

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

Par exemple: si j'ai déjà gitinstallé:

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

Cela va retourner installed

Si je n'ai pas encore gitinstallé cette même commande précédente retournera: base/7/x86_64qui est l'installation disponible actuelle pourgit


Cela se traduit par la connexion à des dépôts de yum distants alors que tout ce que je veux, c'est voir ce qui se passe sur ma machine locale .
Noah Sussman le

1
@NoahSussman pour lister tous les paquetages installés sur votre ordinateur local, vous pouvez les utiliser yum list installed. À partir de là, vous pouvez utiliser la grepcommande pour obtenir une réponse plus précise à ce que vous recherchez. Aussi , si vous voulez vérifier un package spécifique , vous pouvez ajouter à votre commande - Ex: php70w. yum list installed php70wserait soit lister les informations sur le paquet installé ou retournerNo matching Packages to list
domdambrogia

-1

Utilisez le code Python pour vérifier si un paquet est installé en python en utilisant yum:

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

cela ne devrait pas être not in?
Inbar Rose

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

Si le résultat est 0 (zéro), le package est installé.


C'est très lent comparé à la rpm -q bindsolution montrée dans la réponse de John.
Noah Sussman le

Bien que peut-être utiliser yum -C ...serait rapide.
Noah Sussman
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.