85 votes

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

Je continue à recevoir des réponses comme :

yum list installed | grep bind

oder

rpm -qa | grep bind

Mais ce n'est pas exact, car je reçois une liste de quelques autres paquets liés 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. Je voudrais plutôt vérifier avec précision si le paquet de base de bind 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 m'éclairer.

91voto

plasmid87 Points 1828

Avez-vous essayé ?

$ yum list installed bind

1 votes

Je reçois Error: No matching Packages to list y $? renvoie 1, et quand j'ai essayé yum list installed bind-libs , $? retourne 0. Ce qui devrait être correct jusqu'à présent. Puis-je conclure sans risque que votre commande détermine avec précision qu'un paquet est installé ? J'ai trouvé rpm -q bind à l'instant. C'est équivalent à votre commandement aussi ?

0 votes

C'est correct AFAIK, code de sortie 0 seulement si le paquet est installé.

0 votes

Je pense que ça marche. Et j'aime les solutions à ligne unique :D

25voto

KOTJMF Points 623

Il y a un moyen beaucoup plus simple d'émettre cette requête : rpm -qa | grep bind o rpm -q bind . La première solution est la meilleure si vous n'êtes pas totalement sûr du nom du paquet.

8 votes

+1 pour rpm -q $package Je pense que c'est la solution la plus rapide, car faire quoi que ce soit avec yum peut forcer une mise à jour du cache (généralement lente).

0 votes

Cette solution (utilisant rpm ) devrait être la réponse acceptée, car elle renvoie un état de sortie propre et ne nécessite pas d'appeler un grand nombre d'URL distantes comme le fait l'option yum les solutions le font.

1 votes

@NoahSussman Les codes de sortie pour yum y rpm suivent le même comportement dans tous les exemples auxquels je pense (0 = installé, 1 = non 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 au réseau.

11voto

Jim B Points 3121

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 votes

Hmm, est-ce que ça ne me dit pas bind est un paquet yum disponible/valide au lieu de me dire s'il est installé ?

2 votes

Ce n'est pas évident, mais si installé est listé sous le tag Repo, c'est installé. Sinon, le repo à partir duquel il est disponible est indiqué.

0 votes

Cela me conduit à me connecter à des dépôts yum distants alors que tout ce que je veux, c'est voir ce qui se passe sur mon ordinateur. local machine.

3voto

domdambrogia Points 231

Le meilleur one liner que j'ai trouvé pour faire cela (qui est génial pour une utilisation rapide dans les scripts) est :

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

Par exemple, si j'ai actuellement git installé :

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

Cela donnera installed

Si je suis actuellement Ne le fais pas. tienen git installé cette même commande précédente reviendra : base/7/x86_64 qui est l'installation actuelle disponible pour git

0 votes

Il en résulte que je dois me connecter à des dépôts yum distants alors que tout ce que je veux, c'est voir ce qui se passe sur mon ordinateur. local machine.

1 votes

@NoahSussman pour lister tous les paquets installés actuellement sur votre machine locale vous pouvez utiliser yum list installed . À partir de là, vous pouvez utiliser le grep pour obtenir une réponse plus précise à ce que vous recherchez. De plus, si vous voulez vérifier un paquet spécifique, vous pouvez l'ajouter à votre commande - Ex : php70w . yum list installed php70w listerait les informations sur le paquet installé ou retournerait No matching Packages to list

-1voto

Eric Leschinski Points 3812

Utilisez du code Python pour vérifier si un paquet est installé dans Python à l'aide de yum :

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

0 votes

Cela ne devrait-il pas être not in ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X