Vraag Hoe nauwkeurig te controleren of het pakket in yum is geïnstalleerd?


Ik krijg steeds antwoorden als:

yum list installed | grep bind

of

rpm -qa | grep bind

Maar dat is niet juist, want ik krijg een lijst met enkele andere bind-pakketten zoals deze:

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

Dat is niet wat ik wilde. In plaats daarvan zou ik nauwkeurig willen controleren of bind core package is geïnstalleerd. Bijv. bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

Ik hoopte op zoiets als:

yum check installed bind

Maar hopelijk kan iemand het licht verliezen.


50
2017-12-03 15:18


oorsprong




antwoorden:


Heb je dit geprobeerd?

$ yum list installed bind

53
2017-12-03 15:24



ik word Error: No matching Packages to list en $? geeft 1 terug en toen ik het probeerde yum list installed bind-libs, $? geeft 0 terug. Wat tot nu toe correct zou moeten zijn. Kan ik veilig concluderen dat uw opdracht nauwkeurig bepaalt of een pakket is geïnstalleerd? Ik ben erachter gekomen rpm -q bind net nu. Is het ook jouw gebod? - checksum
Dat is correct AFAIK, exitcode 0 alleen als het pakket is geïnstalleerd. - plasmid87
Ik denk dat dit werkt. En ik hou van oplossingen met één regel - checksum
Ik denk dat de juiste opdracht met een wildcard is: yum list installed bind* - Alejandro Angelico
@NoahSussman Je zou het kunnen proberen yum -C list installed bind om netwerk te vermijden. Hierdoor blijven alle plug-ins ingeschakeld (voor het geval je iets exotisch hebt dat lookups in yumdb beïnvloedt) en ook vertelt je de repo waaruit het pakket is geïnstalleerd vanaf - plasmid87


Er is een veel eenvoudigere manier om deze query uit te voeren: rpm -qa | grep bind of rpm -q bind. De eerste is het beste als u niet helemaal zeker bent van de naam van het pakket.


12
2017-12-03 15:36



+1 voor rpm -q $package Ik geloof dat dit de snelste en oplossing is, omdat je er alles mee doet yum kan een cache-update afdwingen (meestal traag). - Alex S
Deze oplossing (met rpm) moet het geaccepteerde antwoord zijn omdat het een schone exitstatus retourneert en niet naar een aantal externe URL's moet worden gebeld als het yum oplossingen doen. - Noah Sussman
@NoahSussman De exit-codes voor yum en rpm volg hetzelfde gedrag in alle voorbeelden die ik kan bedenken (0 = geïnstalleerd, 1 = niet geïnstalleerd / fout), dus het zou handig zijn om te weten of je een andere exitcode ziet. Bekijk mijn antwoord hierboven over het gebruik van de cache om netwerktoegang te vermijden - plasmid87
@ plasmid87 Ik wist niet dat ik het kon gebruiken yum -C om te voorkomen dat yum al die extra tijd besteedt aan het contacteren van netwerkhosts. Bedankt, ik zie nu hoe yum en rpm hier uitwisselbaar kunnen worden gebruikt !! - Noah Sussman


Het parseren van de resultaten van deze opdracht is het meest complete antwoord. U moet de exacte pakketnaam weten.

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, is dat niet wat ik zeg? bind is beschikbaar / geldig yum-pakket in plaats van me te vertellen of het is geïnstalleerd? - checksum
Het is niet voor de hand liggend, maar als het is geïnstalleerd onder de Repo-tag, is het geïnstalleerd. Anders zou het de repo vermelden waarvan het beschikbaar is. - Fred the Magic Wonder Dog
Dit resulteert in het verbinden met remote yum repo's wanneer ik alleen wil weten wat er met mijn gebeurt lokaal machine. - Noah Sussman


De beste voering die ik hiervoor bedacht heb (wat geweldig is om snel in scripts te gebruiken) is:

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

Bijvoorbeeld: als ik op dit moment heb git geïnstalleerd:

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

Dit komt terug installed

Als ik op dit moment ben niet doen hebben git geïnstalleerd dat dezelfde vorige opdracht zal terugkeren: base/7/x86_64 dat is de huidige beschikbare installatie voor git


1
2018-01-11 18:38



Dit resulteert in het verbinden met remote yum repo's wanneer ik alleen wil weten wat er met mijn gebeurt lokaal machine. - Noah Sussman
@NoahSussman voor een lijst van alle pakketten die momenteel zijn geïnstalleerd op uw lokale computer die u kunt gebruiken yum list installed. Vanaf daar kunt u de grep opdracht om een ​​nauwkeuriger antwoord te krijgen voor wat u zoekt. Ook als u een specifiek pakket wilt controleren, kunt u dat toevoegen aan uw opdracht - Ex: php70w. yum list installed php70w zou ofwel de informatie over het geïnstalleerde pakket vermelden of terugkeren No matching Packages to list - domdambrogia


Gebruik de Python-code om te controleren of een pakket is geïnstalleerd in python met yum:

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

0
2017-09-01 18:38



zou dit niet moeten zijn not in ? - Inbar Rose


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

Als het resultaat 0 (nul) is, is het pakket geïnstalleerd


-2
2018-04-26 20:25



Dit is erg traag in vergelijking met de rpm -q bind oplossing weergegeven in het antwoord van John. - Noah Sussman
Hoewel misschien gebruiken yum -C ... zou snel zijn. - Noah Sussman