How to check and list installed packages in CentOS Linux

last updated in Categories , ,

How do I check installed packages in CentOS Linux version 6.x/7.x/8.x? How can I List installed packages on CentOS Enterprise Linux server?

This page shows you how to check and list all installed packages in CentOS Linux server version 6.x/7.x/8.x using various command-line utilities. Such a list is useful in case if you need to restore/reinstall or mirror the same packages across different CentOS servers.

How to check installed packages in CentOS

The procedure is as follows to list installed packages:

  1. Open the terminal app.
  2. For remote server log in using the ssh command: ssh user@centos-linux-server-IP-here
  3. Show information about all installed packages on CentOS, run: sudo yum list installed
  4. To count all installed packages run: sudo yum list installed | wc -l
  5. Want to save all installed packages names in a file? Try: sudo yum list installed > my_list.txt
  6. Execute the command sudo yum update to refresh package database and install updates if any.

Let us see all commands and examples in details.

Check and list installed packages with yum command

From the dnf/yum man page:

The list command dumps lists of packages depending on the packages’ relation to the system. A package is installed if it is present in the RPMDB, and it is available if it is not installed but it is present in a repository that DNF knows about. The list command can also limit the displayed packages according to other criteria, e.g. to only those that update an installed package. The exclude option in configuration file (.conf) might influence the result, but if the command line option –disableexcludes is used, it ensure that all installed packages will be listed.

Hence, to lists installed packages on CentOS, type the following yum command:
sudo yum list --installed
sudo yum list --installed | more

Check installed packages in centos linux
List all installed packages in CentOS Linux using yum

One can use the grep command as filter too. For example, find out if nginx installed or not:
sudo yum list --installed | grep nginx
Want to lists extras packages installed on the system that are not available in any known repository? Try:
sudo yum list --extras
Sample outputs

Last metadata expiration check: 0:21:58 ago on Friday 29 November 2019 05:19:57 PM UTC.
Extra Packages
qemu-guest-agent.x86_64            15:2.12.0-64.module_el8.0.0+44+94c1b039.2             @AppStream

Lists all packages known to us:
sudo yum list --all
Finally, show available packages, run:
sudo yum list --available
One can count all installed packages using the wc command:
sudo yum list --installed | wc -l
sudo yum list --all | wc -l
sudo yum list --available | wc -l

Display packages list that needs updates/patching

Keeping your CentOS box secure is an essential task. One can get a list of all upgrades available for the installed packages too. Type:
sudo yum list --upgrades
sudo yum list --upgrades | more
sudo yum list --upgrades | grep -i kernel

Sample outputs:

Available Upgrades
bash.x86_64                             4.4.19-8.el8_0                                    BaseOS   
dracut.x86_64                           049-10.git20190115.el8_0.1                        BaseOS   
dracut-config-rescue.x86_64             049-10.git20190115.el8_0.1                        BaseOS   
dracut-network.x86_64                   049-10.git20190115.el8_0.1                        BaseOS   
dracut-squash.x86_64                    049-10.git20190115.el8_0.1                        BaseOS   
grub2-common.noarch                     1:2.02-66.el8_0.1                                 BaseOS   
grub2-pc.x86_64                         1:2.02-66.el8_0.1                                 BaseOS   
grub2-pc-modules.noarch                 1:2.02-66.el8_0.1                                 BaseOS   
grub2-tools.x86_64                      1:2.02-66.el8_0.1                                 BaseOS   
grub2-tools-extra.x86_64                1:2.02-66.el8_0.1                                 BaseOS   
grub2-tools-minimal.x86_64              1:2.02-66.el8_0.1                                 BaseOS   
initscripts.x86_64                      10.00.1-1.el8_0.1                                 BaseOS   
kernel.x86_64                           4.18.0-80.11.2.el8_0                              BaseOS   
kernel-core.x86_64                      4.18.0-80.11.2.el8_0                              BaseOS   
kernel-modules.x86_64                   4.18.0-80.11.2.el8_0                              BaseOS   
kernel-tools.x86_64                     4.18.0-80.11.2.el8_0                              BaseOS   
kernel-tools-libs.x86_64                4.18.0-80.11.2.el8_0                              BaseOS   
kpartx.x86_64                           0.7.8-7.el8_0.2                                   BaseOS   
libnfsidmap.x86_64                      1:2.3.3-14.el8_0.2                                BaseOS   
platform-python.x86_64                  3.6.8-4.el8_0                                     BaseOS   
python3-libs.x86_64                     3.6.8-4.el8_0                                     BaseOS   
python3-perf.x86_64                     4.18.0-80.11.2.el8_0                              BaseOS   
python3-rpm.x86_64                      4.14.2-11.el8_0                                   BaseOS

