dnf-Befehl: Pakete installieren, aktualisieren, entfernen und Unterschiede zu yum

TestumgebungRHEL-FamilieAlmaLinux 9.8root-KontoGeprüft am 2026-10-28

Der Befehl dnf ist der Paketverwaltungsbefehl für RHEL-basierte Linux-Systeme, mit dem du Pakete suchst, installierst, aktualisierst und entfernst. Unter AlmaLinux 9 startet auch die Eingabe von yum dasselbe Programm. Auf einem Server mit AlmaLinux 9 habe ich search, info, provides und history tatsächlich ausgeführt und anhand der Ausgabe geprüft, wo search, info und provides bei der Paketsuche jeweils nachsehen und welche Einträge history speichert.

Befehle, die das System verändern, etwa Installieren, Entfernen oder Aktualisieren, habe ich nicht ausgeführt. Ihr Verhalten habe ich anhand der offiziellen DNF-Dokumentation und der auf dem Server vorhandenen Verlaufseinträge geprüft.

1️⃣ Wie der dnf-Befehl mit yum zusammenhängt

Man könnte leicht annehmen, dass die Eingabe von yum das alte yum startet, doch unter AlmaLinux 9 sind yum und dnf beide Links auf dieselbe ausführbare Datei 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

Der Unterschied zwischen yum und dnf liegt nur im Namen, den du eingibst; egal, welchen du nutzt, Unterbefehle und Optionen sind gleich. Auch die Ausgabe von search htop war mit yum und mit dnf identisch.

Laut der offiziellen DNF-Dokumentation [Changes in DNF CLI compared to YUM] verhalten sich update und upgrade gleich, und die Dokumentation empfiehlt upgrade.

Auf älteren Distributionen ohne dnf verwendest du den yum-Befehl unverändert. Die Namen der Unterbefehle in diesem Beitrag wie install, search und history sind bei yum dieselben.

2️⃣ Pakete abfragen mit dem dnf-Befehl: search, info, provides

Wenn du den genauen Paketnamen des Programms, das du installieren willst, nicht kennst, suchst du mit search und einem einzelnen Wort. search sucht das Wort in Paketnamen und Zusammenfassungen (Summary) und setzt das Paket mit exakt passendem Namen ganz nach oben.

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

Für htop gibt es nur ein Paket mit genau diesem Namen, daher bestand das Ergebnis aus einer einzigen Zeile unter [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

Ein Wort, das in mehreren Paketen vorkommt, etwa wget, erschien in drei Gruppen aufgeteilt: exakt passender Name, Treffer in Name und Zusammenfassung sowie Treffer nur im Namen.

search berücksichtigt den Beschreibungstext (Description) nicht und eignet sich daher nicht für Wörter, die nur in der Beschreibung stehen. In diesem Fall erweiterst du die Suche mit der Option [--all] auf Beschreibung und URL.

Kennst du den Paketnamen, prüfst du mit info Version, Größe und das Repository, aus dem das Paket stammt.

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).

Das noch nicht installierte htop erscheint bei info htop unter [Available Packages] mit Version 3.3.0 und Repository epel. htop gibt es nur im Repository epel; führst du search ohne epel erneut aus, erscheint nichts.

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.

Das bereits installierte wget erschien unter [Installed Packages]. Repository war @System, und das Repository, aus dem es bei der Installation geladen wurde, stand in der Zeile [From repo] als appstream.

Kennst du umgekehrt nur einen Dateinamen, aber nicht das Paket, in dem die Datei steckt, gibst du provides den Dateipfad mit.

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

Die Suche nach /usr/bin/tree ergab zwei Gruppen: das installierte Paket tree (@System) und das im Repository (baseos). Der Filename unter [Matched from] ist der Pfad, der tatsächlich gepasst hat. Gibst du nur einen Dateinamen ohne Pfad an, sucht dnf erneut mit vorangestelltem /usr/bin/ und /usr/sbin/ und endet, wenn auch das nichts findet, mit dem Fehler unten.

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.

Die Fehlermeldung rät, den vollständigen Pfad anzugeben oder den Platzhalter [*/] voranzustellen. Was die drei Befehle jeweils als Eingabe erwarten und wo sie suchen, kannst du im Diagramm unten Schritt für Schritt vergleichen.

