57

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.

62

Have you tried this?

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

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.

  • 4
    +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 '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 1 '18 at 15:18
9

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
    Hmm, isn't that telling me bind is available/valid yum package instead of telling me if it is installed? – checksum Dec 3 '13 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. – Fred the Magic Wonder Dog Dec 4 '13 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. – Noah Sussman Jan 24 '18 at 15:39
1

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

  • 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]
  • shouldn't this be not in ? – Inbar Rose May 23 '18 at 8:36
-2
yum list installed bind >/dev/null ; echo $?

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

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.