Frage Wie überprüfe ich genau, ob das Paket in yum installiert ist?


Ich bekomme immer Antworten wie:

yum list installed | grep bind

oder

rpm -qa | grep bind

Aber das ist nicht korrekt, da ich eine Liste mit einigen anderen Bind-Paketen wie diesen bekomme:

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 würde ich genau überprüfen wollen, ob das Bind-Core-Paket installiert wurde. Z.B. bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

Ich hoffte auf etwas wie:

yum check installed bind

Aber hoffentlich könnte jemand das Licht ausschütten.


50
2017-12-03 15:18


Ursprung




Antworten:


Hast du das versucht?

$ yum list installed bind

53
2017-12-03 15:24



Ich erhalte Error: No matching Packages to list und $? gibt 1 zurück, und als ich es versuchte yum list installed bind-libs, $? gibt 0 zurück. Was bis jetzt korrekt sein sollte. Kann ich sicher feststellen, dass Ihr Befehl genau feststellt, dass ein Paket installiert ist? Ich habe es herausgefunden rpm -q bind gerade jetzt. Ist es auch mit Ihrem Befehl gleichwertig? - checksum
Das ist korrekt AFAIK, Exit Code 0 nur, wenn das Paket installiert ist. - plasmid87
Ich denke, das funktioniert. Und ich mag Single-Line-Lösungen - checksum
Ich denke, der richtige Befehl ist mit einem Platzhalter: yum list installed bind* - Alejandro Angelico
@NoahSussman Du könntest es versuchen yum -C list installed bind Netzwerk vermeiden. Dies hält alle Plugins aktiviert (nur für den Fall, dass Sie etwas Exotisches haben, das sich auf Lookups in yumdb auswirkt) und sagt Ihnen auch, aus welchem ​​Repo das Paket installiert wurde - plasmid87


Es gibt eine viel einfachere Möglichkeit, diese Abfrage auszugeben: rpm -qa | grep bind oder rpm -q bind. Ersteres ist am besten, wenn Sie sich des Paketnamens nicht ganz sicher sind.


12
2017-12-03 15:36



+1 für rpm -q $package Ich glaube, das ist die schnellste und die Lösung, mit allem zu tun yum könnte ein Cache-Update erzwingen (normalerweise langsam). - Alex S
Diese Lösung (unter Verwendung von rpm) sollte die akzeptierte Antwort sein, da sie einen sauberen Exit - Status zurückgibt und nicht verlangt, dass sie zu einer Menge von Remote - URLs aufgerufen wird yum Lösungen tun. - Noah Sussman
@NoahSussman Die Exit-Codes für yum und rpm Befolgen Sie das gleiche Verhalten in allen Beispielen, die ich mir vorstellen kann (0 = installiert, 1 = nicht installiert / Fehler), daher wäre es nützlich zu wissen, ob Sie einen anderen Beendigungscode sehen. Bitte werfen Sie einen Blick auf meine obige Antwort bezüglich der Verwendung des Cache, um den Netzwerkzugriff zu vermeiden - plasmid87
@ plasmid87 Ich wusste nicht, dass ich verwenden könnte yum -C um zu verhindern, dass Yum die ganze Zeit damit verbringt, Netzwerk-Hosts zu kontaktieren. Danke, ich sehe jetzt, wie yum und rpm austauschbar hier benutzt werden können !! - Noah Sussman


Das Analysieren 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.

9
2017-12-03 15:27



Hmm, sagt mir das nicht bind ist verfügbar / gültiges yum-Paket, anstatt mir zu sagen, ob es installiert ist? - checksum
Es ist nicht offensichtlich, aber wenn es unter dem Repo-Tag installiert ist, ist es installiert. Andernfalls würde es das Repo auflisten, von dem es verfügbar ist. - Fred the Magic Wonder Dog
Dies führt dazu, dass ich mich mit entfernten Yum-Repos verbinde, wenn alles was ich will ist, zu sehen, was auf meinem passiert lokal Maschine. - Noah Sussman


Der beste Liner, mit dem ich das gemacht habe (was großartig für die schnelle Verwendung in Skripten ist) ist:

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

Zum Beispiel: wenn ich gerade habe git Eingerichtet:

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

Dies wird zurückkehren installed

Wenn ich momentan bin nicht haben git installiert den gleichen vorherigen Befehl wird zurückkehren: base/7/x86_64 Welches ist die derzeit verfügbare Installation für? git


1
2018-01-11 18:38



Dies führt dazu, dass ich mich mit entfernten Yum-Repos verbinde, wenn alles was ich will ist, zu sehen, was auf meinem passiert lokal Maschine. - Noah Sussman
@NoahSussman, um alle aktuell auf Ihrem lokalen Rechner installierten Pakete aufzulisten yum list installed. Von dort können Sie die grep Befehl, um eine genauere Antwort für das zu erhalten, was Sie suchen. Auch wenn Sie nach einem bestimmten Paket suchen möchten, können Sie das zu Ihrem Befehl hinzufügen - Beispiel: php70w. yum list installed php70w würde entweder die Informationen zum installierten Paket auflisten oder zurückgeben No matching Packages to list - domdambrogia


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

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

0
2017-09-01 18:38



sollte das nicht sein not in ? - Inbar Rose


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

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


-2
2018-04-26 20:25



Dies ist sehr langsam im Vergleich zu rpm -q bind Lösung in Johns Antwort gezeigt. - Noah Sussman
Obwohl vielleicht mit yum -C ... wäre schnell. - Noah Sussman