dnf-commando: pakketten installeren, bijwerken en verwijderen, en het verschil met yum

TestomgevingRHEL-familieAlmaLinux 9.8root-accountGecontroleerd op 2026-10-28

Het dnf-commando is het pakketbeheercommando waarmee je op Linux-distributies uit de RHEL-familie pakketten zoekt, installeert, bijwerkt en verwijdert. Op AlmaLinux 9 start ook yum hetzelfde programma. Op een AlmaLinux 9-server hebben we search, info, provides en history echt uitgevoerd en in de uitvoer bekeken waar search, info en provides elk zoeken naar pakketten, en welke werkgeschiedenis in history achterblijft.

Commando's die het systeem wijzigen, zoals installeren, verwijderen en bijwerken, hebben we niet uitgevoerd. Dat gedrag is gecontroleerd aan de hand van de officiële DNF-documentatie en de werkgeschiedenis die al op de server stond.

1️⃣ Verband tussen het dnf-commando en yum

Het is makkelijk om aan te nemen dat yum het oude yum start, maar op AlmaLinux 9 zijn yum en dnf allebei links naar hetzelfde uitvoerbare bestand dnf-3.

ls -l /usr/bin/yum /usr/bin/dnf
lrwxrwxrwx 1 root root 5 May 21 04:48 /usr/bin/dnf -> dnf-3
lrwxrwxrwx 1 root root 5 May 21 04:48 /usr/bin/yum -> dnf-3

Het enige verschil tussen yum en dnf is de naam die je typt; welke je ook gebruikt, de subcommando's en opties zijn hetzelfde. Ook search htop gaf met yum en met dnf precies dezelfde uitvoer.

Volgens de officiële DNF-documentatie [Changes in DNF CLI compared to YUM] doen update en upgrade hetzelfde, en de documentatie raadt upgrade aan.

Op oudere distributies zonder dnf gebruik je het yum-commando zoals gewoonlijk. De namen van subcommando's in dit artikel, zoals install, search en history, zijn in yum hetzelfde.

2️⃣ Pakketten opzoeken met het dnf-commando: search, info, provides

Als je de precieze pakketnaam van het programma dat je wilt installeren niet weet, zoek je met search en één woord. search zoekt het woord in pakketnamen en samenvattingen (Summary) en zet pakketten waarvan de naam precies overeenkomt bovenaan.

dnf search htop
Last metadata expiration check: 0:21:53 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: htop ==========================
htop.x86_64 : Interactive process viewer

Voor htop bestond maar één pakket met precies die naam, dus bleef het bij één regel onder [Name Exactly Matched].

dnf search wget
Last metadata expiration check: 0:22:35 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: wget ==========================
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols
========================= Name & Summary Matched: wget =========================
perl-HTTP-Tinyish-Wget.noarch : HTTP::Tinyish wget backend
wget2-devel.x86_64 : Libraries and header files needed for using wget2 libraries
wget2-libs.x86_64 : Runtime libraries for GNU Wget2
============================== Name Matched: wget ==============================
wget2.x86_64 : An advanced file and recursive website downloader

Een woord dat in meerdere pakketten voorkomt, zoals wget, werd in drie groepen verdeeld: precies dezelfde naam, in naam én samenvatting, en alleen in de naam.

search kijkt niet naar de beschrijving (Description), dus voor een woord dat alleen in de beschrijving staat werkt het niet. Voeg dan de optie [--all] toe om ook in de beschrijving en de URL te zoeken.

Weet je de pakketnaam, dan controleer je met info de versie, de grootte en uit welke repository het pakket komt.

dnf info htop
Last metadata expiration check: 0:22:37 ago on Wed Oct 28 15:24:31 2026.
Available Packages
Name         : htop
Version      : 3.3.0
Release      : 1.el9
Architecture : x86_64
Size         : 198 k
Source       : htop-3.3.0-1.el9.src.rpm
Repository   : epel
Summary      : Interactive process viewer
URL          : http://hisham.hm/htop/
License      : GPLv2+
Description  : htop is an interactive text-mode process viewer for Linux, similar to
             : top(1).

Het nog niet geïnstalleerde htop verschijnt bij info htop onder [Available Packages] met versie 3.3.0 en repository epel. htop staat alleen in de epel-repository, dus als je search opnieuw uitvoert zonder epel, vind je niets.

