When hopping between Linux distributions, it can be challenging to smoothly transition between the different interfaces to package management tools. In this article, we're going to review some common operations and how to perform them using both
Thankfully, most of your day-to-day basic operations can be performed in the same way using both tools. Installing a package by name is
dnf install and
apt install, and removing is
dnf remove and
apt remove. Removing dependencies that are no longer needed is
dnf autoremove and
Sometimes, you won't know the exact package name you need to get a certain tool. In those instances, you can use
dnf search and
apt search to search package names and descriptions. These tools support regular expressions, which can help trim down results.
root@ubuntu:~# apt search ripgrep Sorting... Done Full Text Search... Done elpa-dumb-jump/groovy 0.5.3-1 all jump to definition for multiple languages without configuration ripgrep/groovy 12.1.1-1 amd64 Recursively searches directories for a regex pattern ugrep/groovy 2.4.1+dfsg-1 amd64 faster grep with an interactive query UI
[root@fedora ~]# dnf search ripgrep Last metadata expiration check: 0:04:09 ago on Sun 25 Oct 2020 09:43:35 PM UTC. ====================== Name Exactly Matched: ripgrep ====================== ripgrep.x86_64 : Line oriented search tool using Rust's regex library [root@fedora ~]#
One "gotcha" to keep in mind is that the commands to upgrade operate slightly differently.
dnf update and
dnf upgrade both operate the same way and combine the steps performed by
apt update and
apt upgrade. This means that a
dnf system will try and fetch any pending updates from its configured repositories and prompt the user to update packages, all in a single command. You still get the option to actually perform the update or not, of course, but it can be slightly surprising for folks used to Ubuntu to see a
dnf update suddenly prompting the user to update packages.
dnf distro-sync operates similarly, combining the functions of
apt update and
[ Readers also liked: Create an Apache-based YUM/DNF repository on Red Hat Enterprise Linux 8 ]
Querying package information
When querying for package information,
dnf offers a few small conveniences by combining some
apt functionality into a single command.
apt show will give you information about a package, and
apt-cache policy will provide information about the repository a package came from and its upgrade status.
dnf rolls all of this into
dnf infoAnd also includes remote package information that
apt provides via
root@ubuntu:~# apt show curl Package: curl Version: 7.68.0-1ubuntu4 Priority: optional Section: web Origin: Ubuntu Maintainer: Ubuntu Developers <email@example.com> Original-Maintainer: Alessandro Ghedini <firstname.lastname@example.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 411 kB Depends: libc6 (>= 2.17), libcurl4 (= 7.68.0-1ubuntu4), zlib1g (>= 1:1.1.4) Homepage: http://curl.haxx.se Task: server, cloud-image, server-raspi, ubuntu-budgie-desktop Download-Size: 161 kB APT-Manual-Installed: no APT-Sources: http://mirrors.digitalocean.com/ubuntu groovy/main amd64 Packages Description: command line tool for transferring data with URL syntax curl is a command line tool for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP. . curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a busload of other useful tricks. root@ubuntu:~# apt-cache policy curl curl: Installed: 7.68.0-1ubuntu4 Candidate: 7.68.0-1ubuntu4 Version table: *** 7.68.0-1ubuntu4 500 500 http://mirrors.digitalocean.com/ubuntu groovy/main amd64 Packages 100 /var/lib/dpkg/status
[root@fedora ~]# dnf info curl Last metadata expiration check: 0:10:03 ago on Sun 25 Oct 2020 09:43:35 PM UTC. Installed Packages Name : curl Version : 7.69.1 Release : 1.fc32 Architecture : x86_64 Size : 654 k Source : curl-7.69.1-1.fc32.src.rpm Repository : @System From repo : anaconda Summary : A utility for getting files from remote servers (FTP, HTTP, and others) URL : https://curl.haxx.se/ License : MIT Description : curl is a command line tool for transferring data with URL syntax, supporting : FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, : SMTP, POP3 and RTSP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP : uploading, HTTP form based upload, proxies, cookies, user+password : authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer : resume, proxy tunneling and a busload of other useful tricks. Available Packages Name : curl Version : 7.69.1 Release : 6.fc32 Architecture : x86_64 Size : 289 k Source : curl-7.69.1-6.fc32.src.rpm Repository : updates Summary : A utility for getting files from remote servers (FTP, HTTP, and others) URL : https://curl.haxx.se/ License : MIT Description : curl is a command line tool for transferring data with URL syntax, supporting : FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, : SMTP, POP3 and RTSP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP : uploading, HTTP form based upload, proxies, cookies, user+password : authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer : resume, proxy tunneling and a busload of other useful tricks.
To list files provided by a local package, you can use
rpm -ql on
dnf systems and
dpkg -L on
apt systems. To list the files provided by a remote package, however, it gets a bit more complicated. On
dnf systems, this can be done via
dnf repoquery -l. To do this on Ubuntu, you can use a utility called
apt-file and run
apt-file list. You might need to install this yourself, as it is maintained by the apt team but is not part of
Sometimes, you’ve just got to go digging through the source code to see what’s going on. Thankfully, there’s an easy way to get at the source code directly through your package manager. To display the source package to the given package name, use
dnf repoquery -s and
apt-cache showsrc. To grab it,
dnf download --source will pull this down for you quickly, as will
In this article, we have run through a few common
apt operations that systems engineers will encounter. For a more in-depth look at the options available on different distributions, I encourage you to take a look at the Pacman Rosetta available on the Arch Linux wiki. Though it is designed for users coming to Arch from other distributions, it is a great resource for anyone looking to translate from one distribution’s package manager to another for a huge range of common operations.
[ Free online course: Red Hat Enterprise Linux technical overview. ]