Get a list of all installed packages with rpm command

Simply run the following rpm command:
sudo rpm -qa
sudo rpm -qa | more
sudo rpm -qa | wc -l
sudo rpm -qa | grep bash

How to List Installed Packages on CentOS
Use rpm command to display a list of install installed packages on CentOS server

Is nginx and bash package installed? Find out, run:
sudo rpm -q nginx
package nginx is not installed
sudo rpm -q bash
bash-4.4.19-7.el8.x86_64

Use repoquery command from dnf-utils package

First, install yum-utils (CentOS 6.x/7.x) or dnf-utils on a CentOS 8.x:
sudo yum install yum-utils ## centos 6.x/7.x ##
sudo yum install dnf-utils ## centos 8.x ##

Sample outputs:

Last metadata expiration check: 0:40:40 ago on Friday 29 November 2019 05:19:57 PM UTC.
Dependencies resolved.
===================================================================================================
 Package                Arch                Version                      Repository           Size
===================================================================================================
Installing:
 dnf-utils              noarch              4.0.2.2-3.el8                BaseOS               62 k
 
Transaction Summary
===================================================================================================
Install  1 Package
 
Total download size: 62 k
Installed size: 18 k
Is this ok [y/N]: y
Downloading Packages:
dnf-utils-4.0.2.2-3.el8.noarch.rpm                                  11 MB/s |  62 kB     00:00    
---------------------------------------------------------------------------------------------------
Total                                                              6.1 MB/s |  62 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                           1/1 
  Installing       : dnf-utils-4.0.2.2-3.el8.noarch                                            1/1 
  Running scriptlet: dnf-utils-4.0.2.2-3.el8.noarch                                            1/1 
  Verifying        : dnf-utils-4.0.2.2-3.el8.noarch                                            1/1 
 
Installed:
  dnf-utils-4.0.2.2-3.el8.noarch                                                                   
 
Complete!

To check installed packages in CentOS Linux, execute:
sudo yum repoquery -a --installed

NetworkManager-1:1.14.0-14.el8.x86_64
NetworkManager-libnm-1:1.14.0-14.el8.x86_64
NetworkManager-team-1:1.14.0-14.el8.x86_64
NetworkManager-tui-1:1.14.0-14.el8.x86_64
acl-0:2.2.53-1.el8.x86_64
audit-0:3.0-0.10.20180831git0047a6c.el8.x86_64
audit-libs-0:3.0-0.10.20180831git0047a6c.el8.x86_64
authselect-0:1.0-13.el8.x86_64
authselect-compat-0:1.0-13.el8.x86_64
authselect-libs-0:1.0-13.el8.x86_64
basesystem-0:11-5.el8.noarch
....
..
....
vim-minimal-2:8.0.1763-10.el8.x86_64
virt-what-0:1.18-6.el8.x86_64
which-0:2.21-10.el8.x86_64
xfsprogs-0:4.19.0-2.el8.x86_64
xkeyboard-config-0:2.24-3.el8.noarch
xz-0:5.2.4-3.el8.x86_64
xz-libs-0:5.2.4-3.el8.x86_64
yum-0:4.0.9.2-5.el8.noarch
zlib-0:1.2.11-10.el8.x86_64

Display name, architecture and the containing repository of all nginx packages:
sudo yum repoquery --queryformat '%{name}.%{arch} : %{reponame}' nginx
List all available packages providing “webserver”:
sudo yum repoquery --whatprovides webserver
Or list all available packages providing “webserver” but only for “i686” architecture:
sudo yum repoquery --whatprovides webserver --arch i686

More on repoquery option

Custom display format created using the -qf %{format} or --queryformat %{format} syntax. The %{format} is nothing but a string to output for each matched package. Every occurrence of %{<tag>} within is replaced by corresponding attribute of the package. List of recognized tags can be displayed by running
dnf repoquery --querytags
Sample outputs:

