DNF es ahora el sistema de gestión de paquetes por defecto en la mayoría de las distribuciones Linux basadas en RPM.

DNF descarga paquetes de los repositorios instala, desinstala y actualiza paquetes. Realiza la resolución automática de dependencias de los paquetes que está instalando, actualizando o eliminando e instala todos los paquetes necesarios para cumplir los requisitos de dependencia.

En Fedora, ha sido el gestor de paquetes predeterminado desde Fedora 22. En RHEL 8.x, es ahora el gestor de paquetes por defecto.

DNF proporciona una gestión de paquetes segura al habilitar la verificación de firmas GPG en paquetes firmados GPG. DNF no instalará ningún paquete que no esté firmado con la clave correcta para ese repositorio.

Por compatibilidad con versiones anteriores, RHEL 8.x dispone también de un comando YUM, aunque es un enlace a DNF.

¿Por qué DNF?

DNF o Dandified YUM es la nueva generación de YUM. Comparado con YUM, DNF tiene una mejor utilización de la memoria, una mejor gestión de las dependencias y la capacidad de ejecutarse tanto con Python 2 como con Python 3.

Gestión de paquetes con DNF

Debe tener privilegios de superusuario para utilizar el comando DNF para instalar, actualizar o eliminar el paquete. A continuación se muestra un conjunto de comandos DNF utilizados con frecuencia por los administradores de sistemas.

Buscar un paquete

Para buscar un paquete instalado o disponible en todos los repositorios, utilice

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

Por ejemplo, para buscar el paquete Nmap:

$ sudo dnf search nmap
Última comprobación de caducidad de metadatos: hace 0:05:14 el mar 02 jun 2020 08:38:09 PM UTC.
==================================== Nombre coincidente exacto: nmap =====================================
nmap.x86_64 : Herramienta de exploración de redes y escáner de seguridad
=================================== Nombre y resumen coincidentes: nmap ====================================
nmap-ncat.x86_64 : El sustituto de Netcat de Nmap

Listado de paquetes

Para ver una lista de todos los paquetes instalados y disponibles:

$ sudo dnf list all
Paquetes instalados
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 
...

Para listar todos los paquetes instalados:

$ sudo dnf list installed

Paquetes instalados
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 @anaconda         
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 
...                                                                     

Para listar todos los paquetes disponibles:

$ sudo dnf list available
Última comprobación de caducidad de metadatos: hace 1:15:10 el mar 02 jun 2020 05:37:11 PM UTC.
Paquetes disponibles
CUnit.i686 2.1.3-17.el8 rhui-rhel-8-para-x86_64-appstream-rhui-rpms
CUnit.x86_64 2.1.3-17.el8 rhui-rhel-8-para-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
...

Por ejemplo, para listar todos los paquetes de MySQL que están disponibles:

$ sudo dnf list available "mysql*"
Última comprobación de caducidad de metadatos: hace 1:17:04 el mar 02 jun 2020 05:37:11 PM UTC.
Paquetes disponibles
mysql.x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de rhui-rhel-8-para-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-para-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

Visualización de la información del paquete

Para mostrar información sobre un paquete:

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

Por ejemplo, para mostrar información sobre el servidor httpd:

$ sudo dnf info httpd
Última comprobación de caducidad de metadatos: hace 0:15:04 el lun 01 jun 2020 11:23:11 PM UTC.
Paquetes disponibles
Nombre : httpd
Versión : 2.4.37
Versión : 21.module el8.2.0 5008 cca404a3
Arquitectura : x86_64
Tamaño : 1.4 M
Fuente : httpd-2.4.37-21.module el8.2.0 5008 cca404a3.src.rpm
Repositorio : rhui-rhel-8-for-x86_64-appstream-rhui-rpms
Resumen : Servidor HTTP Apache
URL : https://httpd.apache.org/
Licencia : ASL 2.0
Descripción : El servidor HTTP Apache es un potente, eficiente y extensible
             : servidor web.

Instalación de paquetes

Instalación de un solo paquete

Para instalar un único paquete y todas sus dependencias no instaladas:

$ sudo dnf install nombre_paquete

