Comando dnf: instalar, actualizar y eliminar paquetes, y sus diferencias con yum

Entorno de pruebaFamilia RHELAlmaLinux 9.8Cuenta rootVerificado el 2026-10-28

El comando dnf es el comando de gestión de paquetes de las distribuciones Linux basadas en RHEL para buscar, instalar, actualizar y eliminar paquetes. En AlmaLinux 9, aunque escribas yum se ejecuta el mismo programa. En un servidor con AlmaLinux 9 ejecuté realmente search, info, provides y history, y comprobé en la salida dónde mira cada uno de search, info y provides al buscar paquetes y qué registro de operaciones guarda history.

No ejecuté comandos que modifican el sistema, como instalar, eliminar o actualizar. Ese comportamiento lo comprobé con la documentación oficial de DNF y con el historial de operaciones que ya había en el servidor.

1️⃣ Relación entre el comando dnf y yum

Es fácil suponer que al escribir yum se ejecuta el antiguo yum, pero en AlmaLinux 9 tanto yum como dnf son enlaces al mismo ejecutable, 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

La única diferencia entre yum y dnf es el nombre que escribes; uses el que uses, los subcomandos y las opciones son los mismos. La salida de search htop ejecutado con yum y con dnf también fue idéntica.

Según la documentación oficial de DNF [Changes in DNF CLI compared to YUM], update y upgrade hacen lo mismo, y la documentación recomienda upgrade.

En distribuciones antiguas sin dnf, usa el comando yum tal cual. Los nombres de los subcomandos de este artículo, como install, search y history, son los mismos en yum.

2️⃣ Consultar paquetes con el comando dnf: search, info, provides

Cuando no sepas el nombre exacto del paquete del programa que quieres instalar, busca con search seguido de una sola palabra. search busca la palabra en el nombre y el resumen (Summary) de los paquetes, y coloca arriba del todo el paquete cuyo nombre coincide exactamente.

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

htop solo tiene un paquete con ese nombre exacto, así que el resultado fue una sola línea bajo [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

Una palabra que aparece en varios paquetes, como wget, salió dividida en tres grupos: coincidencia exacta de nombre, presente en el nombre y en el resumen, y presente solo en el nombre.

search no mira el texto de la descripción (Description), así que no sirve para buscar palabras que solo aparecen en la descripción. En ese caso, si añades la opción [--all], la búsqueda se amplía a la descripción y la URL.

Cuando ya sepas el nombre del paquete, usa info para ver su versión, su tamaño y de qué repositorio procede.

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

htop, que aún no está instalado, aparece en info htop bajo [Available Packages] con la versión 3.3.0 y el repositorio epel. htop solo está en el repositorio epel, así que si vuelves a ejecutar search sin epel no aparece nada.

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.

wget, que ya está instalado, apareció bajo [Installed Packages]. Repository era @System, y el repositorio del que se descargó al instalarlo figuraba como appstream en la línea [From repo].

Al revés, cuando solo conoces el nombre de un archivo y no sabes en qué paquete está, añade la ruta del archivo a 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

Al buscar /usr/bin/tree, el resultado fueron dos grupos: el paquete tree instalado (@System) y el del repositorio (baseos). El Filename bajo [Matched from] es la ruta que coincidió realmente. Si escribes solo el nombre del archivo sin ruta, dnf vuelve a buscar anteponiendo /usr/bin/ y /usr/sbin/, y si aun así no lo encuentra, termina con el error de abajo.

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.

El mensaje de error te indica que escribas la ruta completa o que antepongas el comodín [*/]. En el diagrama de abajo puedes comparar paso a paso qué recibe cada uno de los tres comandos y dónde busca.

🧭 Dónde miran los tres comandos que buscan paquetes
Diagrama explicativo
🔍 Comando
$ dnf search htopinfo htopprovides /usr/bin/tree
① Lo que introduceshtopUna sola palabrahtopNombre del paquete/usr/bin/treeRuta del archivo
➜
② Dónde buscaNombre y resumen (Summary) del paqueteBusca en todos los repositorios cada paquete que contenga la palabra.Metadatos de un solo paqueteMuestra por separado lo instalado y lo que se puede instalar.Lista de archivos que proporcionan los paquetesEncuentra a la inversa el paquete que contiene el archivo de esa ruta.
➜
③ SalidaLista de paquetes que coincidenhtop.x86_64 : Interactive process viewerVersión, tamaño, repositorio, descripciónVersion 3.3.0, Size 198 k, Repository epelPaquete que contiene el archivotree-1.8.0-10.el9.x86_64, @System, baseos
search busca la palabra en el nombre y el resumen de los paquetes y muestra la lista empezando por las coincidencias exactas de nombre.
info muestra la versión, el tamaño y el repositorio de origen de un solo paquete. En un paquete instalado, el campo Repository muestra @System.
provides encuentra el paquete a la inversa a partir de la ruta de un archivo. El lado instalado (@System) y el del repositorio (baseos) aparecen por separado.

3️⃣ Instalar, eliminar y actualizar paquetes: install, remove, upgrade

El paquete que encuentres se instala con install. dnf instala de una vez no solo el paquete indicado, sino también los paquetes de dependencia que necesita.

dnf install htop

Según la documentación oficial, dnf muestra la lista de paquetes que va a instalar (el resumen de la transacción) y luego pregunta si quieres continuar; con [-y], sigue sin preguntar.

Puedes ver de antemano qué paquetes de dependencia hacen falta en la instalación con 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)

