DNF ist heute das Standard-Paketverwaltungssystem der meisten RPM-basierten Linux-Distributionen.

DNF lädt Pakete aus Repositories herunter, installiert, deinstalliert und aktualisiert Pakete. Es führt eine automatische Auflösung von Abhängigkeiten für Pakete durch, die Sie installieren, aktualisieren oder entfernen, und installiert alle Pakete, die zur Erfüllung der Abhängigkeitsanforderungen erforderlich sind.

Unter Fedora ist er seit Fedora 22 der Standard-Paketmanager. Unter RHEL 8.x ist er jetzt der Standard-Paketmanager.

DNF bietet eine sichere Paketverwaltung, indem es die Überprüfung von GPG-Signaturen für GPG-signierte Pakete aktiviert. DNF installiert keine Pakete, die nicht mit dem richtigen Schlüssel für das jeweilige Repository signiert sind.

Aus Gründen der Abwärtskompatibilität verfügt RHEL 8.x auch über einen YUM-Befehl, der allerdings mit DNF verknüpft ist.

Warum DNF?

DNF oder Dandified YUM ist die nächste Generation von YUM. Im Vergleich zu YUM bietet DNF eine bessere Speicherauslastung, eine verbesserte Verwaltung von Abhängigkeiten und die Möglichkeit, sowohl mit Python 2 als auch mit Python 3 zu arbeiten.

Paketverwaltung mit DNF

Sie müssen über Superuser-Rechte verfügen, um den DNF-Befehl zum Installieren, Aktualisieren oder Entfernen des Pakets zu verwenden. Im Folgenden finden Sie eine Reihe von DNF-Befehlen, die häufig von Systemadministratoren verwendet werden.

Suche nach einem Paket

Um in allen Repositories nach einem installierten oder verfügbaren Paket zu suchen, verwenden Sie

$ sudo dnf search <em>paket_name</em>

Um zum Beispiel nach dem Paket Nmap zu suchen:

$ sudo dnf search nmap
Letzte Überprüfung des Ablaufs der Metadaten: vor 0:05:14 am Tue 02 Jun 2020 08:38:09 PM UTC.
==================================== Exakt übereinstimmender Name: nmap =====================================
nmap.x86_64 : Netzwerkerkundungstool und Sicherheitsscanner
=================================== Name & Zusammenfassung Passend zu: nmap ====================================
nmap-ncat.x86_64 : Der Netcat-Ersatz von Nmap

Pakete auflisten

Um eine Liste aller installierten und verfügbaren Pakete anzuzeigen:

$ sudo dnf list all
Installierte Pakete
GConf2.x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms
NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda
NetworkManager-team.x86_64 1:1.22.8-4.el8 @anaconda
NetzwerkManager-tui.x86_64 1:1.22.8-4.el8 
...

Um alle installierten Pakete aufzulisten:

$ sudo dnf list installed

Installierte Pakete
NetworkManager.x86_64 1:1.22.8-4.el8 @anaconda         
NetworkManager-libnm.x86_64 1:1.22.8-4.el8 @anaconda         
NetworkManager-team.x86_64 1:1.22.8-4.el8 @anaconda         
NetworkManager-tui.x86_64 1:1.22.8-4.el8 @anaconda         
PackageKit.x86_64 1.1.12-4.el8 @AppStream          
PackageKit-glib.x86_64 1.1.12-4.el8 @AppStream          
WALinuxAgent.noarch 2.2.38-1.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms
abattis-cantarell-fonts.noarch 0.0.25-4.el8 @AppStream          
acl.x86_64 2.2.53-1.el8 @anaconda 
...                                                                     

Um alle verfügbaren Pakete aufzulisten:

$ sudo dnf list available
Letzte Überprüfung des Ablaufs der Metadaten: vor 1:15:10 am Tue 02 Jun 2020 05:37:11 PM UTC.
Verfügbare Pakete
CUnit.i686 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms
CUnit.x86_64 2.1.3-17.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms
CUnit-devel.i686 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms
CUnit-devel.x86_64 2.1.3-17.el8 rhui-codeready-builder-for-rhel-8-x86_64-rhui-rpms
...

Um zum Beispiel alle verfügbaren MySQL-Pakete aufzulisten:

$ sudo dnf list available "mysql*"
Letzte Überprüfung des Ablaufs der Metadaten: vor 1:17:04 am Tue 02 Jun 2020 05:37:11 PM UTC.
Verfügbare Pakete
mysql.x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-common.x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-devel.x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de rhui-rhel-8-für-x86_64-appstream-rhui-rpms
mysql-errmsg.x86_64 8.0.17-3.modul el8.0.0 3898 e09bb8de rhui-rhel-8-für-x86_64-appstream-rhui-rpms
mysql-libs.x86_64 8.0.17-3.modul el8.0.0 3898 e09bb8de rhui-rhel-8-für-x86_64-appstream-rhui-rpms
mysql-server.x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de rhui-rhel-8-für-x86_64-appstream-rhui-rpms
mysql-test.x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms

Anzeige der Paketinformationen

So zeigen Sie Informationen über ein Paket an:

