パッケージが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ちょうど今見つけました。それはあなたの命令とも同等ですか?
チェックサム

それは正しいです、パッケージがインストールされている場合のみ終了コード0。
プラスミド87

これは機能していると思います。そして私は、単一のラインsolutions.:D好き
チェックサム

私は、正しいコマンドがワイルドカードであると思う: yum list installed bind*
アレハンドロ・アンジェリコ

2
@NoahSussmanあなたはyum -C list installed bindネットワークを回避しようとすることができます。これは、すべてのプラグインが有効になって続けて(念のためにあなたはyumdbで探索に影響エキゾチックな何かを持っている)し、また、あなたのパッケージからインストールされたレポ告げる
plasmid87

13

このクエリを発行するはるかに簡単な方法があります:rpm -qa | grep bindまたはrpm -q bind。前者は、パッケージ名が完全にわからない場合に最適です。


4
+1 rpm -q $packageは、これを行うとyumキャッシュ更新が強制される(通常は低速になる)ため、これが最速かつ解決策であると考えています。
アレックスS

このソリューション(を使用rpm)は、クリーンな終了ステータスを返し、yumソリューションのように多数のリモートURLを呼び出す必要がないため、受け入れられた答えである必要があります。
ノアSussman

1
@NoahSussman終了コードのためyumrpm私は(0 =インストール、1 =インストールされていない/エラー)を考えることができるので、あなたが別の終了コードを見ているかどうかを知ることは有用であろうすべての例で同じ動作を行います。ネットワークアクセスを回避するためにキャッシュを使用することに関する上記の私の回答をご覧ください
Plasmid87

@ plasmid87 yum -Cyumがネットワークホストとの通信に余分な時間を費やすのを防ぐために使用できるとは知りませんでした。ありがとう、yumとrpmがここでどのように交換可能に使用できるかがわかりました!!
ノアSussman

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タグの下にリストされている場合は、インストール済みです。それ以外の場合は、利用可能なレポがリストされます。
フレッドマジックワンダードッグ

これにより、ローカルマシンで何が起きているかを確認するだけで、リモートyumリポジトリに接続できます。
ノアSussman

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リポジトリに接続できます。
ノアSussman

1
@NoahSussmanを使用すると、ローカルマシンに現在インストールされているすべてのパッケージを一覧表示できますyum list installed。そこから、grepコマンドを使用して、探しているものに対するより正確な答えを得ることができます。また、あなたはあなたのコマンドにそれを追加することができ、特定のパッケージをチェックしたい場合-例:php70wyum list installed php70wインストールされたパッケージの情報を一覧表示するか、戻るNo matching Packages to list
-domdambrogia

-1

Pythonコードを使用して、yumを使用してパッケージがpythonにインストールされているかどうかを確認します。

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、ジョンの答えに示されている解決策に比べて非常に遅いです。
ノアSussman

おそらく使用yum -C ...するのは速いでしょうが。
ノアSussman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.