Por ejemplo, para instalar Nginx

$ sudo dnf install nginx
Dependencias resueltas.
===========================================================================================
 Paquete Arch Versión Tamaño del repositorio
===========================================================================================
Instalando:
 nginx x86_64 1:1.14.1-9.module el8.0.0 4108 af250afe
                                          rhui-rhel-8-para-x86_64-appstream-rhui-rpms 570 k
Instalación de dependencias:
 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
..

Esto instalará Nginx y todos sus requisitos de dependencia no instalados.

Instalación de varios paquetes

También puede instalar múltiples paquetes añadiendo nombres de paquetes a este comando. Por ejemplo, para instalar Nginx, PHP y MySQL-server, introduzca:

$ sudo dnf install nginx php mysql-server
Dependencias resueltas.
===========================================================================================
 Paquete Arch Versión Tamaño del repositorio
===========================================================================================
Instalando:
 mysql-server x86_64 8.0.17-3.module el8.0.0 3898 e09bb8de
                                          rhui-rhel-8-para-x86_64-appstream-rhui-rpms 22 M
 nginx x86_64 1:1.14.1-9.module el8.0.0 4108 af250afe
                                          rhui-rhel-8-para-x86_64-appstream-rhui-rpms 570 k
 php x86_64 7.2.24-1.module el8.2.0 4601 7c76a223
                                          rhui-rhel-8-para-x86_64-appstream-rhui-rpms 1.5 M
Instalación de dependencias:
 apr x86_64 1.6.3-9.el8 rhui-rhel-8-para-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-para-x86_64-appstream-rhui-rpms 1.4 M
 httpd-filesystem noarch 2.4.37-21.module el8.2.0 5008 cca404a3
...

Instalar un paquete por su nombre de archivo binario

Si conoce el nombre del archivo binario a instalar, pero no el nombre del paquete, incluso eso es suficiente para instalar el paquete correspondiente.

Por ejemplo, si introduce

$ sudo dnf install /usr/sbin/named
Última comprobación de caducidad de metadatos: hace 1:21:25 el mar 02 jun 2020 05:37:11 PM UTC.
Dependencias resueltas.
=====================================================================================================
 Paquete Arch Versión Tamaño del repositorio
=====================================================================================================
Instalando:
 bind x86_64 32:9.11.13-5.el8_2 rhui-rhel-8-for-x86_64-appstream-rhui-rpms 2.1 M

Resumen de la transacción
=====================================================================================================
Instalar 1 paquete

Tamaño total de la descarga: 2,1 M
Tamaño instalado: 4,5 M
¿Está bien [sí/no]:

DNF busca y encuentra el paquete que proporciona /usr/sbin/namedy le pide que lo instale.

Encontrar qué paquete posee un archivo

Si conoce el nombre del archivo y desea encontrar qué paquete lo proporciona (instalado o no), utilice:

$ sudo dnf proporciona <em>nombre_archivo</em>

Por ejemplo, para encontrar qué paquete proporciona named, el binario para el servidor DNS utilice:

$ sudo dnf provides named
Última comprobación de caducidad de metadatos: hace 1:27:30 el lun 01 jun 2020 11:23:11 PM UTC. 
bind-32:9.11.4-16.P2.el8.x86_64 : 
El sistema de nombres de dominio (DNS) Berkeley Internet Name Domain (BIND) : 
server Repo : rhui-rhel-8-for-x86_64-appstream-rhui-rpms Matched from: Filename : 
/usr/sbin/named

Eliminar un paquete

Para eliminar un paquete

sudo dnf remove <em>nombre_paquete</em>

Pero tenga cuidado, DNF no es capaz de eliminar un paquete sin eliminar también los paquetes que dependen de él. Para eliminar el paquete nmap utilice

$ sudo dnf remove nmap
Dependencias resueltas.
=====================================================================================================
 Paquete Arquitectura Versión Tamaño del repositorio
=====================================================================================================
Eliminando:
 nmap x86_64 2:7.70-5.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 24 M

Resumen de la transacción
=====================================================================================================
Eliminar 1 paquete

