Package management involves managing software on a system. This includes installing, upgrading, downgrading, updating, removing, etc. We discuss package management in Red Hat Enterprise Linux Distros using yum and dnf.
Table of contents.
- Differences between dnf and yum.
yum(Yellowdog Updater Modified) is the primary package manager for Red Hat Enterprise Linux distributions such as Rocky Linux, AlmaLinux, CentOS, Fedora, etc.
dnf(Dandified yum) is another package management tool for RHEL Linux distros. It is considered the next generation of its predecessor yum.
We will mostly use dnf however the same commands can be used with yum we shall learn the difference between the two shortly.
The syntax of the dnf command is as follows:
$ dnf [options] COMMAND
In this section, we look at commonly used yum/dnf commands.
1. Checking for updates.
Updating installed packages is a common task for Linux users. With yum we can check if there are any updates using the check-update option:
$ sudo yum check-update
or by using dnf we write:
$ sudo dnf check-update
2. Updating packages
Now that we have checked for updates, we can install them as follows:
$ sudo dnf update
In cases where we need to only update a single package we can update it as follows:
$ sudo dnf update [package name]
We can also choose to exclude specific packages using the exclude of -x option as follows:
$ sudo dnf update --exclude=[package name]
To exclude multiple packages, we write:
$ sudo dnf -x [package name 1] -x [package name 2] update
While dnf update updates currently installed packages to newer versions. dnf upgrade in addition to updating currently installed packages, it also removes obsolete packages.
3. Upgrading packages.
We have found that there are updates to be made, now to upgrade. We write:
$ sudo dnf upgrade
The above command upgrades everything, however, we may not have time or the bandwidth to upgrade everything so we can opt to only upgrade a single package. For this we write:
sudo dnf upgrade [package name]
Some situations need us to downgrade a package. With dnf we can downgrade a package as follows:
$ sudo dnf downgrade [package name]
4. Searching for packages.
Before downloading and installing a package we may want to search for it in a remote repository. For this we use the search option as follows;
$ sudo dnf search [package name]
5. Package information.
To list package information using dnf we use the info option as follows:
$ sudo dnf info [package name]
6. Installing packages.
We have already found our package. To install we use the install option as follows:
$ sudo dnf install [package name]
or using yum
$ sudo yum install [package name]
7. Installed packages.
To list all installed packages we write:
$ sudo yum list installed
$ sudo dnf list installed
This can also be used to search for installed packages by piping the output to the grep command as follows:
$ sudo dnf list installed | grep [package name]
8. Package groups.
A package group is a collection of packages all serving a common function.
With yum/dnf instead of installing packages one by one or listing them in a long line, we can install the whole group of packages at once.
For a summary of the group list we use the summary option as follows:
$ sudo dnf groups summary
To list package groups by writing:
$ sudo dnf grouplist
To get information about a single group among the listed groups we use the info option followed by the name of the group as follows:
$ sudo dnf info [group name]
Now we know enough, to install the group we write:
$ sudo dnf group install [group name]
9. Removing a package.
If we have no use for a package anymore, it is wise to remove it. With dnf/yum we can remove packages by writing:
$ sudo dnf remove [package name]
To remove all packages that are no longer needed, i.e, packages that were first installed as dependencies, we write:
$ sudo dnf autoremove
A repository is a remote location or URL where a Linux system fetches software and updates.
Using dnf/yum we can list available repositories by writing:
$ sudo dnf repolist all
An available repository could not be working, to list only available repos we write:
$ sudo dnf repolist enabled
To specify a specific repository where we want to install a package from we write:
$ sudo dnf --enablerepo=[repo name] install [package name]
11. Package dependencies.
A package dependency is whereby one package depends on another to function. For example a Nmap package depending on the low-level networking libraries.
We can list all packages dependencies using the deplist option as follows:
$ sudo dnf deplist [package name]
12. Package management history.
Linux systems administration involves a lot of repetitive work, for example, we have installed all required packages on one computer. Do we need to really repeat the same commands on another system? Of course not, we can create a script that does this job for us but for that, we need to remember all commands we executed.
In other cases, we may need to roll back a malfunctioning package from the system.
With dnf/yum we can list previously executed commands by using the history option as follows:
$ sudo dnf history
We can also write:
$ sudo dnf history list
From the output, in the first column, we have the IDs of the histories. We can use this number to get additional information about a particular history:
$ sudo dnf history info [id number]
Now if we found a history we want to undo to fix mistakes we use the undo option as follows:
$ sudo dnf history undo [id number]
To redo a history we use the redo option:
$ sudo dnf history redo [id number]
A rollback involves removing an update we had initially applied to an installed package.
To rollback a package we write:
$ sudo dnf history rollback [id number]
13. Clearing cache.
By default, all package information is stored in the /var/cache/yum directory. Over time the size of this file. We can clean this up and free disk space by writing:
$ sudo dnf clean all
14. Security fixes.
Updating packages is important to fix vulnerabilities. With dnf/yum we can decide to only install updates involving security and bug fixes.
First, we can check if there are any security updates by writing:
$ sudo dnf check-update --security
To check for bug fixes we write:
$ sudo dnf check-update --bugfix
To update packages we write:
$ sudo dnf update --security
15. dnf shell.
dnf and yum come with their own shell environment where we can do all we have discussed.
To launch the shell we write:
$ sudo dnf shell
To launch the yum shell we write:
$ sudo yum shell
Differences between dnf and yum.
Although we can use both tools interchangeably, some differences exist which make one more preferable than the other.
dnf is a next-generation version of yum because many issues remain unresolved with yum for example performance, dependency resolution, memory usage.
dnf solves dependency resolution by using the libsolv which also improves performance.
Also, apart from yum having an undocumented API it cannot run on the latest python version.
In this article we have seen how to manage packages in RHEl Linux distributions using dnf and yum package manages.
We have also seen the differences between the two package managers and why one is preferred over the other.
- For the commands' manual we execute the command $ man dnf or $ man yum.