Con solo [--requires] aparecen únicamente los nombres de las bibliotecas que requiere htop. Para ver en qué paquetes están esas bibliotecas, usa el siguiente comando.

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

Si añades [--resolve], se convierten en los nombres de los paquetes que proporcionan esas bibliotecas. De ellos, hwloc-libs no estaba en el servidor de prueba, así que se instala junto con htop.

remove elimina el paquete indicado junto con los paquetes que dependen de él y, con la configuración predeterminada, también elimina los paquetes de dependencia que ya no hacen falta.

dnf remove htop

Aunque elimines solo htop, se eliminan con él los paquetes de dependencia que ningún otro paquete necesita, como hwloc-libs, que se instaló por htop.

Lo que se instaló en su día como paquete de dependencia pero ya no necesita ningún paquete lo elimina autoremove. Revisa antes la lista de lo que se eliminará con 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

En el servidor de prueba aparecieron 6 paquetes en la lista, y autoremove elimina estos 6 de una vez.

Para saber si hay versiones nuevas de los paquetes instalados, usa check-update. Si añades el nombre de un paquete, solo comprueba ese paquete.

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

El comando de arriba con libavif y libdav1d terminó con el código de salida 100 porque ambos tenían versión nueva. check-update termina con 100 si hay actualizaciones, 0 si no las hay y 1 si hay un error, así que puedes usarlo como condición en scripts.

Si añades el nombre de un paquete a list, aparecen juntas la versión instalada y la versión nueva del repositorio. Con updateinfo list compruebas a qué aviso (advisory) corresponde esa actualización.

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