Espacio liberado: 24 M
¿Está bien [sí/no]:

Gestión de grupos de paquetes

Un grupo de paquetes es una colección de paquetes que están estrechamente relacionados y sirven a un propósito común. La instalación de un grupo de paquetes instala un conjunto de paquetes, lo que ahorra mucho tiempo.

Listar todos los grupos de paquetes

Para listar todos los grupos de paquetes

$ sudo dnf group list
Grupos de entorno disponibles:
   Servidor con GUI
   Servidor
   Estación de trabajo
   Sistema operativo personalizado
   Host de virtualización
Grupos de entornos instalados
   Instalación mínima
Grupos instalados:
   Herramientas de seguridad
   Gestión de contenedores
Grupos disponibles:
   Compatibilidad con UNIX heredado
   Herramientas de desarrollo
   Soporte científico
   desarrollo .NET Core
   Herramientas de administración gráfica
   Administración Headless
   Herramientas de desarrollo RPM
   Servidores de red
   Herramientas de sistema
   Soporte para tarjetas inteligentes

Listar todos los paquetes de un grupo

Para listar todos los paquetes de un grupo:

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

Por ejemplo, para ver los paquetes del grupo Herramientas de seguridad:

$ sudo dnf group info "herramientas de seguridad"

Grupo: Herramientas de seguridad
 Descripción: Herramientas de seguridad para la verificación de la integridad y la confianza.
 Paquetes por defecto:
   scap-security-guide
 Paquetes opcionales:
   aide
   hmaccalc
   openscap
   openscap-motor-sce
   openscap-utils
   scap-security-guide-doc
   scap-workbench
   tpm-quote-tools
   tpm-tools
   tpm2-herramientas
   pantalones

Instalación de un grupo de paquetes

Al instalar un grupo se instalarán todos los paquetes del grupo. Para instalar un grupo de paquetes utilice:

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

Por ejemplo, para instalar el grupo «Servidores de red»:

$ sudo dnf group install "Servidores de red"
Última comprobación de caducidad de metadatos: hace 1:40:14 el mié 03 jun 2020 05:53:11 PM UTC.
Dependencias resueltas.
===========================================================================================
 Paquete Arquitectura Versión Tamaño del repositorio
===========================================================================================
Instalando Grupos:
 Servidores de red   

Resumen de transacciones
===========================================================================================

¿Está bien [sí/no]:

Eliminación de un grupo de paquetes

Para eliminar un grupo de paquetes:

sudo dnf remove <em>nombre_paquete</em>

Así, para eliminar el grupo de paquetes «Herramientas de seguridad

$ sudo dnf group remove "herramientas de seguridad"
Dependencias resueltas.
=====================================================================================================
 Paquete Arch Versión Tamaño del repositorio
=====================================================================================================
Eliminando:
 scap-security-guide noarch 0.1.48-7.el8 @rhui-rhel-8-for-x86_64-appstream-rhui-rpms 182 M
Eliminación de dependencias no utilizadas:
 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
Eliminación de grupos:
 Herramientas de seguridad         

Resumen de transacciones
=====================================================================================================
Eliminar 6 paquetes

Espacio liberado: 247 M
¿Está bien [sí/no]: 

Actualizando paquetes

Actualizando todos los paquetes

Para actualizar todos los paquetes y sus dependencias puede utilizar:

$ sudo dnf upgrade
Última comprobación de caducidad de metadatos: hace 1:09:31 el mar 02 jun 2020 08:38:09 PM UTC.
Dependencias resueltas.
Nada que hacer.
Completado

Esto instala todas las actualizaciones que se pueden instalar. Tanto dnf upgrade como dnf update tienen el mismo efecto, pero se prefiere dnf upgrade.

Actualización de un solo paquete

Para actualizar un solo paquete, ejecute

$ sudo dnf actualizar nombre_paquete

Por ejemplo, para actualizar el paquete python

$ sudo dnf upgrade python

Conclusión

Aprender DNF puede ser gratificante ya que a menudo es la forma más rápida de realizar tareas de administración del sistema. Si está interesado en aprender RHEL 8, puede consultar este curso Udemy.