Available query-tags: use --queryformat ".. %{tag} .."

name, arch, epoch, version, release, reponame (repoid), evr,
debug_name, source_name, source_debug_name,
installtime, buildtime, size, downloadsize, installsize,
provides, requires, obsoletes, conflicts, sourcerpm,
description, summary, license, url

For instance, one can build fancy list as follows:
repoquery -a --installed \
--queryformat "%{name}-%{arch}-%{version} installed at '%{installtime}' from '%{reponame}'"

Sample outputs:

newt-x86_64-0.52.20 installed at '2019-09-25 14:48' from '@System'
nftables-x86_64-0.9.0 installed at '2019-09-25 14:48' from '@System'
npth-x86_64-1.5 installed at '2019-09-25 14:48' from '@System'
numactl-libs-x86_64-2.0.12 installed at '2019-09-25 14:48' from '@System'
openldap-x86_64-2.4.46 installed at '2019-09-25 14:48' from '@System'
openssh-clients-x86_64-7.8p1 installed at '2019-09-25 14:49' from '@System'
openssh-server-x86_64-7.8p1 installed at '2019-09-25 14:49' from '@System'
openssh-x86_64-7.8p1 installed at '2019-09-25 14:49' from '@System'
openssl-libs-x86_64-1.1.1 installed at '2019-09-25 14:48' from '@System'
openssl-pkcs11-x86_64-0.4.8 installed at '2019-09-25 14:48' from '@System'
openssl-x86_64-1.1.1 installed at '2019-09-25 14:48' from '@System'
os-prober-x86_64-1.74 installed at '2019-09-25 14:48' from '@System'
p11-kit-trust-x86_64-0.23.14 installed at '2019-09-25 14:48' from '@System'
p11-kit-x86_64-0.23.14 installed at '2019-09-25 14:48' from '@System'
pam-x86_64-1.3.1 installed at '2019-09-25 14:48' from '@System'
parted-x86_64-3.2 installed at '2019-09-25 14:49' from '@System'
passwd-x86_64-0.80 installed at '2019-09-25 14:49' from '@System'

How to check for installed packages on CentOS and backup them

One can list and backup all installed packages using the following syntax:

rpm -qa --qf "%{NAME}\n" |\
sort > /nas/installed-software-mm-dd-yyyy.log

Use the cat command to review list:
cat /nas/installed-software-mm-dd-yyyy.log
To restore all those packages when needed, run:
yum -y install $(cat /nas/installed-software-mm-dd-yyyy.log)
See “Linux Get List of Installed Software for Reinstallation / Restore All the Software Programs” for more info.

A note about listing all installed packages with yum on CentOS history command

The yum command has history option on the latest version of CentOS / RHEL v6.x+. One can view historical installation date and data on your cloud based server. Type the following command to see a list and history:
sudo yum history
Sample outputs:

ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     4 | install dnf-utils        | 2019-11-29 18:00 | Install        |    1   
     3 | remove dnf-utils         | 2019-11-29 18:00 | Removed        |    1   
     2 | install yum-utils        | 2019-11-29 17:21 | Install        |    1   
     1 |                          | 2019-09-25 14:48 | Install        |  396 EE

We can examine history entries in detail too using ID number from the above outputs:
sudo yum history info ID
sudo yum history info 2

Sample outputs:

Transaction ID : 2
Begin time     : Friday 29 November 2019 05:21:50 PM UTC
Begin rpmdb    : 393:911fb7e090842db316c671dc9e4b3bba7ffc7f2d
End time       : Friday 29 November 2019 05:21:50 PM UTC (0 seconds)
End rpmdb      : 394:e2078e6f2b3657ae7b67053902eae91a492a54a5
User           : root <root>
Return-Code    : Success
Releasever     : 8
Command Line   : install yum-utils
Packages Altered:
    Install dnf-utils-4.0.2.2-3.el8.noarch @BaseOS

See “CentOS / RHEL See Detailed History Of yum history Commands” for info.

Conclusion

You learned how to check and list installed packages using the yum and rpm commands.

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

Start the discussion at www.nixcraft.com

Historical Comment Archive