🧭 Wo die drei Befehle zur Paketsuche nachsehen
Erklär-Diagramm
🔍 Befehl
$ dnf search htopinfo htopprovides /usr/bin/tree
① EingabehtopEin einzelnes WorthtopPaketname/usr/bin/treeDateipfad
➜
② Wo gesucht wirdPaketname und Zusammenfassung (Summary)Findet in allen Repositorys jedes Paket, das das Wort enthält.Metadaten eines einzelnen PaketsZeigt Installiertes und Installierbares getrennt an.Dateilisten, die Pakete bereitstellenFindet rückwärts das Paket, das die Datei unter diesem Pfad enthält.
➜
③ AusgabeListe passender Paketehtop.x86_64 : Interactive process viewerVersion, Größe, Repository, BeschreibungVersion 3.3.0, Size 198 k, Repository epelPaket, das die Datei enthälttree-1.8.0-10.el9.x86_64, @System, baseos
search sucht das Wort in Paketnamen und Zusammenfassungen und listet die Treffer beginnend mit exakt passenden Namen auf.
info zeigt Version, Größe und Herkunfts-Repository eines einzelnen Pakets. Bei installierten Paketen steht im Feld Repository @System.
provides findet über einen Dateipfad rückwärts das Paket. Die installierte Seite (@System) und die Repository-Seite (baseos) erscheinen getrennt.

3️⃣ Pakete installieren, entfernen, aktualisieren: install, remove, upgrade

Das gefundene Paket installierst du mit install. dnf installiert nicht nur das angegebene Paket, sondern auf einmal auch die Abhängigkeitspakete, die es benötigt.

dnf install htop

Laut offizieller Dokumentation zeigt dnf die Liste der zu installierenden Pakete (die Transaktionsübersicht) an und fragt dann, ob es fortfahren soll; mit [-y] geht es ohne Nachfrage weiter.

Welche Abhängigkeitspakete bei der Installation mitkommen, kannst du vorab mit repoquery [--requires] prüfen.

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)

Mit [--requires] allein erscheinen nur die Namen der Bibliotheken, die htop benötigt. In welchem Paket diese Bibliotheken stecken, prüfst du mit dem nächsten Befehl.

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

Mit zusätzlichem [--resolve] werden daraus die Namen der Pakete, die diese Bibliotheken bereitstellen. Davon fehlte hwloc-libs auf dem Testserver, daher wird es bei der Installation von htop mitinstalliert.

remove entfernt das angegebene Paket zusammen mit den Paketen, die davon abhängen, und in der Standardeinstellung auch Abhängigkeitspakete, die nicht mehr benötigt werden.

dnf remove htop

Auch wenn du nur htop entfernst, werden Abhängigkeitspakete, die kein anderes Paket braucht, mit entfernt, etwa das für htop installierte hwloc-libs.

Pakete, die früher als Abhängigkeiten installiert wurden, aber inzwischen von keinem Paket mehr gebraucht werden, entfernt autoremove. Die Liste der zu entfernenden Pakete prüfst du vorher mit list [--autoremove].

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

Auf dem Testserver standen 6 Pakete in der Liste, und autoremove entfernt diese 6 auf einmal.

Ob es für installierte Pakete neue Versionen gibt, prüfst du mit check-update. Mit einem Paketnamen wird nur dieses Paket geprüft.

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

Der obige Befehl mit libavif und libdav1d endete mit dem Exit-Code 100, weil es für beide neue Versionen gab. check-update endet mit 100, wenn Updates vorliegen, mit 0, wenn keine vorliegen, und mit 1 bei einem Fehler; du kannst das also in Skripten als Bedingung für Verzweigungen nutzen.

Gibst du list einen Paketnamen mit, erscheinen die installierte Version und die neue Version im Repository zusammen. Mit updateinfo list prüfst du, zu welchem Advisory das Update gehört.

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

