Comando dnf: installare, aggiornare e rimuovere pacchetti e differenze con yum

Ambiente di testFamiglia RHELAlmaLinux 9.8account rootVerificato il 2026-10-28
Comandi dei pacchettidnfPosizione/usr/bin/dnf

Il comando dnf è il comando di gestione dei pacchetti con cui, sulle distribuzioni Linux della famiglia RHEL, cerchi, installi, aggiorni e rimuovi i pacchetti. Su AlmaLinux 9, anche digitando yum si avvia lo stesso programma. Su un server AlmaLinux 9 abbiamo eseguito davvero search, info, provides e history, verificando nell'output dove guardano search, info e provides per trovare i pacchetti e quali registrazioni delle operazioni restano in history.

Non abbiamo eseguito comandi che modificano il sistema, come installazione, rimozione e aggiornamento. Questo comportamento è stato verificato nella documentazione ufficiale di DNF e nella cronologia delle operazioni già presente sul server.

1️⃣ Rapporto tra il comando dnf e yum

È facile pensare che digitando yum si avvii il vecchio yum, ma su AlmaLinux 9 yum e dnf sono entrambi link allo stesso eseguibile, 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

L'unica differenza tra yum e dnf è il nome che digiti: qualunque dei due usi, sottocomandi e opzioni sono gli stessi. Anche l'output di search htop eseguito con yum e con dnf era identico.

Secondo la documentazione ufficiale di DNF [Changes in DNF CLI compared to YUM], update e upgrade fanno la stessa cosa, e la documentazione consiglia upgrade.

Sulle distribuzioni più vecchie senza dnf usi il comando yum come sempre. I nomi dei sottocomandi di questo articolo, come install, search e history, sono gli stessi anche in yum.

2️⃣ Consultare i pacchetti con il comando dnf: search, info, provides

Se non conosci il nome esatto del pacchetto del programma che vuoi installare, cercalo con search e una parola. search cerca la parola nel nome e nel riepilogo (Summary) dei pacchetti e mette in cima il pacchetto il cui nome corrisponde esattamente.

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

Per htop c'era un solo pacchetto con il nome esatto, quindi il risultato si è fermato a una riga sotto [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 parola presente in più pacchetti, come wget, è apparsa divisa in tre gruppi: nome esattamente uguale, presente sia nel nome sia nel riepilogo, presente solo nel nome.

search non guarda il testo della descrizione (Description), quindi non va bene per cercare una parola che compare solo lì. In questo caso aggiungi l'opzione [--all] per estendere la ricerca anche a descrizione e URL.

Una volta noto il nome del pacchetto, con info controlli versione, dimensione e repository di provenienza.

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, non ancora installato, compare in info htop sotto [Available Packages] con versione 3.3.0 e repository epel. htop è un pacchetto presente solo nel repository epel, quindi se rilanci search escludendo epel non compare nulla.

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, già installato, è apparso sotto [Installed Packages]. Repository era @System, e il repository da cui era stato scaricato all'installazione era indicato come appstream nella riga [From repo].

Al contrario, se conosci solo il nome del file e non sai in quale pacchetto si trova, passa il percorso del file 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

La ricerca di /usr/bin/tree ha dato due gruppi per il pacchetto tree: il lato installato (@System) e il lato repository (baseos). Il Filename sotto [Matched from] è il percorso che ha effettivamente corrisposto. Se scrivi solo il nome del file senza percorso, dnf vi antepone /usr/bin/ e /usr/sbin/ e cerca di nuovo; se non trova ancora nulla, termina con l'errore qui sotto.

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.

Il messaggio di errore suggerisce di indicare il percorso completo o di anteporre il carattere jolly [*/]. Cosa ricevono in input i tre comandi e dove cercano puoi confrontarlo passo per passo nel diagramma qui sotto.

