Wie kann ich genau prüfen, ob das Paket in yum installiert ist?

56

Ich bekomme immer wieder Antworten wie:

yum list installed | grep bind

oder

rpm -qa | grep bind

Dies ist jedoch nicht korrekt, da ich eine Liste mit wenigen anderen Bind-Paketen wie den folgenden erhalte:

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

Das wollte ich nicht. Stattdessen möchte ich genau prüfen, ob das Bind Core-Paket installiert wurde. Z.B.bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

Ich hatte gehofft auf etwas wie:

yum check installed bind

Aber hoffentlich könnte jemand Licht ins Dunkel bringen.

Prüfsumme
quelle

Antworten:

61

Hast du das versucht?

$ yum list installed bind
plasmid87
quelle
Ich erhalte Error: No matching Packages to listund $?gebe 1 zurück, und wenn ich es versuche yum list installed bind-libs, $?gebe ich 0 zurück. Was soweit richtig sein sollte. Kann ich sicher schließen, dass Ihr Befehl genau feststellt, dass ein Paket installiert ist? Ich habe es rpm -q bindgerade herausgefunden. Entspricht es auch Ihrem Befehl?
Prüfsumme
Das ist richtig, AFAIK. Beenden Sie den Code 0 nur, wenn das Paket installiert ist.
Plasmid87
Ich denke das funktioniert. Und ich mag einzeilige Lösungen.:
D
Ich denke, der richtige Befehl ist mit einem Platzhalter: yum list installed bind*
Alejandro Angelico
2
@NoahSussman Sie könnten versuchen yum -C list installed bind, das Netzwerk zu umgehen. Dadurch bleiben alle Plugins aktiviert (nur für den Fall, dass Sie etwas Exotisches haben, das die Suche in yumdb beeinflusst) und Sie erfahren auch, von
welchem
13

Es gibt eine viel einfachere Möglichkeit, diese Abfrage zu erstellen: rpm -qa | grep bindoder rpm -q bind. Ersteres ist am besten, wenn Sie den Paketnamen nicht genau kennen.

John
quelle
4
+1 für rpm -q $packageich glaube, dies ist die schnellste und Lösung, da alles, was mit getan wird yum, ein Cache-Update erzwingen kann (normalerweise langsam).
Alex S
Diese Lösung (using rpm) sollte die akzeptierte Antwort sein, da sie einen sauberen Beendigungsstatus zurückgibt und nicht das Aufrufen einer Reihe von Remote-URLs erfordert, wie dies bei den yumLösungen der Fall ist .
Noah Sussman
1
@NoahSussman Die Exit-Codes für yumund rpmfolgen demselben Verhalten in allen Beispielen, die ich mir vorstellen kann (0 = installiert, 1 = nicht installiert / Fehler). Es wäre also nützlich zu wissen, ob Sie einen anderen Exit-Code sehen. Bitte werfen Sie einen Blick auf meine Antwort oben in Bezug auf die Verwendung des Cache, um Netzwerkzugriff zu vermeiden
Plasmid87
@plasmid87 Ich wusste nicht, dass ich damit yum -Cverhindern könnte , dass yum die ganze zusätzliche Zeit damit verbringt, Netzwerk-Hosts zu kontaktieren. Danke, ich sehe jetzt, wie yum und rpm hier austauschbar verwendet werden können !!
Noah Sussman
9

Das Parsen der Ergebnisse dieses Befehls ist die vollständigste Antwort. Sie müssen den genauen Paketnamen kennen.

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.
Fred der Zauberwunderhund
quelle
2
Hmm, sagt mir das nicht, dass ein bindgültiges yum-Paket verfügbar ist, anstatt mir mitzuteilen, ob es installiert ist?
Prüfsumme
2
Es ist nicht offensichtlich, aber wenn die installierte Version unter dem Repo-Tag aufgeführt ist, wird sie installiert. Andernfalls würde es das Repo auflisten, von dem es verfügbar ist.
Fred the Magic Wonder Dog
Dies führt dazu, dass eine Verbindung zu entfernten YUM-Repos hergestellt wird, wenn ich nur sehen möchte, was auf meinem lokalen Computer geschieht .
Noah Sussman
1

Der beste Liner, den ich mir dafür ausgedacht habe (der sich hervorragend für die schnelle Verwendung in Skripten eignet), ist:

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

Zum Beispiel: wenn ich gerade gitinstalliert habe:

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

Dies wird zurückkehren installed

Wenn ich zur Zeit nicht habe gitinstalliert , dass gleicher vorheriger Befehl zurück: base/7/x86_64die die aktuell verfügbare Installation ist fürgit

Domdambrogie
quelle
Dies führt dazu, dass eine Verbindung zu entfernten YUM-Repos hergestellt wird, wenn ich nur sehen möchte, was auf meinem lokalen Computer geschieht .
Noah Sussman
1
@NoahSussman, um alle derzeit auf Ihrem lokalen Computer installierten Pakete aufzulisten, die Sie verwenden können yum list installed. Von dort aus können Sie den grepBefehl verwenden, um eine genauere Antwort für das zu erhalten, wonach Sie suchen. Auch wenn Sie für ein bestimmtes Paket überprüfen Sie , dass auf Ihren Befehl hinzufügen können - Ex: php70w. yum list installed php70wwürde entweder die Informationen über das installierte Paket No matching Packages to list
auflisten
-1

Verwenden Sie Python-Code, um mit yum zu überprüfen, ob ein Paket in Python installiert ist:

def is_installed(package_name):
    return "not installed" in commands.getstatusoutput("rpm -q " + package_name)[1]
Eric Leschinski
quelle
sollte das nicht sein not in?
Inbar Rose
-2
yum list installed bind >/dev/null ; echo $?

Wenn das Ergebnis 0 (Null) ist, wird das Paket installiert

Tom Emerson
quelle
Dies ist sehr langsam im Vergleich zu der rpm -q bindin Johns Antwort gezeigten Lösung.
Noah Sussman
Obwohl vielleicht mit yum -C ...schnell gehen würde.
Noah Sussman