A package manager keeps track of the software that is installed on your computer, and allows you to easily install new software, upgrade to newer versions, or remove software. As the name suggests, package managers manage packages: sets of files that are grouped together and that you can install and remove as a set.
As a rule, a package can contain an entire application itself, but not only this, but all the settings that the system requires for its operation.
An example is that the instant messaging client gaim
is contained in a package of the same name. However, it is common for a program to consist of several related packages. For example, the image editor gimp
consists not only of the package gimp, but also of the package gimp-data
.
As you may have noticed, sometimes packages are related to each other. This makes it often not convenient to manage each of them individually. Hence, the need to use package managers.
These are utilities present in each distribution that automate the process of installing, removing and updating these packages. They also list other packages available in the repository and display information about their dependencies. The latter is a vital point of their existence.
Many times a package requires another package to be installed. But it is not always one or two, it can be as many as the main package requires. Imagine installing these packages one by one or not knowing which are the dependencies of the package. It would be chaos because one of the main features of package managers is their ability to resolve these dependencies.
In summary, the task of a package manager is to present an interface that assists the user in the task of managing the set of packages that are installed on your system.
Main features of package managers
Although each package manager can include its features to differentiate itself from the rest, the common features are:
- Automatic management of dependencies (when installing or uninstalling packages).
- Search for updates of all the packages we have locally, according to the latest version available in the official repositories.
- Checking checksums and digital signatures.
Main package managers in Linux
Some main package managers that you can find throughout the Linux universe are:
- DPKG: the base package manager for Debian-based distributions.
- Apt: a user-friendly interface and added features for the DPKG system, found in Debian-based distributions such as Ubuntu or Linux Mint.
- RPM: the base package manager found in Red Hat-based distributions such as Red Hat Enterprise Linux, and CentOS.
- Yum: a front-end for the RPM system, found in Red Hat-based distributions.
- Dnf: Another, more feature-rich front-end for the RPM system.
- zypper: found on SUSE and OpenSUSE.
- Pacman: the package manager for Arch Linux-based distributions.
It doesn’t matter which Linux distribution you use because the process from the technical perspective is the same in each of them, but not the way in which each of the package managers does it.
What is DNF?
According to DNF’s GitHub profile
Dandified YUM (DNF) is the next upcoming major version of YUM. It does package management using RPM, libsolv and hawkey libraries. For metadata handling and package downloads, it uses librepo. To process and effectively handle the comps data it uses libcomps.
In short, it is a YUM-based package manager that is used on RHEL and family distributions such as Fedora, Alma Linux, Rocky Linux, Oracle Linux and CentOS.
DNF makes it easy to maintain packages by automatically checking for dependencies and determines the actions required to install packages. This method eliminates the need to manually install or update the package, and its dependencies, using the rpm command. DNF is now the default software package management tool in Fedora.
Compared to other package managers, DNF has better memory utilization, improved dependency management and the ability to run Python 2 and Python 3. It is therefore considered one of the fastest and most complete package managers in all of Linux.
DNF officially debuted with Fedora 18, but quickly spread to other members of the RHEL-based distributions. And now it is the package manager for Fedora, RHEL, CentOS, and others.
Now, how to use it? Well, I’ll explain it to you.
Basic use of DNF on Linux
DNF solves all the problems associated with yum, such as low performance, high memory usage, slow dependency resolution. But it retains much of its syntax, so the transition is effortless to make.
The first thing to do is to open a terminal to use DNF. Remember that DNF is present by default in RHEL, Oracle Linux, Fedora, Alma Linux, Rocky Linux and CentOS.
When you open the terminal, you can consult the DNF help by running
dnf help
There you will get a fairly comprehensive output screen explaining how to use it.
You can also use help
to get information and help on a particular subcommand like install
.
dnf help install
The slightly more refined output will tell you all the necessary information about install
which as you may notice we will use to install packages.
Another command you can use is version
to get the version of DNF you have
dnf --version
Sample Output
4.13.0
Installed: dnf-0:4.13.0-1.fc36.noarch at Mon 29 Aug 2022 07:48:09 AM GMT
Built : Fedora Project at Mon 30 May 2022 09:55:23 AM GMT
Installed: rpm-0:4.17.1-3.fc36.x86_64 at Mon 29 Aug 2022 07:47:49 AM GMT
Built : Fedora Project at Tue 02 Aug 2022 12:31:56 PM GMT
With these first commands, you can get an idea about how to use it.
Package management using DNF (I)
Note: For package management, DNF requires root permissions. That is, you will probably have to use sudo.
Now comes the most important part, and it is related to package management with DNF.
The first thing we usually do is to look for packages inside the official repositories that are enabled on the system. To achieve this, just follow this syntax.
dnf search [package]
In [package]
you can type a search criteria that allows you to identify possible packages.
dnf search vim
You will get an output similar to this
Last metadata expiration check: 0:00:34 ago on Thu 27 Oct 2022 12:03:45 AM UTC.
====================================================================== Name & Summary Matched: vim ======================================================================
awesome-vim-colorschemes.noarch : Collection of color schemes for Neo/vim, merged for quick use
beakerlib-vim-syntax.noarch : Files for syntax highlighting BeakerLib tests in VIM editor
boxes-vim.noarch : Vim plugin for boxes
espeak-ng-vim.noarch : Vim syntax highlighting for espeak-ng data files
fluxbox-vim-syntax.noarch : Fluxbox syntax scripts for vim
gap-vim.noarch : Edit GAP files with VIM
geany-plugins-vimode.x86_64 : Vim-mode plugin for Geany
neovim.x86_64 : Vim-fork focused on extensibility and agility
neovim-ale.noarch : Asynchronous NeoVim Lint Engine
neovim-qt.x86_64 : Qt GUI for Neovim
notmuch-vim.x86_64 : A Vim plugin for notmuch
If you already know the exact name of a package, you can also get information about it with the following command:
dnf info [package-name]
For example:
dnf info wget
Since vim
is the name of the package, then the on-screen output will tell you valuable information about this package.
Last metadata expiration check: 0:00:36 ago on Thu 27 Oct 2022 12:06:38 AM UTC.
Installed Packages
Name : wget
Version : 1.21.3
Release : 1.fc36
Architecture : x86_64
Size : 3.2 M
Source : wget-1.21.3-1.fc36.src.rpm
Repository : @System
From repo : fedora
Summary : A utility for retrieving files using the HTTP or FTP protocols
URL : http://www.gnu.org/software/wget/
License : GPLv3+
Description : GNU Wget is a file retrieval utility which can use either the HTTP or
: FTP protocols. Wget features include the ability to work in the
: background while you are logged out, recursive retrieval of
: directories, file name wildcard matching, remote file timestamp
: storage and comparison, use of Rest with FTP servers and Range with
: HTTP servers to retrieve files over slow or unstable connections,
: support for Proxy servers, and configurability.
Similarly, you can specify several packages at the same time.
dnf info vim nano wget
You will get a sorted output screen with information about each package.
Then with the information already specified, you can install a package by executing the following command
dnf install [package]
Automatically, dnf will calculate the dependencies, and you will be presented with a summary of the changes to be made. To confirm the installation, just press the y
key, and it will start.
Similarly, you can specify several packages at once
dnf install vim nano wget
It will automatically resolve the dependencies and start the process.
Another command that is widely used by dnf is to remove packages. The syntax is quite similar to install
but is changed to remove
.
dnf remove [package]
For example,
dnf remove nano
Similarly, you can specify many packages at the same time.
dnf remove nano wget tar
Package management using DNF (II)
To update a package, then the update
command is used. If you specify one or several packages, then you will update them.
dnf update nano
The above command will update nano
if there is a newer package in the official repositories.
You can also specify two packages simultaneously
dnf update nano wget tar
But if you want to upgrade all the installed packages, then run
dnf upgrade
On servers and workstations, it is sometimes convenient to upgrade only the most essential parts of the system to have the security patches. This can be accomplished with the command.
sudo dnf upgrade --security
Another interesting option is to check the updates that the system requires. In this case, you can run.
dnf check-update
DNF will then check with the official system repositories and present you with a summary of available system-wide updates.
It is common in enterprise environments for many sysadmin to download packages for installation on another computer. This can be done with the download
command.
dnf download [package-name]
For example:
dnf download nano wget
In this way, the packages will be downloaded but
Package group management
One of the main features of RHEL-based distributions is that their official repositories group their packages into groups to make them easier to manage and use.
First, you need to know which package groups are in the system. To achieve this, run.
dnf group list
Sample output:
Last metadata expiration check: 0:01:12 ago on Thu 27 Oct 2022 12:06:38 AM UTC.
Available Environment Groups:
Fedora Custom Operating System
Minimal Install
Fedora Server Edition
Fedora Workstation
Fedora Cloud Server
.
.
Available Groups:
3D Printing
Administration Tools
Audio Production
Authoring and Publishing
C Development Tools and Libraries
Cloud Infrastructure
Cloud Management Tools
Compiz
This way, you will be able to know all the available package groups.
You will also be able to display information about one of these groups:
dnf group info "Server"
This way, you will be able to know which packages constitute that group. You can replace Server
with the name of another group.
And to install a package group, you can run
dnf group install [package-group-name]
For example:
dnf group install "Server"
So, after the dependency calculation, the installation process will start.
The reverse process, i.e., removing a package-group, can be done by running
dnf group remove [package-group-name]
For example:
dnf group remove "Server"
Repository management with DNF on Linux
As you know, the distribution of packages on Linux is done through repositories where the packages are hosted.
To find out which packages are enabled on the system, you have to run the following command
dnf repolist
Sample Output:
repo id repo name
fedora Fedora 36 - x86_64
fedora-cisco-openh264 Fedora 36 openh264 (From Cisco) - x86_64
fedora-modular Fedora Modular 36 - x86_64
updates Fedora 36 - x86_64 - Updates
updates-modular Fedora Modular 36 - x86_64 - Updates
This way you can quickly find out which repositories are enabled on the system.
Now, if you want to list all the repositories on the system including the disabled ones, run
dnf repolist all
If you would like to add a repository, you have to run
dnf config-manager --add-repo [repository-url]
By default, many added repositories are not hailed by the system for security reasons. So, after adding them, you may have to enable it.
dnf config-manager --set-enabled [repository]
The reverse process would be something like this:
dnf config-manager --set-disabled [repository]
Advanced package management using DNF
Installing, uninstalling and upgrading packages along with their dependencies are basic operations that any package manager should do, but it is always possible to interact in a more advanced way with it to get wonderful results.
An important feature of DNF is that it allows you to search for a package by a file that contains it. The provides
command is a great way to do this.
dnf provides [file-name]
For example,
dnf provides named
This will show all packages containing that file name. Usually, there should only be a few or even one result.
There are certain applications that are distributed on the Internet as RPM packages. So, you download this package and what proceeds is a local installation of the package. To achieve this, you can run.
dnf install [package-name].rpm
Remember that the package has to be in the same directory as the prompt.
Typically, this is the way to install applications like Code, Edge or Google Chrome.
If there is a problem with a package, you can reinstall it by just running
dnf reinstall [package-name]
If you want to synchronize the system with the official repositories, you can run
dnf distro-sync
This command will be able to upgrade or downgrade packages according to the information obtained from the repositories.
Using DNF to clean up packages and save disk space
Although the DNF cache is generated automatically over time, you can always create it manually. This is important for many configurations and for tracking packages installed on the hard disk.
To achieve this, you can run the following command
sudo time dnf makecache
Now, it is also possible to remove this and the other cache from the system. The purpose of this is to remove packages that have already been installed and are taking up disk space.
To do this, run
sudo dnf clean all
Another way to save disk space is to remove orphaned packages from the system. These packages are dependencies of other packages that have already been removed. Therefore, they are no longer useful.
It is effortless to do this with the following command
sudo dnf autoremove
Manage the usage history of DNF
DNF is so complete that it allows with the history
subcommand to query the times it has been used to handle packages.
To achieve this, just run
dnf history
By default, the last 20 transactions made with dnf will be shown.
If you want more details about a particular transaction, then you can add info
and the transaction ID to query. For example:
dnf history info 19
This way, there is a record of what dnf has done on the system.
There is also the possibility to revert the changes made by this transaction. This is ideal if you detect inappropriate behavior as a result of an update or a package uninstallation.
To achieve this, you just need to know the ID of the DNF transaction and revert it like this
dnf history undo [id]
Or redo it otherwise.
dnf history redo [id]
Conclusion
Package managers make Linux a usable system. Of all the ones out there, DNF is emerging as one of the best for its speed, efficiency, and number of different options to manage the system smoothly.
I hope this complete guide will help you understand DNF. I hope you liked it and share it with your friends.