🧭 Dove guardano i tre comandi che cercano i pacchetti
Diagramma esplicativo
🔍 Comando
$ dnf search htopinfo htopprovides /usr/bin/tree
① InputhtopUna parolahtopNome del pacchetto/usr/bin/treePercorso del file
➜
② Dove cercaNome e riepilogo (Summary) del pacchettoTrova in tutti i repository ogni pacchetto che contiene la parola.Metadati di un pacchettoMostra separatamente ciò che è installato e ciò che si può installare.Elenco dei file forniti dal pacchettoRisale al pacchetto che contiene il file in quel percorso.
➜
③ OutputElenco dei pacchetti corrispondentihtop.x86_64 : Interactive process viewerVersione, dimensione, repository, descrizioneVersion 3.3.0, Size 198 k, Repository epelPacchetto che contiene il filetree-1.8.0-10.el9.x86_64, @System, baseos
search cerca la parola nel nome e nel riepilogo dei pacchetti e mostra un elenco a partire dai nomi esattamente uguali.
info mostra versione, dimensione e repository di provenienza di un pacchetto. Per i pacchetti installati, nel campo Repository compare @System.
provides risale al pacchetto partendo dal percorso del file. Il lato installato (@System) e il lato repository (baseos) compaiono separati.

3️⃣ Installare, rimuovere e aggiornare pacchetti: install, remove, upgrade

Il pacchetto trovato si installa con install. dnf installa in un colpo solo non solo il pacchetto indicato, ma anche i pacchetti di dipendenza di cui ha bisogno.

dnf install htop

Secondo la documentazione ufficiale, dnf mostra l'elenco dei pacchetti da installare (il riepilogo della transazione) e chiede se continuare; con [-y] procede senza chiedere.

I pacchetti di dipendenza necessari all'installazione puoi controllarli in anticipo 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 il solo [--requires] escono solo i nomi delle librerie richieste da htop. In quale pacchetto si trovano queste librerie lo verifichi con il comando seguente.

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

Aggiungendo [--resolve], l'output mostra invece i nomi dei pacchetti che forniscono quelle librerie. Tra questi, hwloc-libs non c'era sul server di test, quindi viene installato insieme a htop.

remove elimina il pacchetto indicato insieme ai pacchetti che dipendono da esso e, con le impostazioni predefinite, rimuove anche i pacchetti di dipendenza non più necessari.

dnf remove htop

Anche rimuovendo solo htop, vengono rimossi insieme i pacchetti di dipendenza che nessun altro pacchetto usa, come hwloc-libs installato per htop.

Ciò che in passato è stato installato come dipendenza ma ora non serve a nessun pacchetto viene rimosso da autoremove. Controlla prima l'elenco di ciò che verrà rimosso 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

Sul server di test l'elenco mostrava 6 pacchetti, e autoremove rimuove questi 6 in un colpo solo.

Se è uscita una nuova versione di un pacchetto installato lo controlli con check-update. Aggiungendo il nome di un pacchetto, controlla solo quello.

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

Il comando qui sopra con libavif e libdav1d è terminato con codice di uscita 100, perché entrambi avevano una nuova versione. check-update termina con 100 se ci sono aggiornamenti, con 0 se non ce ne sono e con 1 in caso di errore, quindi puoi usarlo come condizione negli script.

Con list e il nome di un pacchetto compaiono insieme la versione installata e quella nuova del repository. Con updateinfo list controlli a quale advisory corrisponde quell'aggiornamento.

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