En libavif, la versión instalada 0.11.1-5.el9 apareció bajo [Installed Packages] y la del repositorio, 1.1.1-3.el9, por separado bajo [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

Esa versión nueva era una actualización del aviso bugfix FEDORA-EPEL-2026-d611eab94a. Las actualizaciones de seguridad aparecen en el mismo lugar con la gravedad y Sec., como [Moderate/Sec.].

Las actualizaciones se ejecutan con upgrade. upgrade solo instala versiones nuevas en la medida en que las dependencias lo permiten, así que puede que no se instale exactamente la versión que mostró check-update.

dnf upgrade libavif

Si añades el nombre de un paquete, solo se actualizan ese paquete y los paquetes de dependencia que necesita.

dnf upgrade

Si omites el nombre, se actualizan todos los paquetes instalados. El flujo de mostrar el resumen de la transacción y preguntar si continuar es igual que en install, y cada transacción ejecutada queda registrada con un número en history.

4️⃣ Lista de repositorios con el comando dnf: repolist

El lugar donde search e install buscan los paquetes es el repositorio (repository). repolist muestra el id y el nombre de los repositorios habilitados en este momento.

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

Es fácil suponer que un repositorio que no está en la lista no existe en el servidor, pero la salida predeterminada de repolist solo muestra los repositorios habilitados. Si añades [--all], también muestra los deshabilitados junto con una columna status. En el servidor de prueba, los tres repositorios CRB de AlmaLinux 9 estaban 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

El número de paquetes, la dirección del mirror, el tiempo de caducidad de los metadatos y la ubicación del archivo de configuración de un repositorio se consultan con 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 mostró 3458 paquetes, y los metadatos estaban configurados para volver a comprobarse cada 86 400 segundos (un día). El archivo .repo de la línea [Repo-filename] es el archivo de configuración de este repositorio. Las opciones [--set-enabled] y [--set-disabled], que habilitan y deshabilitan repositorios, se usan con el comando config-manager de dnf-plugins-core.

5️⃣ Historial y deshacer con el comando dnf: history

Tras muchas instalaciones y eliminaciones cuesta seguir qué cambiaste y cuándo, pero dnf numera cada transacción (transaction) y la registra en history. Si añades el nombre de un paquete, solo aparecen las transacciones que cambiaron ese paquete.

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

En la salida filtrada por tmux solo quedó una línea: la transacción 51, que instaló tmux. Un rango de números se escribe con dos puntos seguidos, como [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

El número de la columna [Altered] es la cantidad de paquetes cambiados. La línea 50 terminaba con [EE], lo que significa que la transacción terminó, pero hubo salida de advertencias o errores.

La línea de comandos, los paquetes cambiados y el código de resultado de una transacción se consultan con 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

Al abrir la 51, en [Command Line] seguía tal cual el comando ejecutado, install -y tmux. En [Packages Altered] figuraban tmux instalado y el repositorio @baseos, y en [Return-Code], Success. Si omites el número, aparece la transacción más reciente.

Si instalaste algo por error, añade el número de transacción a history undo para ejecutar la acción inversa de esa transacción. rollback devuelve el estado de los paquetes al momento justo después de la transacción indicada.

dnf history undo 51

La transacción 51 fue la instalación de tmux, así que undo 51 se convierte en una transacción inversa que elimina tmux.

dnf history rollback 50

rollback 50 revierte todas las transacciones ejecutadas después de la 50 hasta la última, así que el resultado puede ser distinto del de undo 51, que solo elimina tmux.

Según la documentación oficial, si hay algún paquete que no se puede revertir, undo y rollback terminan sin cambiar nada. Aunque los cambios hechos directamente con rpm no estén en el historial, no se detienen con un error.

🔲 Simulador del comando dnf

En el simulador de abajo puedes escribir tú mismo los comandos search, info, provides, repolist y history y ver la salida. Si escribes yum, obtienes el mismo resultado.

Simulador del comando dnfdnf 4.14.0
[root@server work]#
Con las teclas ↑↓ recuperas los comandos que escribiste antes.

🔢 FAQ & contenido recomendado

Es el momento en que se comprobó por última vez la copia local de los metadatos del repositorio. Según la documentación oficial, se vuelven a descargar cuando pasa el tiempo metadata_expire definido para cada repositorio. Los comandos que no necesitan forzosamente la información más reciente, como search y provides, usan la copia local aunque haya caducado. Con [--refresh] se fuerza una nueva descarga, y [-C] usa solo la caché.

Al probar un comando inexistente como foo, apareció el error [No such command] junto con una indicación para probar a instalar un plugin con la forma [dnf install dnf-command(nombre)]. Esto se debe a que algunos subcomandos los añaden paquetes de plugins como dnf-plugins-core. Si fue una errata, consulta la lista de comandos con [dnf --help].

rpm -q solo lee la base de datos de paquetes instalados en el servidor (RPMDB) y muestra la versión de ese paquete; si no está, responde [package htop is not installed]. dnf list –installed muestra la misma base de datos con la información de los repositorios añadida, así que junto a cada paquete instalado aparece el repositorio del que vino (@epel). Si usas dnf list sin [--installed], también muestra las versiones nuevas de los repositorios.

🧭 Comandos de paquetes: contenido recomendado 6 artículos · 2 referencias
🗂️ Comandos de paquetes
📄 YUM: conceptos y comandos básicos 📄 Comando dnf 📄 Comando yum-config-manager 📄 Diferencias entre RPM y YUM
📄 Comandos apt · apt-get 📄 Instalar snapd

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Demuestra que eres humano: 5   +   4   =