Як точно перевірити, чи встановлений пакет у yum?


56

Я продовжую отримувати відповіді на кшталт:

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

Але, сподіваємось, хтось міг би пролити світло.

Відповіді:


61

Ви пробували це?

$ yum list installed bind

Я отримую Error: No matching Packages to listі $?повертаю 1, а коли я спробував yum list installed bind-libs, $?повертає 0. Що повинно бути правильним досі. Чи можу я безпечно зробити висновок, що ваша команда точно визначить, що пакет встановлений? Я це дізнався rpm -q bindтільки зараз. Це рівносильно і вашій команді?
контрольна сума

Це правильний AFAIK, код виходу 0, тільки якщо пакет встановлений.
plazmid87

Я думаю, що це працює. І мені подобаються однолінійні рішення .
D

Я думаю, що команда правильна - з мальованою карткою: yum list installed bind*
Алехандро Анжеліко

2
@NoahSussman Ви можете спробувати yum -C list installed bindуникнути мережі. При цьому всі плагіни увімкнено (про всяк випадок, якщо у вас є щось екзотичне, що впливає на пошук у yumdb), а також повідомляє вам про
репост,

13

Є набагато простіший спосіб надати цей запит: rpm -qa | grep bindабо rpm -q bind. Перший найкраще, якщо ви не повністю впевнені в назві пакета.


4
+1, rpm -q $packageя вважаю, що це найшвидше і рішення, оскільки будь-що робити з цим yumможе змусити оновлення кешу (як правило, повільне).
Alex S

Це рішення (використовуючи rpm) повинно бути прийнятою відповіддю, оскільки воно повертає чистий статус виходу і не вимагає виклику на купу віддалених URL-адрес, як це yumроблять рішення.
Ной Суссман

1
@NoahSussman Коди виходу yumта rpmдотримуйтесь однакової поведінки у всіх прикладах, про які я можу подумати (0 = встановлено, 1 = не встановлено / помилка), тому було б корисно знати, чи ви бачите інший код виходу. Перегляньте мою відповідь вище щодо використання кешу, щоб уникнути доступу до мережі
plazmid87

@ plazmid87 Я не знав, що можу використати, yum -Cщоб запобігти витрачанню Yum весь цей додатковий час на зв’язок з господарями мережі. Дякую, зараз я бачу, як тут можна взаємозамінно використовувати yum та rpm !!
Ной Суссман

9

Розбір результатів цієї команди є найбільш повною відповіддю. Вам потрібно буде знати точну назву пакета.

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
Хм, чи не те, що мені повідомляється, bindчи доступний / дійсний пакет yum, замість того, щоб сказати мені, чи він встановлений?
контрольна сума

2
Це не очевидно, але якщо встановлений вказаний під тегом Repo, він встановлений. В іншому випадку вона перелічить репо, з яких вона доступна.
Fred Fred Magic Wonder Dog

Це призводить до підключення до віддалених yum repos, коли все, що я хочу, - це побачити, що відбувається на моїй локальній машині.
Ной Суссман

1

Кращий вкладиш, який я придумав, щоб зробити це (що відмінно підходить для швидкого використання в сценаріях), це:

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


Це призводить до підключення до віддалених yum repos, коли все, що я хочу, - це побачити, що відбувається на моїй локальній машині.
Ной Суссман

1
@NoahSussman, щоб перелічити всі пакунки, встановлені на вашій локальній машині, яку ви можете використовувати yum list installed. Звідти ви можете скористатися grepкомандою, щоб отримати більш точну відповідь на те, що ви шукаєте. Крім того, якщо ви хочете , щоб перевірити наявність конкретного пакета ви можете додати , що у вашій команді - Ex: php70w. yum list installed php70wабо перелічить інформацію про встановлений пакет, або повернетьсяNo matching Packages to list
domdambrogia

-1

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

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

не повинно бути цього not in?
Інбарська троянда

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

Якщо результат 0 (нуль), пакет встановлюється


Це дуже повільно порівняно з rpm -q bindрішенням, показаним у відповіді Джона.
Ной Суссман

Хоча, можливо, використання yum -C ...було б швидким.
Ной Суссман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.