Comando dnf: instalar, actualizar y eliminar paquetes, y sus diferencias con yum
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/dnflrwxrwxrwx 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-3La ú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 htopLast metadata expiration check: 0:21:53 ago on Wed Oct 28 15:24:31 2026.
========================== Name Exactly Matched: htop ==========================
htop.x86_64 : Interactive process viewerhtop solo tiene un paquete con ese nombre exacto, así que el resultado fue una sola línea bajo [Name Exactly Matched].
dnf search wgetLast 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 downloaderUna 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 htopLast 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 wgetLast 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/treeLast 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/treeAl 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 nosuchfileLast 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.
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 htopSegú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 htopLast 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 htopLast 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_64Si 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 htopAunque 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 --autoremoveLast 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 @appstreamdnf autoremoveEn 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 libdav1dLast 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 epelEl 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 libavifLast 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 epelEn 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 libavifLast 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_64Esa 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 libavifSi añades el nombre de un paquete, solo se actualizan ese paquete y los paquetes de dependencia que necesita.
dnf upgradeSi 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 repolistrepo 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_64Es 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 crbcrb AlmaLinux 9 - CRB disabled
crb-debuginfo AlmaLinux 9 - CRB - Debug disabled
crb-source AlmaLinux 9 - CRB - Source disabledEl 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 baseosLast 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: 3458repoinfo 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 tmuxID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
51 | install -y tmux | 2026-10-15 20:40 | Install | 1En 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..51ID | 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 EEEl 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 51Transaction 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 @baseosAl 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 51La 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 50rollback 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.
🔢 FAQ & contenido recomendado



ℹ️ 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.