20 DNF Command Examples to Manage Packages on Fedora / RHEL

By | April 1, 2023

DNF (Dandified Yum) is an RPM-based package manager capable of managing packages in Linux. Today, we'll go through 20 DNF command examples. These examples will teach you how to manage packages with ease.

You can use DNF to install and update packages. It is a popular package manager and comes pre-installed as the default package manager in RHEL 8, Fedora 22, and CentOS.

Before moving forward, let's look at the definition of package manager.

What is a package manager in Linux?

A package manager is a collection of tools that helps automate package management, including searching, downloading, installing, upgrading, and removing packages within an operating system.

If you are an ubuntu user like me, you are probably familiar with tools like apt, aptitude, apt-get and dpkg that are used to manage .deb based package.

A package manager can be a command line tool or a graphical user interface app. Currently, there are many popular package managers available for Linux. These include:

  • APT (Advanced Package Tool)
  • rpm (RedHat Package Manager)
  • yum (Yellowdog Update Modified)
  • dnf (Dandified Yum)
  • dkpg (Debian Package Manager)

To truly understand package managers, we must also learn about "package."

A package is a compressed software archive file that offers functionality, either standalone or part of a software application. It can be a GUI application, command line utility, or software library. In addition, you can find software dependency files, binary executables, and configuration files inside a package.

Depending on the package manager, the package extension can be .deb, .rpm, .tgz, etc.

These package managers also use package sources known as repositories to download new packages.

In short, a package manager takes care of the following:

  • Extracting package archives
  • Making sure that the package is authentic by checking the digital certificates
  • Checking for package integrity by authenticating checksums
  • Taking care of essential package management

What is DNF package manager?

DNF package manager is a Fedora-based package manager. It is a successor to YUM. At its core, DNF takes care of dependency checking. It performs faster and requires fewer inputs from the user. By doing so, the user doesn't have to manually review or update package dependencies.

Under the hood, DNF uses the rpm command. When originally released, DNF used Python. However, the team has recently been trying to move it to C. Also, it uses gpg signature verification to ensure package integrity and verifiability.

DNF vs. YUM

DNF is the successor to YUM. It improves on YUM in every criterion, including performance, compatibility, and performance.

YUM suffers from slow performance as it lacks proper memory synchronization to repository metadata. DNF solves this by ensuring adequate synchronization. Moreover, if you're a developer, you wouldn't find YUM developer-friendly as it doesn't offer good API documentation. On the other hand, DNF ensures proper API documentation by adhering to strict API rules.

As for dependency solving, DNF uses 'libsolv.' It is an advanced dependency solver that is fast and accurate. YUM lacks this feature and depends on public API for dependency resolution.

Lastly, DNF lets users delete Kernel packages if needed. YUM lacks this feature.

20 DNF command examples to manage packages

In this section, we'll look at 20 DNF command examples. These examples will help you learn how to use the DNF command effectively.

To follow the guide, you must have access to a Linux distribution that uses the DNF package manager. For example, you can use CentOS, Fedora, RHEL, or even Oracle Linux. However, if your distro doesn't come pre-installed with DNF, then you need to use the following command to install it.

$ yum install dnf

1. Checking DNF version

To check the DNF version installed on your system, run the command:

#input

$ dnf --version

It'll output the version as below.

#output

4.14.0
  Installed: dnf-0:4.14.0-1.fc37.noarch at Sun Dec 11 05:49:07 2022
  Built    : Fedora Project at Fri Sep  9 13:05:18 2022

  Installed: rpm-0:4.18.0-1.fc37.x86_64 at Sun Dec 11 05:49:07 2022
  Built    : Fedora Project at Wed Sep 21 10:51:10 2022

2. List the installed packages

To list installed packages on your system, run the following command:

$ dnf list installed
Installed Packages
ModemManager-glib.x86_64                                1.18.12-1.fc37                                  @updates
NetworkManager.x86_64                                   1:1.40.10-1.fc37                                @updates
NetworkManager-libnm.x86_64                             1:1.40.10-1.fc37                                @updates
alternatives.x86_64                                     1.21-1.fc37                                     @koji-override-1
audit.x86_64                                            3.0.9-1.fc37                                    @fedora
audit-libs.x86_64                                       3.0.9-1.fc37                                    @anaconda
authselect.x86_64                                       1.4.2-1.fc37                                    @koji-override-1
authselect-libs.x86_64                                  1.4.2-1.fc37                                    @koji-override-1
basesystem.noarch                                       11-14.fc37                                      @anaconda
bash.x86_64                                             5.2.15-1.fc37                                   @updates

As the list is long, you can pipe the output to more or less. This will show limited packages on your screen.

$ dnf list | more
$ dnf list | less

If you want to search for a specific installed package, then you need to add its name at the end of the command.

$ dnf list installed [package-name]
[term]

For example, if you want to learn whether or not the <strong>zlub.x86_64 package</strong> is available on your system, run the following command.

[term]
dnf list installed zlub.x86_64

3. List the available packages

Similarly, you can also check the available packages. To do so, run the following command:

$ dnf list available

It'll look for the fastest mirror and see if the package is available.

[nitt@DESKTOP-58T1V9I ~]$ dnf list available zip
Last metadata expiration check: 0:10:46 ago on Wed Mar  1 19:04:36 2023.
Available Packages
zip.x86_64                                              3.0-33.fc37                                               fedora

If there is nothing to show, it'll show an error: No matching Packages to list

4. Install a specific package using DNF

To install a package using DNF, you need to use the install argument and specify the package name. The syntax of the command is as below.

For example, if you want to install Python, then the command is:

$ sudo dnf install python

Note: The package installer will ask you for confirmation when installing packages. Press Y to continue and N to cancel.

If you want to install from a specific package, use the --enablerepo argument.

$ dnf --enablerepo=epl install httpd

5. Check for new package updates from the repository

You can update new packages from the repository with the check-update argument. With this argument, the DNF command looks for updates for installed packages. However, it only shows the available updates and does not carry out any updates.

$ dnf check-update

6. Update the new package from the repository

You need to use the update argument to update the new packages. If you follow it with the package name, it'll only update that specifically. Otherwise, it'll update all existing packages that have updates available.

$ dnf update bash -y

For updating a specific package, the syntax reads as:

$ dnf update package-name

For example, if you want to update the audit.x86_64 package, you need to enter the following command in the terminal.

$ dnf update audit.x86_64

Note: To make it work, you need to first run the check-update argument.

7. Get specific information about the package

Many times, you're not sure whether or not to update the package. To help you, the DNF command offers the info argument that outputs package details in the terminal.

The syntax is as below

$ dnf info package-name

For example, if you want to get info about the httpd package, you can do it by copy-pasting the following command in the terminal.

$ dnf info httpd
Last metadata expiration check: 2:23:56 ago on Wed Mar  1 19:04:36 2023.
Available Packages
Name         : httpd
Version      : 2.4.55
Release      : 1.fc37
Architecture : i686
Size         : 52 k
Source       : httpd-2.4.55-1.fc37.src.rpm
Repository   : updates
Summary      : Apache HTTP Server
URL          : https://httpd.apache.org/
License      : ASL 2.0
Description  : The Apache HTTP Server is a powerful, efficient, and extensible
             : web server.

Name         : httpd
Version      : 2.4.55
Release      : 1.fc37
Architecture : x86_64
Size         : 51 k
Source       : httpd-2.4.55-1.fc37.src.rpm
Repository   : updates
Summary      : Apache HTTP Server
URL          : https://httpd.apache.org/
License      : ASL 2.0
Description  : The Apache HTTP Server is a powerful, efficient, and extensible
             : web server.

8. Check the package contents

You can further learn about the package by learning about its contents. The DNF command offers the provides argument to check the details quickly.

$ dnf provides package-name

For instance, if you want to check Python package content, you need to run the following:

dnf provides Python
Last metadata expiration check: 2:27:59 ago on Wed Mar  1 19:04:36 2023.
python-unversioned-command-3.11.0-1.fc37.noarch : The "python" command that runs Python 3
Repo        : fedora
Matched from:
Provide    : python = 3.11.0-1.fc37

python-unversioned-command-3.11.2-1.fc37.noarch : The "python" command that runs Python 3
Repo        : @System
Matched from:
Provide    : python = 3.11.2-1.fc37

python-unversioned-command-3.11.2-1.fc37.noarch : The "python" command that runs Python 3
Repo        : updates
Matched from:
Provide    : python = 3.11.2-1.fc37

9. Search the package and its related details

The info argument shows package details. However, what happens when you want to search for a package? In that case, the DNF command offers the search argument. It'll return two sections - the first where it lists if it matches the given name, and the second where it provides a summary/description.

$ dnf search package-name
$ dnf search httpd

10. Downloading RPM file package

You can also use the DNF command to download RPM files. To do so, you need to use the download argument, followed by the package name.

$ dnf download package-name

However, to use it, you need to install dnf-plugins-core package.

$ sudo dnf install dnf-plugins-core

Once done, run the DNF download command to download its RPM file.

$ sudo dnf download httpd
[nitt@DESKTOP-58T1V9I ~]$ sudo dnf download httpd
[sudo] password for nitt:
Last metadata expiration check: 1:23:19 ago on Wed Mar  1 20:52:01 2023.
(1/2): httpd-2.4.55-1.fc37.x86_64.rpm                                                   392 kB/s |  51 kB     00:00
(2/2): httpd-2.4.55-1.fc37.i686.rpm                                                      40 kB/s |  52 kB     00:01

11. Installing manually downloaded package

Now, with a manually downloaded .rpm package, we can install it manually with the localinstall argument. It resolves dependencies automatically.

$ dnf localinstall package-name.rpm

Note: This method works with .rpm files only.

For example, we'll try to install the httpd.rpm package that we downloaded in the previous step.

To do so, the command needs to be:

$ dnf localinstall httpd-2.4.55-1.fc37.x86_64.rpm

Press Y to continue the installation.

If you don't want to type or copy-paste the long package name, then you can also install it with the following command.

$ dnf install *.rpm

Note: This command will install all .rpm packages within the working directory. So, if you want to install a specific .rpm, then mention its name. Otherwise, you can keep only the required .rpm files in the directory.

12. Reinstall a package

If you find any packaging issue and want to reinstall it, you can do it by using the reinstall argument.

$ dnf reinstall package-name

Let's reinstall the httpd package we installed manually.

$ dnf reinstall httpd

13. Uninstall a package

To uninstall a package, you need to use the remove argument. The syntax for it is as below.

$ dnf remove package-name

Note: You can also use it to uninstall an application.

14. Downgrading a package

If you want to downgrade a package, you can install the downgrade argument, followed by the package name you want to downgrade.

$ dnf downgrade package-name

Let's downgrade the Python package.

$ dnf downgrade python

15. Upgrading a package

Like downgrading, you can also upgrade a package with the upgrade argument, followed by the package name.

$ dnf upgrade package-name

Let's upgrade the Python package that we downgraded earlier.

$ dnf upgrade python

16. Upgrading or downgrading all packages

You must use the distro-sync command to upgrade or downgrade all packages based on the system's latest version.

$ dnf distro-sync

17. Update the system with DNF

You can use the DNF command to check system-wide updates. This is common for different RPM-based distros.

To check and list updates for your system, run the following command.

$ dnf check-update
$ dnf list updates

And, if you want to install all updates at once, run the dnf update command.

$ dnf update

Moreover, you can update specific packages by using the following command.

$ dnf update package-name

18. Build and Clear Cache Information

DNF uses a cache for faster execution. It stores the cache in the /var/cache/dnf directory. Here, it keeps all repository and package information.

If the DNF command is not working as intended, you can troubleshoot it by clearing the cache. This solves problems with incorrect data.

$ dnf clean all

You can also remake the cache by using the makecache argument.

$ time dnf makecache

Note: Cache builds over time, irrespective if you run makecache or not.

19. Install security updates

The DNF command lets you perform security updates only to your installed packages. This can help you secure your working environment or a production environment.

To install security updates to your packages only, you need to use the following command:

$ dnf updateinfo list sec

20. Display verbose information

By default, the DNF command doesn't display detailed information. However, it can hide vital information required for troubleshooting. You need to add -v argument to the command to make it output detailed information.

For example, if you want to install httpd and want additional information, you need to run the command:

$ dnf install httpd -y -v

Conclusion

The DNF package manager is a powerful package management solution for modern and powerful Linux operating systems such as Fedora, CentOS, and RHEL. It gives the user power while automating the most important aspects behind the scenes.

That's it! We've covered 20 necessary DNF commands that you should know. Congrats on becoming a DNF Pro.

About Silver Moon

A Tech Enthusiast, Blogger, Linux Fan and a Software Developer. Writes about Computer hardware, Linux and Open Source software and coding in Python, Php and Javascript. He can be reached at [email protected].

Leave a Reply

Your email address will not be published. Required fields are marked *