Bei libavif erschien die installierte Version 0.11.1-5.el9 unter [Installed Packages] und die Version 1.1.1-3.el9 aus dem Repository getrennt davon unter [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

Diese neue Version war ein Update zum Advisory FEDORA-EPEL-2026-d611eab94a vom Typ bugfix. Sicherheitsupdates erscheinen an derselben Stelle mit Schweregrad und Sec., etwa [Moderate/Sec.].

Updates führst du mit upgrade aus. upgrade installiert neue Versionen nur, soweit die Abhängigkeiten passen, daher wird die von check-update angezeigte Version nicht unbedingt genau so installiert.

dnf upgrade libavif

Mit einem Paketnamen werden nur dieses Paket und die nötigen Abhängigkeitspakete auf neue Versionen gebracht.

dnf upgrade

Lässt du den Namen weg, sind alle installierten Pakete betroffen. Der Ablauf mit Transaktionsübersicht und Rückfrage ist derselbe wie bei install, und jede ausgeführte Transaktion bleibt mit einer Nummer in history erhalten.

4️⃣ Repository-Liste mit dem dnf-Befehl: repolist

Die Pakete, nach denen search und install suchen, liegen in Repositorys (repository). repolist gibt id und Namen der aktuell aktivierten Repositorys aus.

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

Man könnte leicht annehmen, dass ein Repository, das nicht in der Liste steht, auf dem Server nicht existiert, doch die Standardausgabe von repolist zeigt nur aktivierte Repositorys. Mit [--all] erscheinen auch deaktivierte Repositorys, zusammen mit einer Spalte status. Auf dem Testserver waren alle drei CRB-Repositorys von AlmaLinux 9 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

Paketanzahl, Mirror-Adresse, Ablaufzeit der Metadaten und Speicherort der Konfigurationsdatei eines einzelnen Repositorys prüfst du mit 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 zeigte 3.458 Pakete, und die Metadaten wurden laut Einstellung alle 86.400 Sekunden (einen Tag) neu geprüft. Die .repo-Datei in der Zeile [Repo-filename] ist die Konfigurationsdatei dieses Repositorys. Die Optionen [--set-enabled] und [--set-disabled], mit denen du Repositorys aktivierst und deaktivierst, werden zusammen mit dem Befehl config-manager aus dnf-plugins-core verwendet.

5️⃣ Verlauf und Rückgängigmachen mit dem dnf-Befehl: history

Nach vielen Installationen und Entfernungen ist schwer nachzuvollziehen, was du wann geändert hast, doch dnf nummeriert jede Transaktion (transaction) und zeichnet sie in history auf. Mit einem Paketnamen erscheinen nur die Transaktionen, die dieses Paket geändert haben.

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 der auf tmux eingegrenzten Ausgabe blieb nur eine Zeile übrig: Transaktion 51, die tmux installiert hat. Nummernbereiche schreibst du mit zwei Punkten, etwa [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

Die Zahl in der Spalte [Altered] ist die Anzahl der geänderten Pakete. Am Ende von Zeile 50 stand [EE]: Die Transaktion wurde abgeschlossen, hat aber Warnungen oder Fehler ausgegeben.

Befehlszeile, geänderte Pakete und Ergebniscode einer einzelnen Transaktion prüfst du mit 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

Beim Öffnen von Nummer 51 stand unter [Command Line] der ausgeführte Befehl install -y tmux unverändert da. Unter [Packages Altered] standen das installierte tmux und das Repository @baseos, unter [Return-Code] Success. Ohne Nummer wird die letzte Transaktion angezeigt.

Hast du etwas versehentlich installiert, gibst du history undo die Transaktionsnummer mit und führst so die Umkehrung dieser Transaktion aus. rollback setzt den Paketzustand auf den Stand direkt nach der angegebenen Transaktion zurück.

dnf history undo 51

Transaktion 51 war die Installation von tmux, daher wird undo 51 zu einer umgekehrten Transaktion, die tmux entfernt.

dnf history rollback 50

rollback 50 macht alle nach 50 ausgeführten Transaktionen bis zur letzten rückgängig, daher kann das Ergebnis von undo 51 abweichen, das nur tmux entfernt.

Laut offizieller Dokumentation enden undo und rollback, ohne etwas zu ändern, wenn sich ein Paket nicht zurücksetzen lässt. Fehlen direkt mit rpm vorgenommene Änderungen im Verlauf, brechen sie trotzdem nicht mit einem Fehler ab.

🔲 Simulator für den Befehl dnf

Im Simulator unten kannst du die Befehle search, info, provides, repolist und history selbst eingeben und die Ausgabe prüfen. Mit yum erhältst du dieselben Ergebnisse.

Simulator für den Befehl dnfdnf 4.14.0
[root@server work]#
Mit den Tasten ↑↓ holst du zuvor eingegebene Befehle zurück.

🔢 FAQ & empfohlene Inhalte

Das ist der Zeitpunkt, zu dem die lokale Kopie der Repository-Metadaten zuletzt geprüft wurde. Laut offizieller Dokumentation werden die Metadaten neu geladen, sobald die für jedes Repository festgelegte Zeit metadata_expire abgelaufen ist. Befehle wie search und provides, die nicht unbedingt aktuelle Informationen brauchen, nutzen die lokale Kopie auch nach Ablauf. Mit [--refresh] erzwingst du ein neues Laden, und [-C] nutzt nur den Cache.

Mit einem nicht vorhandenen Befehl wie foo erschien der Fehler [No such command] zusammen mit dem Hinweis, ein Plugin in der Form [dnf install dnf-command(Name)] zu installieren. Das liegt daran, dass einige Unterbefehle von Plugin-Paketen wie dnf-plugins-core hinzugefügt werden. Bei einem Tippfehler prüfst du die Befehlsliste mit [dnf --help].

rpm -q liest nur die Datenbank der auf dem Server installierten Pakete (RPMDB) und gibt die Version des Pakets aus; fehlt es, antwortet es mit [package htop is not installed]. dnf list –installed gibt dieselbe Datenbank ergänzt um Repository-Informationen aus, daher steht neben jedem installierten Paket das Repository, aus dem es stammt (@epel). Nutzt du dnf list ohne [--installed], werden auch neue Versionen aus den Repositorys ausgegeben.

🧭 Paketbefehle: Empfohlene Artikel 6 Beiträge · 2 Referenzen
🗂️ Paketbefehle
📄 YUM: Konzept und grundlegende Befehle 📄 dnf-Befehl 📄 yum-config-manager-Befehl 📄 RPM und YUM im Vergleich
📄 apt- und apt-get-Befehle 📄 snapd installieren

ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 5   +   8   =