77

I keep getting answers like:

yum list installed | grep bind

or

rpm -qa | grep bind

But that is not accurate as I'm getting a list of few other bind packages like these:

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

That is not I wanted. Instead I would want to accurately check if bind core package has been installed. Eg. bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6

I was hoping for something like:

yum check installed bind

But hopefully someone could shed the light.

Randall
  • 307
  • 2
  • 17
checksum
  • 945
  • 1
  • 10
  • 15

6 Answers6

81

Have you tried this?

$ yum list installed bind
plasmid87
  • 1,888
  • 15
  • 17
  • 1
    I'm getting `Error: No matching Packages to list` and `$?` returns 1, and when I tried `yum list installed bind-libs`, `$?` returns 0. Which should be correct so far. Can I safely conclude your command is accurately determine a package is installed? I did find out `rpm -q bind` just now. It it equavalent to your command also? – checksum Dec 03 '13 at 15:32
  • That's correct AFAIK, exit code 0 only if the package is installed. – plasmid87 Dec 03 '13 at 15:35
  • I think this is working. And I like single line solutions.:D – checksum Dec 03 '13 at 15:42
  • I think the correct command is with a wildcard: `yum list installed bind*` – Alex Angelico Feb 14 '17 at 12:39
  • @AlejandroAngelico Though the RedHat documentation is very explicit about the necessity of [escaping or quoting wildcard characters or globbed expressions](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Listing_Packages.html), respectively. – chb Mar 23 '17 at 19:10
  • This is very slow compared to the `rpm -q bind` solution shown in John's answer. I don't think it's an optimal solution if it involves connecting to yum repos just to see what is installed _locally._ – Noah Sussman Jan 24 '18 at 15:35
  • 2
    @NoahSussman You could try `yum -C list installed bind` to avoid network. This keeps all the plugins enabled (just in case you have anything exotic that affects lookups in yumdb) and also tells you the repo the package was installed from – plasmid87 Jan 24 '18 at 21:47
  • @plasmid87 wow I did not know about `yum -C` and that does change how I think about this problem. Thank you! – Noah Sussman May 01 '18 at 15:17
22

There's a much easier way of issuing this query: rpm -qa | grep bind or rpm -q bind. The former is best if you're not completely sure of the package name.

John
  • 8,920
  • 1
  • 28
  • 34
  • 7
    +1 for `rpm -q $package` I believe this is the fastest and solution, as doing anything with `yum` might force a cache update (usually slow). – Alex S Jan 04 '17 at 21:11
  • This solution (using `rpm`) should be the accepted answer as it returns a clean exit status and does not require calling out to a bunch of remote URLs as the `yum` solutions do. – Noah Sussman Jan 24 '18 at 15:37
  • 1
    @NoahSussman The exit codes for `yum` and `rpm` follow the same behavior in all examples I can think of (0 = installed, 1 = not installed / error) so it would be useful to know if you are seeing a different exit code. Please take a look at my response above regarding using the cache to avoid network access – plasmid87 Jan 24 '18 at 21:54
  • @plasmid87 I did not know I could use `yum -C` to prevent yum from spending all that extra time contacting network hosts. Thank you, I now see how yum and rpm can be used interchangeably here!! – Noah Sussman May 01 '18 at 15:18
  • `rpm -q [Package-name]` +1 – Gonçalo Peres Oct 07 '20 at 18:41
11

Parsing the results of this command is the most complete answer. You'll need to know the exact package name.

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

The best one liner I've come up with to do this (which is great for using quickly in scripts) is:

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

For example: if I currently have git installed:

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

This will return installed

If I currently don't have git installed that same previous command will return: base/7/x86_64 which is the current available installation for git

domdambrogia
  • 231
  • 1
  • 8
  • This results in connecting to remote yum repos when all I want is to see what's happening on my _local_ machine. – Noah Sussman Jan 24 '18 at 15:39
  • 1
    @NoahSussman to list all packages installed currently on your local machine you can use `yum list installed`. From there you can use the `grep` command to get a more precise answer for what you're looking for. Also if you want to check for a specific package you can add that to your command - Ex: `php70w`. `yum list installed php70w` would either list the info on the installed package or return `No matching Packages to list` – domdambrogia Jan 24 '18 at 17:21
-1

Use Python code to check if a package is installed in python using yum:

def is_installed(package_name):
    return "not installed" in commands.getstatusoutput("rpm -q " + package_name)[1]
Eric Leschinski
  • 4,031
  • 4
  • 20
  • 27
-2
yum list installed bind >/dev/null ; echo $?

If the result is 0 (zero) the package is installed

chicks
  • 3,639
  • 10
  • 26
  • 36