dnf info wget
Last metadata expiration check: 0:22:38 ago on Wed Oct 28 15:24:31 2026.
Installed Packages
Name         : wget
Version      : 1.21.1
Release      : 11.el9_8
Architecture : x86_64
Size         : 3.1 M
Source       : wget-1.21.1-11.el9_8.src.rpm
Repository   : @System
From repo    : appstream
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.

Het al geïnstalleerde wget stond onder [Installed Packages]. Repository was @System, en de repository waaruit het bij de installatie kwam, stond als appstream op de regel [From repo].

Ken je omgekeerd alleen de bestandsnaam en weet je niet in welk pakket die zit, geef dan een bestandspad mee aan provides.

dnf provides /usr/bin/tree
Last metadata expiration check: 0:22:40 ago on Wed Oct 28 15:24:31 2026.
tree-1.8.0-10.el9.x86_64 : File system tree viewer
Repo        : @System
Matched from:
Filename    : /usr/bin/tree

tree-1.8.0-10.el9.x86_64 : File system tree viewer
Repo        : baseos
Matched from:
Filename    : /usr/bin/tree

Zoeken op /usr/bin/tree gaf twee groepen voor het tree-pakket: de geïnstalleerde kant (@System) en de repositorykant (baseos). De Filename onder [Matched from] is het pad dat echt overeenkwam. Geef je alleen een bestandsnaam zonder pad op, dan zet dnf er /usr/bin/ en /usr/sbin/ voor en zoekt opnieuw; vindt het dan nog niets, dan eindigt het met de onderstaande fout.

dnf provides nosuchfile
Last metadata expiration check: 0:22:41 ago on Wed Oct 28 15:24:31 2026.
Error: No matches found. If searching for a file, try specifying the full path or using a wildcard prefix ("*/") at the beginning.

De foutmelding raadt aan het volledige pad op te geven of de wildcard [*/] ervoor te zetten. Wat de drie commando's als invoer nemen en waar ze zoeken, kun je in het diagram hieronder stap voor stap vergelijken.

🧭 Waar de drie zoekcommando's voor pakketten kijken
Uitlegdiagram
🔍 Commando
$ dnf search htopinfo htopprovides /usr/bin/tree
① InvoerhtopEén woordhtopPakketnaam/usr/bin/treeBestandspad
➜
② Waar gezocht wordtPakketnaam en samenvatting (Summary)Zoekt in alle repository's naar elk pakket met het woord.Metadata van één pakketToont geïnstalleerde en installeerbare pakketten apart.Lijst met bestanden die het pakket levertZoekt terug welk pakket het bestand op dat pad bevat.
➜
③ UitvoerLijst met overeenkomende pakkettenhtop.x86_64 : Interactive process viewerVersie, grootte, repository, beschrijvingVersion 3.3.0, Size 198 k, Repository epelPakket met het bestandtree-1.8.0-10.el9.x86_64, @System, baseos
search zoekt het woord in pakketnamen en samenvattingen en toont een lijst, te beginnen met de precies overeenkomende namen.
info toont de versie, de grootte en de herkomstrepository van één pakket. Bij een geïnstalleerd pakket staat @System in het veld Repository.
provides zoekt via een bestandspad terug naar het pakket. De geïnstalleerde kant (@System) en de repositorykant (baseos) worden apart getoond.

3️⃣ Pakketten installeren, verwijderen en bijwerken: install, remove, upgrade

Een gevonden pakket installeer je met install. dnf installeert niet alleen het opgegeven pakket, maar in één keer ook de afhankelijke pakketten die het nodig heeft.

dnf install htop

Volgens de officiële documentatie toont dnf eerst de lijst met te installeren pakketten (de transactiesamenvatting) en vraagt dan of je wilt doorgaan; met [-y] gaat het verder zonder te vragen.

Welke afhankelijke pakketten bij de installatie nodig zijn, kun je vooraf controleren met repoquery [--requires].