Per libavif, la versione installata 0.11.1-5.el9 è apparsa sotto [Installed Packages] e la 1.1.1-3.el9 del repository separatamente sotto [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

Quella nuova versione era un aggiornamento dell'advisory bugfix FEDORA-EPEL-2026-d611eab94a. Per gli aggiornamenti di sicurezza, nello stesso punto compaiono la gravità e Sec., come in [Moderate/Sec.].

L'aggiornamento si esegue con upgrade. upgrade installa nuove versioni solo nei limiti consentiti dalle dipendenze, quindi la versione mostrata da check-update potrebbe non essere installata così com'è.

dnf upgrade libavif

Aggiungendo il nome di un pacchetto, passano alla nuova versione solo quel pacchetto e i pacchetti di dipendenza necessari.

dnf upgrade

Se ometti il nome, l'operazione riguarda tutti i pacchetti installati. Il flusso, con il riepilogo della transazione seguito dalla domanda se continuare, è lo stesso di install, e la transazione eseguita resta registrata con un numero in history.

4️⃣ Elenco dei repository con il comando dnf: repolist

Il posto in cui search e install cercano i pacchetti è il repository. repolist mostra id e nome dei repository attualmente abilitati.

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

È facile pensare che un repository assente dall'elenco non esista sul server, ma l'output predefinito di repolist mostra solo i repository abilitati. Con [--all] mostra anche quelli disabilitati, insieme alla colonna status. Sul server di test, i tre repository CRB di AlmaLinux 9 erano tutti 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

Numero di pacchetti, indirizzo del mirror, tempo di scadenza dei metadati e posizione del file di configurazione di un repository li controlli 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

In repoinfo baseos i pacchetti risultavano 3.458, e i metadati erano impostati per essere ricontrollati ogni 86.400 secondi (un giorno). Il file .repo nella riga [Repo-filename] è il file di configurazione di questo repository. Le opzioni [--set-enabled] e [--set-disabled], che abilitano e disabilitano i repository, si usano con il comando config-manager di dnf-plugins-core.

5️⃣ Cronologia e annullamento con il comando dnf: history

Dopo varie installazioni e rimozioni diventa difficile seguire cosa hai cambiato e quando, ma dnf assegna un numero a ogni transazione (transaction) e la registra in history. Aggiungendo il nome di un pacchetto compaiono solo le transazioni che lo hanno modificato.

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

Nell'output filtrato per tmux è rimasta solo la riga della transazione 51, quella che ha installato tmux. Un intervallo di numeri si scrive con due punti, come [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

Il numero nella colonna [Altered] è il numero di pacchetti modificati. Alla fine della riga 50 compariva [EE]: significa che la transazione è stata completata, ma c'è stato output di avvisi o errori.

Riga di comando, pacchetti modificati e codice di risultato di una transazione li controlli 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

Aprendo la 51, in [Command Line] era rimasto tale e quale il comando eseguito install -y tmux. In [Packages Altered] c'erano tmux installato e il repository @baseos, e in [Return-Code] c'era Success. Se ometti il numero, compare la transazione più recente.

Se hai installato qualcosa per errore, passa il numero della transazione a history undo per eseguire l'operazione inversa di quella transazione. rollback riporta lo stato dei pacchetti a subito dopo la transazione indicata.

dnf history undo 51

La transazione 51 era l'installazione di tmux, quindi undo 51 diventa una transazione inversa che rimuove tmux.

dnf history rollback 50

rollback 50 annulla tutte le transazioni eseguite dopo la 50, fino all'ultima, quindi il risultato può essere diverso da undo 51, che rimuove solo tmux.

Secondo la documentazione ufficiale, se c'è un pacchetto che non si può riportare indietro, undo e rollback terminano senza cambiare nulla. Anche se le modifiche fatte direttamente con rpm non sono nella cronologia, non si fermano con un errore.

🔲 Simulatore del comando dnf

Nel simulatore qui sotto puoi digitare tu stesso search, info, provides, repolist e history e vedere l'output. Anche digitando yum ottieni lo stesso risultato.

Simulatore del comando dnfdnf 4.14.0
[root@server work]#
Con i tasti ↑↓ richiami i comandi digitati prima.

🔢 FAQ & contenuti consigliati

È il momento in cui la copia locale dei metadati del repository è stata controllata l'ultima volta. Secondo la documentazione ufficiale, viene scaricata di nuovo quando passa il tempo metadata_expire impostato per ogni repository. I comandi che non hanno per forza bisogno delle informazioni più recenti, come search e provides, usano la copia locale anche se è scaduta. Con [--refresh] la scarichi di nuovo forzatamente, mentre [-C] usa solo la cache.

Provando un comando inesistente come foo, è apparso l'errore [No such command] insieme al suggerimento di installare un plugin nella forma [dnf install dnf-command(nome)]. Questo perché alcuni sottocomandi vengono aggiunti da pacchetti plugin come dnf-plugins-core. Se è un errore di battitura, controlla l'elenco dei comandi con [dnf --help].

rpm -q legge solo il database dei pacchetti installati sul server (RPMDB) e mostra la versione del pacchetto; se non c'è, risponde [package htop is not installed]. dnf list --installed aggiunge a quello stesso database le informazioni sui repository, quindi accanto al pacchetto installato compare il repository da cui proviene (@epel). Se usi dnf list senza [--installed], vengono mostrate anche le nuove versioni nei repository.

🧭 Contenuti consigliati sui comandi dei pacchetti 6 articoli · 2 fonti
🗂️ Comandi dei pacchetti
📄 YUM: concetto e comandi di base 📄 Comando dnf 📄 Comando yum-config-manager 📄 Differenze tra RPM e YUM
📄 Comandi apt · apt-get 📄 Installare snapd

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 4   +   8   =