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 Abhängigkeitsauflösung 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 nun der Standard-Paketmanager.
DNF bietet eine sichere Paketverwaltung durch die Aktivierung der GPG-Signaturprüfung für GPG-signierte Pakete. DNF installiert keine Pakete, die nicht mit dem richtigen Schlüssel für dieses Repository signiert sind.
Aus Gründen der Abwärtskompatibilität verfügt RHEL 8.x ebenfalls über einen YUM-Befehl, der allerdings ein Link zu DNF ist.
Warum DNF?
DNF oder Dandified YUM ist die nächste Generation von YUM. Im Vergleich zu YUM hat DNF eine bessere Speichernutzung, ein verbessertes Abhängigkeitsmanagement und die Fähigkeit, 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 zur Installation, Aktualisierung oder Entfernung des Pakets zu verwenden. Im Folgenden finden Sie eine Reihe von DNF-Befehlen, die häufig von Systemadministratoren verwendet werden.
Suche nach einem Paket
So suchen Sie in allen Repositories nach einem installierten oder verfügbaren Paket, verwenden.
$ sudo dnf search <em>package_name</em>
Zum Beispiel für die Suche nach dem Paket Nmap:
$ sudo dnf search nmap
Last metadata expiration check: 0:05:14 ago on Tue 02 Jun 2020 08:38:09 PM UTC.
==================================== Name Exactly Matched: nmap =====================================
nmap.x86_64 : Network exploration tool and security scanner
=================================== Name & Summary Matched: nmap ====================================
nmap-ncat.x86_64 : Nmap's Netcat replacement
Auflistung von Paketen
Um eine Liste aller installierten und verfügbaren Pakete zu sehen:
$ sudo dnf list all
Installed Packages
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
NetworkManager-tui.x86_64 1:1.22.8-4.el8
...
Um alle installierten Pakete aufzulisten:
$ sudo dnf list installed
Installed Packages
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
...
Zur Auflistung aller verfügbaren Pakete:
$ sudo dnf list available
Last metadata expiration check: 1:15:10 ago on Tue 02 Jun 2020 05:37:11 PM UTC.
Available Packages
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
...
Zum Beispiel, um alle MySQL-Pakete aufzulisten, die verfügbar sind:
$ sudo dnf list available "mysql*"
Last metadata expiration check: 1:17:04 ago on Tue 02 Jun 2020 05:37:11 PM UTC.
Available Packages
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-for-x86_64-appstream-rhui-rpms
mysql-errmsg.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-libs.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-x86_64-appstream-rhui-rpms
mysql-server.x86_64 8.0.17-3.module+el8.0.0+3898+e09bb8de rhui-rhel-8-for-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
Um Informationen über ein Paket anzuzeigen:
$ sudo dnf info <em>package_name
</em>
Zum Beispiel, um Informationen über den httpd-Server anzuzeigen:
$ sudo dnf info httpd
Last metadata expiration check: 0:15:04 ago on Mon 01 Jun 2020 11:23:11 PM UTC.
Available Packages
Name : httpd
Version : 2.4.37
Release : 21.module+el8.2.0+5008+cca404a3
Architecture : x86_64
Size : 1.4 M
Source : httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.src.rpm
Repository : rhui-rhel-8-for-x86_64-appstream-rhui-rpms
Summary : Apache HTTP Server
URL : https://httpd.apache.org/
License : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
Installieren von Paketen
Installation eines einzelnen Pakets
Um ein einzelnes Paket und alle nicht installierten Abhängigkeiten zu installieren:
$ sudo dnf install package_name
Zum Beispiel, zu Nginx installieren:
$ sudo dnf install nginx
Dependencies resolved.
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Installing:
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
Installing dependencies:
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 und MySQL-Server zu installieren, geben Sie ein:
$ sudo dnf install nginx php mysql-server
Dependencies resolved.
===========================================================================================
Package Arch Version Repository Size
===========================================================================================
Installing:
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.module+el8.2.0+4601+7c76a223
rhui-rhel-8-for-x86_64-appstream-rhui-rpms 1.5 M
Installing dependencies:
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.module+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.
Zum Beispiel, wenn Sie eingeben:
$ sudo dnf install /usr/sbin/named
Last metadata expiration check: 1:21:25 ago on Tue 02 Jun 2020 05:37:11 PM UTC.
Dependencies resolved.
=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Installing:
bind x86_64 32:9.11.13-5.el8_2 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 2.1 M
Transaction Summary
=====================================================================================================
Install 1 Package
Total download size: 2.1 M
Installed size: 4.5 M
Is this ok [y/N]:
DNF sucht und findet das Paket, das Folgendes bietet /usr/sbin/
benannt und fordert Sie auf, es zu installieren.
Herausfinden, welches Paket eine Datei besitzt
Wenn Sie den Dateinamen kennen und herausfinden wollen, welches Paket ihn bereitstellt (installiert oder nicht), verwenden Sie:
$ sudo dnf provides <em>file_name</em>
Zum Beispiel, um herauszufinden, welches Paket named, die Binärdatei für DNS-Server verwendet:
$ sudo dnf provides named
Last metadata expiration check: 1:27:30 ago on Mon 01 Jun 2020 11:23:11 PM UTC.
bind-32:9.11.4-16.P2.el8.x86_64 :
The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) :
server Repo : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Matched from: Filename :
/usr/sbin/named
Entfernen eines Pakets
Um ein Paket zu entfernen:
sudo dnf remove <em>package_name</em>
Aber Vorsicht, DNF ist nicht in der Lage, ein Paket zu entfernen, ohne auch die Pakete zu entfernen, die von ihm abhängen. Um das Paket nmap zu entfernen, verwenden Sie:
$ sudo dnf remove nmap
Dependencies resolved.
=====================================================================================================
Package Architecture Version Repository Size
=====================================================================================================
Removing:
nmap x86_64 2:7.70-5.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 24 M
Transaction Summary
=====================================================================================================
Remove 1 Package
Freed space: 24 M
Is this ok [y/N]:
Verwaltung von Paketgruppen
Eine Paketgruppe ist eine Sammlung von Paketen, die eng miteinander verbunden sind und einen gemeinsamen Zweck erfüllen. 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
Available Environment Groups:
Server with GUI
Server
Workstation
Custom Operating System
Virtualization Host
Installed Environment Groups:
Minimal Install
Installed Groups:
Security Tools
Container Management
Available Groups:
Legacy UNIX Compatibility
Development Tools
Scientific Support
.NET Core Development
Graphical Administration Tools
Headless Management
RPM Development Tools
Network Servers
System Tools
Smart Card Support
Alle Pakete einer Gruppe auflisten
Um alle Pakete einer Gruppe aufzulisten:
$ sudo dnf group info <em>package_name</em>
Zum Beispiel, um Pakete in der Gruppe der Sicherheitstools anzuzeigen:
$ sudo dnf group info “security tools”
Group: Security Tools
Description: Security tools for integrity and trust verification.
Default Packages:
scap-security-guide
Optional Packages:
aide
hmaccalc
openscap
openscap-engine-sce
openscap-utils
scap-security-guide-doc
scap-workbench
tpm-quote-tools
tpm-tools
tpm2-tools
trousers
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>
Zum Beispiel, um die Gruppe "Netzwerkserver" zu installieren:
$ sudo dnf group install “Network Servers”
Last metadata expiration check: 1:40:14 ago on Wed 03 Jun 2020 05:53:11 PM UTC.
Dependencies resolved.
===========================================================================================
Package Architecture Version Repository Size
===========================================================================================
Installing Groups:
Network Servers
Transaction Summary
===========================================================================================
Is this ok [y/N]:
Entfernen einer Paketgruppe
Um eine Paketgruppe zu entfernen:
sudo dnf remove <em>package_name</em>
So entfernen Sie die Paketgruppe "Security Tools":
$ sudo dnf group remove "security tools"
Dependencies resolved.
=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Removing:
scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M
Removing unused dependencies:
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
Removing Groups:
Security Tools
Transaction Summary
=====================================================================================================
Remove 6 Packages
Freed space: 247 M
Is this ok [y/N]:
Pakete aktualisieren
Alle Pakete aktualisieren
Um alle Pakete und ihre Abhängigkeiten zu aktualisieren, können Sie verwenden:
$ sudo dnf upgrade
Last metadata expiration check: 1:09:31 ago on Tue 02 Jun 2020 08:38:09 PM UTC.
Dependencies resolved.
Nothing to do.
Complete!
Damit werden alle Updates installiert, die installiert werden können. Beide dnf upgrade und 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 package_name
Zum Beispiel, um das Python-Paket zu aktualisieren:
$ sudo dnf upgrade python
Schlussfolgerung
DNF lernen kann sein lohnend da dies oft der schnellste Weg ist, um Systemverwaltungsaufgaben durchzuführen. Wenn Sie daran interessiert sind, RHEL 8 zu erlernen, können Sie dies hier nachlesen Udemy-Kurs.