$ sudo dnf info <em>paket_name
</em>

Zum Beispiel, um Informationen über den httpd-Server anzuzeigen:

$ sudo dnf info httpd
Letzte Überprüfung des Ablaufs der Metadaten: vor 0:15:04 am Mon 01 Jun 2020 11:23:11 PM UTC.
Verfügbare Pakete
Name : httpd
Version : 2.4.37
Veröffentlichung : 21.module el8.2.0 5008 cca404a3
Architektur : x86_64
Größe : 1.4 M
Quelle : httpd-2.4.37-21.module el8.2.0 5008 cca404a3.src.rpm
Repository : rhui-rhel-8-for-x86_64-appstream-rhui-rpms
Zusammenfassung : Apache HTTP Server
URL : https://httpd.apache.org/
Lizenz : ASL 2.0
Beschreibung : Der Apache HTTP Server ist ein leistungsstarker, effizienter und erweiterbarer
             : Webserver.

Installieren von Paketen

Installation eines einzelnen Pakets

So installieren Sie ein einzelnes Paket und alle seine nicht installierten Abhängigkeiten:

$ sudo dnf install paket_name

Zum Beispiel, um Nginx zu installieren:

$ sudo dnf install nginx
Aufgelöste Abhängigkeiten.
===========================================================================================
 Paket Arch Version Repository Größe
===========================================================================================
Installieren:
 nginx x86_64 1:1.14.1-9.module el8.0.0 4108 af250afe
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k
Installieren der Abhängigkeiten:
 gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k
 jbigkit-libs x86_64 2.1-14.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 55 k
..

Dies installiert Nginx und alle seine nicht installierten Abhängigkeiten.

Installieren mehrerer Pakete

Sie können auch mehrere Pakete installieren, indem Sie Paketnamen an diesen Befehl anhängen. Um zum Beispiel Nginx, PHP & MySQL-server zu installieren, geben Sie ein:

$ sudo dnf install nginx php mysql-server
Aufgelöste Abhängigkeiten.
===========================================================================================
 Paket Arch Version Repository Größe
===========================================================================================
Installieren:
 mysql-server x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms 22 M
 nginx x86_64 1:1.14.1-9.module el8.0.0 4108 af250afe
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms 570 k
 php x86_64 7.2.24-1.modul el8.2.0 4601 7c76a223
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.5 M
Installieren der Abhängigkeiten:
 apr x86_64 1.6.3-9.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 125 k
 apr-util x86_64 1.6.1-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 105 k
 gd x86_64 2.2.5-6.el8 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 144 k
 httpd x86_64 2.4.37-21.modul el8.2.0 5008 cca404a3
                                          rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.4 M
 httpd-filesystem noarch 2.4.37-21.module el8.2.0 5008 cca404a3
...

Installieren eines Pakets anhand seines Binärdateinamens

Wenn Sie den Namen der zu installierenden Binärdatei kennen, aber nicht den Namen des Pakets, reicht auch das aus, um das entsprechende Paket zu installieren.

Wenn Sie zum Beispiel eingeben:

$ sudo dnf install /usr/sbin/named
Letzte Überprüfung des Ablaufs der Metadaten: vor 1:21:25 am Tue 02 Jun 2020 05:37:11 PM UTC.
Abhängigkeiten aufgelöst.
=====================================================================================================
 Paket Arch Version Repository Größe
=====================================================================================================
Installieren:
 bind x86_64 32:9.11.13-5.el8_2 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 2.1 M

Zusammenfassung der Transaktion
=====================================================================================================
1 Paket installieren

Gesamtgröße des Downloads: 2.1 M
Installierte Größe: 4.5 M
Ist dies in Ordnung [j/n]:

DNF sucht und findet das Paket, das /usr/sbin/namedbereitstellt und fordert Sie auf, es zu installieren.

Herausfinden, welches Paket eine Datei besitzt

Wenn Sie den Dateinamen kennen und herausfinden möchten, welches Paket die Datei bereitstellt (installiert oder nicht), verwenden Sie:

$ sudo dnf provides <em>Dateiname</em>

Um zum Beispiel herauszufinden, welches Paket named, die Binärdatei für den DNS-Server, bereitstellt, verwenden Sie

$ sudo dnf provides named
Letzte Überprüfung des Ablaufs der Metadaten: vor 1:27:30 am Mon 01 Jun 2020 11:23:11 PM UTC. 
bind-32:9.11.4-16.P2.el8.x86_64 : 
Das Berkeley Internet Name Domain (BIND) DNS (Domain Name System) : 
server Repo : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Abgeglichen von: Dateiname : 
/usr/sbin/named

Ein Paket entfernen

Um ein Paket zu entfernen:

sudo dnf remove <em>paket_name</em>

Aber Vorsicht, DNF ist nicht in der Lage, ein Paket zu entfernen, ohne auch Pakete zu entfernen, die von ihm abhängen. Um das Paket nmap zu entfernen, verwenden Sie:

$ sudo dnf remove nmap
Aufgelöste Abhängigkeiten.
=====================================================================================================
 Paket Architektur Version Repository Größe
=====================================================================================================
Entfernt:
 nmap x86_64 2:7.70-5.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 24 M

