Come verificare accuratamente se il pacchetto è installato in yum?


56

Continuo a ricevere risposte come:

yum list installed | grep bind

o

rpm -qa | grep bind

Ma questo non è accurato poiché sto ottenendo un elenco di alcuni altri pacchetti di bind come questi:

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

Non è quello che volevo. Vorrei invece verificare accuratamente se il pacchetto core bind è stato installato. Per esempio.bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

Speravo in qualcosa del tipo:

yum check installed bind

Ma si spera che qualcuno possa far luce.

Risposte:


61

Hai provato questo?

$ yum list installed bind

Ricevo Error: No matching Packages to liste $?restituisce 1, e quando ho provato yum list installed bind-libs, $?restituisce 0. Che dovrebbe essere corretto finora. Posso concludere con sicurezza che il tuo comando è determinare con precisione che un pacchetto è installato? L'ho scoperto rpm -q bindproprio ora. Equavalente anche al tuo comando?
checksum

Questo è AFAIK corretto, codice di uscita 0 solo se il pacchetto è installato.
plasmid87,

Penso che funzioni. E mi piacciono le soluzioni a linea singola
D

Penso che il comando corretto sia con un carattere jolly: yum list installed bind*
Alejandro Angelico,

2
@NoahSussman Potresti provare yum -C list installed binda evitare la rete. Ciò mantiene abilitati tutti i plugin (nel caso in cui tu abbia qualcosa di esotico che influenza le ricerche in yumdb) e ti dice anche il repository da cui è stato installato il pacchetto
plasmid87

13

Esiste un modo molto più semplice per emettere questa query: rpm -qa | grep bindo rpm -q bind. Il primo è il migliore se non si è completamente sicuri del nome del pacchetto.


4
+1 perché rpm -q $packagecredo che questa sia la soluzione più veloce e, poiché fare qualsiasi cosa yumpotrebbe forzare un aggiornamento della cache (di solito lento).
Alex S

Questa soluzione (utilizzando rpm) dovrebbe essere la risposta accettata in quanto restituisce uno stato di uscita pulito e non richiede la chiamata a un gruppo di URL remoti come le yumsoluzioni.
Noah Sussman,

1
@NoahSussman I codici di uscita per yume rpmseguire lo stesso comportamento in tutti gli esempi che mi vengono in mente (0 = installato, 1 = non installato / errore), quindi sarebbe utile sapere se stai visualizzando un codice di uscita diverso.
Dai

@ plasmid87 Non sapevo che avrei potuto usare yum -Cper impedire a yum di passare tutto quel tempo in più a contattare gli host di rete. Grazie, ora vedo come yum e rpm possono essere usati in modo intercambiabile qui !!
Noah Sussman,

9

L'analisi dei risultati di questo comando è la risposta più completa. Dovrai conoscere il nome esatto del pacchetto.

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, non è che dirmi che bindè disponibile / pacchetto yum valido invece di dirmi se è installato?
checksum

2
Non è ovvio, ma se installato è elencato sotto il tag Repo, è installato. Altrimenti elencherebbe il repository da cui è disponibile.
Fred the Magic Wonder Dog,

Ciò si traduce in una connessione ai repository yum remoti quando tutto ciò che voglio è vedere cosa sta succedendo sul mio computer locale .
Noah Sussman,

1

Il miglior liner che ho ideato per fare questo (che è ottimo per usare velocemente gli script) è:

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

Ad esempio: se attualmente ho gitinstallato:

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

Questo tornerà installed

Se al momento non ho gitinstallato lo stesso comando precedente verrà restituito: base/7/x86_64qual è l'installazione attualmente disponibile pergit


Ciò si traduce in una connessione ai repository yum remoti quando tutto ciò che voglio è vedere cosa sta succedendo sul mio computer locale .
Noah Sussman,

1
@NoahSussman per elencare tutti i pacchetti installati attualmente sul tuo computer locale che puoi usare yum list installed. Da lì puoi usare il grepcomando per ottenere una risposta più precisa per quello che stai cercando. Inoltre, se si desidera verificare la presenza di un pacchetto specifico è possibile aggiungere che al comando - Ex: php70w. yum list installed php70welenca le informazioni sul pacchetto installato o restituisceNo matching Packages to list
domdambrogia

-1

Usa il codice Python per verificare se un pacchetto è installato in Python usando yum:

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

non dovrebbe essere not in?
Inbar Rose,

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

Se il risultato è 0 (zero) il pacchetto è installato


Questo è molto lento rispetto alla rpm -q bindsoluzione mostrata nella risposta di John.
Noah Sussman,

Anche se forse l'uso yum -C ...sarebbe veloce.
Noah Sussman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.