84

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.

6 Answers 6

86

Have you tried this?

$ yum list installed bind
8
  • 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 3, 2013 at 15:32
  • That's correct AFAIK, exit code 0 only if the package is installed.
    – plasmid87
    Dec 3, 2013 at 15:35
  • I think this is working. And I like single line solutions.:D
    – checksum
    Dec 3, 2013 at 15:42
  • I think the correct command is with a wildcard: yum list installed bind* Feb 14, 2017 at 12:39
  • 3
    @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, 2018 at 21:47
25

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.

5
  • 8
    +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 4, 2017 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. Jan 24, 2018 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, 2018 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!! May 1, 2018 at 15:18
  • rpm -q [Package-name] +1 Oct 7, 2020 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.
3
  • 2
    Hmm, isn't that telling me bind is available/valid yum package instead of telling me if it is installed?
    – checksum
    Dec 3, 2013 at 15:34
  • 2
    It's not obvious, but if installed is listed under the Repo tag, it's installed. Otherwise it would list the repo that it is available from. Dec 4, 2013 at 0:12
  • This results in connecting to remote yum repos when all I want is to see what's happening on my local machine. Jan 24, 2018 at 15:39
3

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

2
  • This results in connecting to remote yum repos when all I want is to see what's happening on my local machine. Jan 24, 2018 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 Jan 24, 2018 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]
1
  • shouldn't this be not in ?
    – Inbar Rose
    May 23, 2018 at 8:36
-2
yum list installed bind >/dev/null ; echo $?

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

2
  • This is very slow compared to the rpm -q bind solution shown in John's answer. Jan 24, 2018 at 15:40
  • Although perhaps using yum -C ... would be fast. May 1, 2018 at 15:19

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .