In Red Hat Enterprise Linux and its related distributions (like Fedora and Rocky Linux), YUM and DNF are used to install, manage and remove software. These distros use packages in the RPM format (unlike Ubuntu/Debian which use apt)
So in RHEL or Fedora, this means you’ll often be using the
dnf commands to install and manage software on your system.
yum is the same as dnf!
In recent versions of Linux,
yum is the same as
dnf! In fact, the
yum command is just a symbolic link to
I can check this on my Fedora 36 system. This example output shows that
/usr/bin/yum is just a link to the
$ ls -la /usr/bin/yum lrwxrwxrwx. 1 root root 5 Sep 9 14:49 /usr/bin/yum -> dnf-3
Now let’s look at six
yum!) commands which you can use to install and manage software on Fedora or Red Hat Enterprise Linux.
Search for a package
Most of the time, when you want to install some software on Linux, the best place to look is the default repositories. Software in your distro’s repositories is usually tailored for your Linux distribution; it installs files in the right places, creates a system service and so on.
On Fedora, you’ll usually have the fedora and updates repositories enabled by default, which both contain lots of packages.
RHEL is an “enterprise” Linux distribution, has far fewer packages in its default repositories, and those are often a little more behind the “cutting-edge”, but they are generally stable and safe to install.
You can search for software in the default repositories using
dnf search, for example:
dnf search nginx
This will search for packages containing the string
Install a package from a repository
When you’ve browsed the search results and decided which package you want to install, you can use the
dnf install command. This will look in repositories for a package with the exact name, and install it.
For example, to install nginx:
dnf install nginx
Don’t forget you’ll need superuser privileges to install software, so add “sudo” to the front of the command.
Install a local rpm file
Some software isn’t distributed in repositories, but is distributed as a
.rpm file instead. You can sometimes encounter this if you’re installing some commercial, closed-source software. Or, some open source projects might provide a
.rpm file on their download or GitHub Releases page.
Whichever way you acquire a
.rpm file, you can install it with rpm using the same
dnf install your-rpm-file.rpm
You can also install an RPM file directly from a URL!:
dnf install http://github.com/example/example-app/releases/myapp.rpm
List all installed packages
Another common task is to find out all of the packages which are installed on your system, and their versions. This allows you you see all of the software applications which you have installed.
Why might you want to know this?
Sometimes you might want to check if a system has been configured correctly… or perhaps you’re wondering why a particular command is missing?
Here’s the command you need to show all installed packages:
dnf list --installed
The output from this command will show you the package name, the version, and which repository it was installed from (e.g.
Packages which have been installed from a file are usually shown as coming from the
Search for a specific installed package
Searching for a specific installed package? Well, for extra points, you can also pipe this command into
grep, which will let you search for all installed packages which match a string.
For example, if I want to see all the podman packages on my system:
[[email protected] ~]$ dnf list --installed | grep podman podman.x86_64 4:4.2.0-2.fc36 @updates podman-compose.noarch 1.0.3-6.fc36 @updates podman-gvproxy.x86_64 4:4.2.0-2.fc36 @updates podman-plugins.x86_64 4:4.2.0-2.fc36 @updates
Which files are included in a package?
Before you install a package, you can find out what’s contained inside it. The massively useful thing about packages is that they install files to a specific location. So you can see, upfront, exactly what will be installed, and where.
So, to find out which files and paths are included in a package:
dnf repoquery -l nginx
The output from this command shows you all of the files in a package, and their paths.
Where does everything go? You’ll often see that application binaries will be installed into
/usr/bin, the manpages will be added into
/usr/share/man and the program’s config files will go into
Which packages provide a command?
If you know you need a command, but you’re not sure which package provides that command, then you can use
dnf provides to query the repositories.
For example, when I wanted to install
kubectl (for working with Kubernetes), I wasn’t sure which package I needed to install. So I searched like this:
dnf provides /usr/bin/kubectl
… and the result told me that the package which contains
kubernetes-client (which is in the Fedora repositories, but might not be in the RHEL repositories).
If you’re not exactly sure of the path to the command, you can search with a wildcard:
dnf provides "*/bin/top"
There are tons more commands you can use to manage packages on your Linux system, but these ones are very handy to know! To find out more, type