Zusammenfassung der Transaktion
=====================================================================================================
Entfernen Sie 1 Paket

Freigegebener Platz: 24 M
Ist dies in Ordnung [j/n]:

Paketgruppen verwalten

Eine Paketgruppe ist eine Sammlung von Paketen, die eng miteinander verbunden sind und einem gemeinsamen Zweck dienen. Durch die Installation einer Paketgruppe wird eine Reihe von Paketen installiert, was viel Zeit spart.

Alle Paketgruppen auflisten

Um alle Paketgruppen aufzulisten:

$ sudo dnf group list
Verfügbare Umgebungsgruppen:
   Server mit GUI
   Server
   Arbeitsstation
   Benutzerdefiniertes Betriebssystem
   Virtualisierungs-Host
Installierte Umgebungsgruppen:
   Minimale Installation
Installierte Gruppen:
   Sicherheits-Tools
   Container-Verwaltung
Verfügbare Gruppen:
   Legacy UNIX-Kompatibilität
   Entwicklungs-Tools
   Wissenschaftliche Unterstützung
   .NET Core Entwicklung
   Grafische Verwaltungstools
   Kopflose Verwaltung
   RPM-Entwicklungstools
   Netzwerk Server
   System-Tools
   Smart Card-Unterstützung

Alle Pakete einer Gruppe auflisten

Um alle Pakete in einer Gruppe aufzulisten:

$ sudo dnf group info <em>paket_name</em>

Um zum Beispiel die Pakete in der Gruppe “Security Tools” anzuzeigen:

$ sudo dnf group info "sicherheitswerkzeuge"

Gruppe: Sicherheits-Tools
 Beschreibung: Sicherheitstools für die Integritäts- und Vertrauensprüfung.
 Standard-Pakete:
   scap-security-guide
 Optionale Pakete:
   aide
   hmaccalc
   openscap
   openscap-engine-sce
   openscap-utils
   scap-security-guide-doc
   scap-workbench
   tpm-quote-tools
   tpm-Werkzeuge
   tpm2-Werkzeuge
   hosen

Installieren einer Paketgruppe

Bei der Installation einer Gruppe werden alle Pakete der Gruppe installiert. Um eine Paketgruppe zu installieren, verwenden Sie:

sudo dnf group install <em>package_group_name</em>

Um zum Beispiel die Gruppe “Netzwerkserver” zu installieren:

$ sudo dnf group install "Netzwerkserver"
Letzte Überprüfung des Ablaufs der Metadaten: vor 1:40:14 am Wed 03 Jun 2020 05:53:11 PM UTC.
Abhängigkeiten aufgelöst.
===========================================================================================
 Paket Architektur Version Repository Größe
===========================================================================================
Installieren von Gruppen:
 Netzwerk-Server               

Transaktionsübersicht
===========================================================================================

Ist dies in Ordnung [j/n]:

Entfernen einer Paketgruppe

Um eine Paketgruppe zu entfernen:

sudo dnf remove <em>paket_name</em>

Um also die Paketgruppe “Security Tools” zu entfernen:

$ sudo dnf group remove "Sicherheits-Tools"
Aufgelöste Abhängigkeiten.
=====================================================================================================
 Paket Arch Version Repository Größe
=====================================================================================================
Entfernt:
 scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M
Entfernen von unbenutzten Abhängigkeiten:
 GConf2 x86_64 3.2.6-22.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 6.3 M
 libxslt x86_64 1.1.32-4.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 734 k
 openscap x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 58 M
 openscap-scanner x86_64 1.3.2-6.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 137 k
 xml-common noarch 0.6.3-50.el8 @rhui-rhel-8-for-x86_64-baseos-rhui-rpms 78 k
Entfernen von Gruppen:
 Sicherheits-Tools                 

Zusammenfassung der Transaktion
=====================================================================================================
6 Pakete entfernen

Freigegebener Platz: 247 M
Ist dies in Ordnung [j/n]: 

Pakete aktualisieren

Alle Pakete aktualisieren

Um alle Pakete und ihre Abhängigkeiten zu aktualisieren, können Sie verwenden:

$ sudo dnf upgrade
Letzte Überprüfung des Ablaufs der Metadaten: vor 1:09:31 am Tue 02 Jun 2020 08:38:09 PM UTC.
Abhängigkeiten aufgelöst.
Nichts mehr zu tun.
Vollständig!

Damit werden alle Updates installiert, die installiert werden können. Sowohl dnf upgrade als auch dnf update haben die gleiche Wirkung, aber dnf upgrade ist vorzuziehen.

Ein einzelnes Paket aktualisieren

Um ein einzelnes Paket zu aktualisieren, führen Sie aus:

$ sudo dnf upgrade paket_name

Um zum Beispiel das Paket python zu aktualisieren:

$ sudo dnf upgrade python

Fazit

Das Erlernen von DNF kann sich lohnen, denn es ist oft der schnellste Weg, um Aufgaben der Systemadministration zu erledigen. Wenn Sie daran interessiert sind, RHEL 8 zu lernen, sollten Sie sich diesen Udemy-Kurs ansehen.