Вопрос: Как точно проверить, установлен ли пакет в yum?


Я получаю ответы вроде:

yum list installed | grep bind

или

rpm -qa | grep bind

Но это не так точно, поскольку я получаю список нескольких других пакетов связывания, подобных этим:

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

Этого я не хотел. Вместо этого я хочу точно проверить, установлен ли пакет привязки ядра. Например. bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

Я надеялся на что-то вроде:

yum check installed bind

Но, надеюсь, кто-то может пролить свет.


48
2017-12-03 15:18


Источник




Ответы:


Вы пробовали это?

$ yum list installed bind

51
2017-12-03 15:24



Я получаю Error: No matching Packages to list а также $? возвращает 1, и когда я попытался yum list installed bind-libs, $? возвращает 0. Который должен быть правильным до сих пор. Могу ли я уверенно завершить вашу команду, точно определить, что пакет установлен? Я узнал rpm -q bind прямо сейчас. Это он равносилен вашей команде? - checksum
Это правильный AFAIK, код выхода 0, только если пакет установлен. - plasmid87
Я думаю, что это работает. И мне нравятся однолинейные решения.: D - checksum
Я думаю, что правильная команда с подстановочным знаком: yum list installed bind* - Alejandro Angelico
@NoahSussman Вы можете попробовать yum -C list installed bind чтобы избежать сети. Это позволяет включить все плагины (на всякий случай, если у вас есть что-то экзотическое, которое влияет на поиск в yumdb), а также сообщает вам, что пакет репо был установлен из - plasmid87


Выдача этого запроса намного проще: rpm -qa | grep bind или rpm -q bind, Первое лучше всего, если вы не полностью уверены в имени пакета.


11
2017-12-03 15:36



+1 для rpm -q $package Я считаю, что это самый быстрый способ и решение, поскольку yum может заставить кэш обновить (обычно медленно). - Alex S
Это решение (используя rpm) должен быть принятым ответом, так как он возвращает чистый статус выхода и не требует вызывать кучу удаленных URL-адресов в качестве yum решения. - Noah Sussman
@NoahSussman Коды выхода для yum а также rpm следуйте одному и тому же поведению во всех примерах, которые я могу придумать (0 = установлен, 1 = не установлен / ошибка), поэтому было бы полезно знать, видите ли вы другой код выхода. Пожалуйста, взгляните на мой ответ выше, касающийся использования кеша, чтобы избежать доступа к сети - plasmid87
@ plasmid87 Я не знал, что могу использовать yum -C чтобы yum не тратил все лишнее время на связь с сетевыми хостами. Спасибо, теперь я вижу, как можно использовать взаимозаменяемость здесь и здесь. - Noah Sussman


Анализ результатов этой команды является наиболее полным ответом. Вам нужно знать точное имя пакета.

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



Хм, разве это не говорит мне bind доступен / действительный пакет yum вместо того, чтобы сообщать мне, если он установлен? - checksum
Это не очевидно, но если он установлен в теге Repo, он установлен. В противном случае он перечислил бы репо, из которого он доступен. - Fred the Magic Wonder Dog
Это приводит к подключению к удаленным репозиториям yum, когда все, что я хочу, - это посмотреть, что происходит на моем местный машина. - Noah Sussman


Лучший один лайнер, который я придумал, чтобы сделать это (что отлично подходит для быстрого использования скриптов):

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

Например: если у меня есть git установлен:

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

Это вернет installed

Если я сейчас не иметь git установлена ​​та же самая предыдущая команда: base/7/x86_64 которая является текущей доступной установкой для git


1
2018-01-11 18:38



Это приводит к подключению к удаленным репозиториям yum, когда все, что я хочу, - это посмотреть, что происходит на моем местный машина. - Noah Sussman
@NoahSussman для перечисления всех пакетов, установленных в настоящее время на вашей локальной машине, которую вы можете использовать yum list installed, Оттуда вы можете использовать grep чтобы получить более точный ответ за то, что вы ищете. Также, если вы хотите проверить конкретный пакет, вы можете добавить это в свою команду - Ex: php70w, yum list installed php70w либо перечислит информацию об установленном пакете, либо вернет No matching Packages to list - domdambrogia


Используйте код Python, чтобы проверить, установлен ли пакет в python с помощью yum:

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

0
2017-09-01 18:38



это не должно быть not in ? - Inbar Rose


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

Если результат равен 0 (ноль), пакет устанавливается


-2
2018-04-26 20:25



Это очень медленно по сравнению с rpm -q bind решение показано в ответе Джона. - Noah Sussman
Хотя возможно использование yum -C ... будет быстро. - Noah Sussman