dnf repoquery --requires htop
Last metadata expiration check: 0:22:59 ago on Wed Oct 28 15:24:31 2026.
libc.so.6(GLIBC_2.34)(64bit)
libcap.so.2()(64bit)
libhwloc.so.15()(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libm.so.6(GLIBC_2.29)(64bit)
libncursesw.so.6()(64bit)
libnl-3.so.200()(64bit)
libnl-3.so.200(libnl_3)(64bit)
libnl-genl-3.so.200()(64bit)
libnl-genl-3.so.200(libnl_3)(64bit)
libtinfo.so.6()(64bit)
rtld(GNU_HASH)

Met alleen [--requires] krijg je alleen de namen van de bibliotheken die htop nodig heeft. In welk pakket die bibliotheken zitten, zie je met het volgende commando.

dnf repoquery --requires --resolve htop
Last metadata expiration check: 0:23:01 ago on Wed Oct 28 15:24:31 2026.
glibc-0:2.34-283.el9_8.i686
glibc-0:2.34-283.el9_8.x86_64
hwloc-libs-0:2.4.1-6.el9_7.x86_64
libcap-0:2.48-10.el9_8.1.x86_64
libnl3-0:3.11.0-1.el9.x86_64
ncurses-libs-0:6.2-12.20210508.el9.x86_64

Voeg je [--resolve] toe, dan worden het de namen van de pakketten die die bibliotheken leveren. Daarvan ontbrak hwloc-libs op de testserver, dus wordt het meegeïnstalleerd als je htop installeert.

remove verwijdert het opgegeven pakket samen met de pakketten die ervan afhankelijk zijn, en met de standaardinstellingen ook afhankelijke pakketten die niet meer nodig zijn.

dnf remove htop

Zelfs als je alleen htop verwijdert, gaan afhankelijke pakketten die geen ander pakket nodig heeft, zoals het voor htop geïnstalleerde hwloc-libs, mee.

Pakketten die ooit als afhankelijkheid zijn geïnstalleerd maar nu door geen enkel pakket meer nodig zijn, verwijder je met autoremove. Controleer eerst met list [--autoremove] wat er verwijderd wordt.

dnf list --autoremove
Last metadata expiration check: 0:23:09 ago on Wed Oct 28 15:24:31 2026.
Autoremove Packages
cmake-rpm-macros.noarch            3.31.8-3.el9                       @appstream
grub2-tools-efi.x86_64             1:2.06-126.el9_8.alma.1            @baseos
grub2-tools-extra.x86_64           1:2.06-126.el9_8.alma.1            @baseos
libatomic.x86_64                   11.5.0-14.el9.alma.1               @baseos
libvisual.x86_64                   1:0.4.0-34.el9                     @appstream
libwayland-server.x86_64           1.21.0-1.el9                       @appstream
dnf autoremove

Op de testserver stonden er 6 pakketten in de lijst, en autoremove verwijdert deze 6 in één keer.

Of er voor geïnstalleerde pakketten een nieuwe versie is, controleer je met check-update. Met een pakketnaam erbij kijkt het alleen naar dat pakket.

dnf check-update libavif libdav1d
Last metadata expiration check: 0:52:20 ago on Wed Oct 28 15:24:31 2026.

libavif.x86_64                          1.1.1-3.el9                         epel
libdav1d.x86_64                         1.5.4-1.el9                         epel

Het commando hierboven met libavif en libdav1d eindigde met exitcode 100, omdat er voor allebei een nieuwe versie was. check-update eindigt met 100 als er updates zijn, met 0 als er geen zijn en met 1 bij een fout, dus je kunt het in scripts als voorwaarde gebruiken.

Met list en een pakketnaam zie je de geïnstalleerde versie en de nieuwe versie in de repository samen. Met updateinfo list controleer je bij welke advisory die update hoort.

dnf list libavif
Last metadata expiration check: 0:52:21 ago on Wed Oct 28 15:24:31 2026.
Installed Packages
libavif.x86_64                        0.11.1-5.el9                         @epel
Available Packages
libavif.x86_64                        1.1.1-3.el9                          epel

Voor libavif stond de geïnstalleerde 0.11.1-5.el9 onder [Installed Packages] en de 1.1.1-3.el9 uit de repository apart onder [Available Packages].

dnf updateinfo list libavif
Last metadata expiration check: 0:52:24 ago on Wed Oct 28 15:24:31 2026.
FEDORA-EPEL-2026-d611eab94a bugfix libavif-1.1.1-3.el9.x86_64

Die nieuwe versie was een update bij de bugfix-advisory FEDORA-EPEL-2026-d611eab94a. Bij beveiligingsupdates staat op dezelfde plek de ernst met Sec. erachter, zoals [Moderate/Sec.].

Bijwerken doe je met upgrade. upgrade installeert alleen nieuwe versies binnen wat de afhankelijkheden toelaten, dus de versie die check-update toonde, wordt misschien niet precies zo geïnstalleerd.

dnf upgrade libavif

Met een pakketnaam erbij worden alleen dat pakket en de afhankelijke pakketten die het nodig heeft naar een nieuwe versie gebracht.

dnf upgrade

Laat je de naam weg, dan gaat het om alle geïnstalleerde pakketten. Het verloop, eerst een transactiesamenvatting en dan de vraag of je wilt doorgaan, is hetzelfde als bij install, en de uitgevoerde transactie wordt met een nummer in history vastgelegd.

4️⃣ Repositorylijst met het dnf-commando: repolist

search en install zoeken pakketten in repository's. repolist toont de id en naam van de repository's die nu ingeschakeld zijn.

dnf repolist
repo id             repo name
appstream           AlmaLinux 9 - AppStream
baseos              AlmaLinux 9 - BaseOS
epel                Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264 Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
extras              AlmaLinux 9 - Extras
nginx-stable        nginx stable repo
remi-modular        Remi's Modular repository for Enterprise Linux 9 - x86_64
remi-safe           Safe Remi's RPM repository for Enterprise Linux 9 - x86_64

Het is makkelijk om aan te nemen dat een repository die niet in de lijst staat niet op de server bestaat, maar de standaarduitvoer van repolist toont alleen ingeschakelde repository's. Met [--all] zie je ook de uitgeschakelde, samen met een status-kolom. Op de testserver stonden alle drie CRB-repository's van AlmaLinux 9 op disabled.

dnf repolist --all | grep -i crb
crb                           AlmaLinux 9 - CRB                         disabled
crb-debuginfo                 AlmaLinux 9 - CRB - Debug                 disabled
crb-source                    AlmaLinux 9 - CRB - Source                disabled

Het aantal pakketten, het mirroradres, de verlooptijd van de metadata en de locatie van het configuratiebestand van één repository controleer je met repoinfo.

dnf repoinfo baseos
Last metadata expiration check: 0:22:55 ago on Wed Oct 28 15:24:31 2026.
Repo-id            : baseos
Repo-name          : AlmaLinux 9 - BaseOS
Repo-status        : enabled
Repo-revision      : 1793090609
Repo-updated       : Tue Oct 27 17:43:29 2026
Repo-pkgs          : 3458
Repo-available-pkgs: 3458
Repo-size          : 21 G
Repo-mirrors       : https://mirrors.almalinux.org/mirrorlist/9/baseos
Repo-baseurl       : http://aws.repo.almalinux.org/almalinux/9.8/BaseOS/x86_64/os/ (9 more)
Repo-expire        : 86400 second(s) (last: Wed Oct 28 15:24:26 2026)
Repo-filename      : /etc/yum.repos.d/almalinux-baseos.repo
Total packages: 3458

repoinfo baseos toonde 3.458 pakketten, en de metadata werd ingesteld om elke 86.400 seconden (één dag) opnieuw te worden gecontroleerd. Het .repo-bestand op de regel [Repo-filename] is het configuratiebestand van deze repository. De opties [--set-enabled] en [--set-disabled] om repository's in en uit te schakelen gebruik je met het commando config-manager van dnf-plugins-core.

5️⃣ Werkgeschiedenis en terugdraaien met het dnf-commando: history

Na een paar keer installeren en verwijderen is het moeilijk bij te houden wat je wanneer hebt veranderd, maar dnf geeft elke transactie (transaction) een nummer en legt die vast in history. Met een pakketnaam erbij zie je alleen de transacties die dat pakket hebben gewijzigd.

dnf history list tmux
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    51 | install -y tmux          | 2026-10-15 20:40 | Install        |    1

In de tot tmux beperkte uitvoer bleef alleen de regel van transactie 51 over, waarin tmux werd geïnstalleerd. Een nummerbereik schrijf je met twee punten, zoals [50..51].

dnf history list 50..51
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    51 | install -y tmux          | 2026-10-15 20:40 | Install        |    1
    50 | -y -q install mlocate    | 2026-10-07 19:39 | Install        |    1 EE

Het getal in de kolom [Altered] is het aantal gewijzigde pakketten. Aan het eind van regel 50 stond [EE]: de transactie is voltooid, maar er was uitvoer met waarschuwingen of fouten.

De opdrachtregel, de gewijzigde pakketten en de resultaatcode van één transactie bekijk je met history info.

dnf history info 51
Transaction ID : 51
Begin time     : Thu Oct 15 20:40:51 2026
Begin rpmdb    : d3db9c92a9d0f6ef9a7a1404552bb76e9d56ba7602b1fce73fa5a62170d33c5c
End time       : Thu Oct 15 20:40:51 2026 (0 seconds)
End rpmdb      : a862c33ee6a2f2d0479e4dc2631907dee47591c5b6795551b755c6cd090ac1df
User           : root <root>
Return-Code    : Success
Releasever     : 9
Command Line   : install -y tmux
Persistence    : Persist
Comment        :
Packages Altered:
    Install tmux-3.2a-5.el9.x86_64 @baseos

In transactie 51 stond bij [Command Line] het uitgevoerde commando install -y tmux precies zoals het was ingevoerd. Onder [Packages Altered] stonden het geïnstalleerde tmux en de repository @baseos, en bij [Return-Code] stond Success. Laat je het nummer weg, dan zie je de meest recente transactie.

Heb je iets verkeerd geïnstalleerd, geef dan een transactienummer mee aan history undo om het omgekeerde van die transactie uit te voeren. rollback zet de pakketstatus terug naar het moment direct na de opgegeven transactie.

dnf history undo 51

Transactie 51 was de installatie van tmux, dus undo 51 wordt een omgekeerde transactie die tmux verwijdert.

dnf history rollback 50

rollback 50 draait alle transacties na 50 terug, tot en met de laatste, dus het resultaat kan anders zijn dan bij undo 51, dat alleen tmux verwijdert.

Volgens de officiële documentatie stoppen undo en rollback zonder iets te wijzigen als er een pakket is dat niet kan worden teruggedraaid. Ook als wijzigingen die rechtstreeks met rpm zijn gedaan niet in de geschiedenis staan, stoppen ze niet met een fout.

🔲 Simulator van het dnf-commando

In de simulator hieronder kun je zelf search, info, provides, repolist en history invoeren en de uitvoer bekijken. Met yum krijg je hetzelfde resultaat.

Simulator van het dnf-commandodnf 4.14.0
[root@server work]#
Met de toetsen ↑↓ haal je eerder ingetypte commando's terug.

🔢 FAQ & aanbevolen content

Het is het moment waarop de lokale kopie van de repositorymetadata voor het laatst is gecontroleerd. Volgens de officiële documentatie wordt die opnieuw opgehaald zodra de metadata_expire-tijd van de betreffende repository verstreken is. Commando's die niet per se de nieuwste gegevens nodig hebben, zoals search en provides, gebruiken de lokale kopie ook als die verlopen is. Met [--refresh] haal je alles geforceerd opnieuw op, en [-C] gebruikt alleen de cache.

Toen we een niet-bestaand commando als foo probeerden, kregen we de fout [No such command] met de tip om een plug-in te installeren in de vorm [dnf install dnf-command(naam)]. Dat komt doordat sommige subcommando's worden toegevoegd door plug-inpakketten zoals dnf-plugins-core. Is het een typfout, bekijk dan de lijst met commando's met [dnf --help].

rpm -q leest alleen de database van geïnstalleerde pakketten op de server (RPMDB) en toont de versie van dat pakket; is het er niet, dan antwoordt het met [package htop is not installed]. dnf list –installed voegt repositorygegevens toe aan dezelfde database, dus naast een geïnstalleerd pakket staat de repository waaruit het kwam (@epel). Gebruik je dnf list zonder [--installed], dan worden ook nieuwe versies uit de repository's getoond.

🧭 Aanbevolen content over pakketcommando's 6 berichten · 2 bronnen
🗂️ Pakketcommando's
📄 YUM: concept en basiscommando's 📄 dnf-commando 📄 yum-config-manager-commando 📄 Verschil tussen RPM en YUM
📄 apt- en apt-get-commando’s 📄 snapd installeren

ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Laat zien dat je geen machine bent: 8   +   1   =