Cheat sheet

Comandi apt: installazione, aggiornamento e rimozione di pacchetti in Ubuntu e Debian

Aggiornato: · Skillaria.Top

apt è il gestore pacchetti di Ubuntu e Debian: sudo apt update aggiorna l'elenco dei pacchetti, sudo apt upgrade installa gli aggiornamenti, sudo apt install nome installa un pacchetto, sudo apt remove lo rimuove (purge elimina anche le configurazioni) e apt autoremove toglie le dipendenze non più necessarie. Per cercare si usano apt search e apt show, mentre le dipendenze rotte si riparano con sudo apt --fix-broken install.

apt è il gestore di pacchetti standard di Ubuntu, Debian e delle loro derivate (Linux Mint, Pop!_OS). Scarica i programmi dai repository, installa automaticamente le dipendenze e aggiorna il sistema con un solo comando. Qui sotto trovi tutti i comandi apt che servono nel lavoro quotidiano, raggruppati per compito, insieme agli errori più comuni e alle loro soluzioni.

Come funziona apt

Un pacchetto è un archivio .deb che contiene il programma, i metadati e l'elenco delle dipendenze. I repository sono i server che ospitano i pacchetti; i loro indirizzi sono scritti in /etc/apt/sources.list e nella cartella /etc/apt/sources.list.d/. apt conserva una copia locale dell'elenco dei pacchetti disponibili e durante l'installazione si basa su di essa, quindi va aggiornata regolarmente.

Sotto il cofano apt richiama dpkg, che decomprime e registra i pacchetti ma non sa risolvere le dipendenze. I comandi apt-get e apt-cache sono l'interfaccia precedente con le stesse funzioni: output stabile, comodi negli script. apt è un involucro più recente pensato per le persone: barra di avanzamento, colori, comandi più corti.

Quasi tutti i comandi che modificano il sistema richiedono i privilegi di amministratore, quindi si lanciano con sudo. La ricerca e la consultazione delle informazioni funzionano anche senza.

Riepilogo: i comandi apt principali

ComandoCosa fa
sudo apt updateaggiorna l'elenco dei pacchetti dai repository
sudo apt upgradeinstalla gli aggiornamenti senza rimuovere pacchetti
sudo apt full-upgradeaggiorna anche rimuovendo o sostituendo pacchetti se necessario
sudo apt install pacchettoinstalla un pacchetto con le sue dipendenze
sudo apt reinstall pacchettoreinstalla un pacchetto
sudo apt remove pacchettorimuove il pacchetto, lasciando le configurazioni
sudo apt purge pacchettorimuove il pacchetto insieme alle configurazioni di sistema
sudo apt autoremoverimuove le dipendenze diventate inutili
apt search parolacerca un pacchetto per nome e descrizione
apt show pacchettodescrizione, versione, dipendenze, dimensione
apt list --installedelenco dei pacchetti installati
apt list --upgradablecosa si può aggiornare
apt policy pacchettoversione installata, versioni disponibili e origini
sudo apt cleansvuota la cache dei .deb scaricati
sudo apt --fix-broken installripara le dipendenze rotte

apt update e apt upgrade: come aggiornare il sistema

Sono due operazioni diverse, e spesso vengono confuse. apt update non installa nulla: scarica solo l'elenco aggiornato dei pacchetti. apt upgrade installa le nuove versioni dei programmi già presenti, basandosi su quell'elenco.

$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...
12 packages can be upgraded. Run 'apt list --upgradable' to see them.

$ apt list --upgradable
$ sudo apt upgrade

La combinazione abituale per un server, in una riga e con conferma automatica:

sudo apt update && sudo apt upgrade -y

Differenza tra upgrade e full-upgrade

apt upgrade può installare nuove dipendenze, ma non rimuove mai i pacchetti già installati. Se un aggiornamento richiede di eliminare qualcosa (per esempio al cambio di versione del kernel o di una libreria), tali pacchetti vengono «trattenuti»: compare la riga The following packages have been kept back. apt full-upgrade (equivalente di apt-get dist-upgrade) consente le rimozioni e completa l'aggiornamento. Prima di lanciarlo leggi attentamente cosa apt intende rimuovere.

Aggiornare un solo pacchetto

sudo apt install --only-upgrade nginx

Se il pacchetto non è installato, il comando con --only-upgrade non lo installa: è una protezione contro le installazioni accidentali.

apt install: installazione dei pacchetti

sudo apt install nginx                 # un pacchetto
sudo apt install git curl htop         # più pacchetti insieme
sudo apt install -y docker.io          # senza la domanda Y/n
sudo apt install nginx=1.24.0-2ubuntu7 # versione specifica
sudo apt install --no-install-recommends ffmpeg  # senza i pacchetti consigliati
sudo apt install ./google-chrome-stable_current_amd64.deb  # file .deb locale

Durante l'installazione apt mostra quali pacchetti verranno aggiunti e quanto spazio occupano, poi chiede conferma. Il flag -y risponde «sì» in automatico: è comodo negli script e nei Dockerfile, ma nel lavoro interattivo conviene leggere l'elenco.

Di default apt installa non solo le dipendenze obbligatorie (Depends) ma anche quelle consigliate (Recommends). Su server e nei container --no-install-recommends riduce sensibilmente le dimensioni.

Installare un file .deb: apt o dpkg -i

Un .deb scaricato conviene installarlo con apt install ./file.deb — il percorso deve iniziare con ./ oppure essere assoluto, altrimenti apt cercherà un pacchetto con quel nome nel repository. A differenza di dpkg -i, apt scarica da solo le dipendenze mancanti. Se hai già installato un pacchetto con dpkg e ricevi errori di dipendenze, li risolve sudo apt --fix-broken install.

sudo dpkg -i package.deb
sudo apt --fix-broken install

apt remove, purge e autoremove: rimozione dei pacchetti

ComandoProgrammaConfigurazioni in /etcDipendenze
apt removerimossorestanorestano
apt purgerimossoeliminaterestano
apt autoremove——eliminate quelle inutili
sudo apt remove nginx
sudo apt purge nginx            # come sopra + configurazioni
sudo apt autoremove             # resti delle dipendenze
sudo apt autoremove --purge     # resti insieme alle loro configurazioni

remove va bene se pensi di riutilizzare il programma e vuoi conservarne le impostazioni. purge serve per una reinstallazione completamente pulita. Attenzione: i file nella home dell'utente (per esempio ~/.config) non vengono eliminati da nessuno di questi comandi.

Per trovare i pacchetti rimossi che hanno lasciato delle configurazioni, cercali con stato rc:

dpkg -l | grep '^rc'

Ricerca dei pacchetti e informazioni

apt search postgresql          # ricerca per nome e descrizione
apt search --names-only '^php8' # solo per nome, con espressione regolare
apt show htop                  # versione, dimensione, dipendenze, descrizione
apt policy docker.io           # quali versioni sono disponibili e da dove
apt list --installed | grep python3
apt-cache depends curl         # da cosa dipende il pacchetto
apt-cache rdepends libssl3     # chi dipende dal pacchetto

A quale pacchetto appartiene un file

$ dpkg -S /usr/bin/curl
curl: /usr/bin/curl

$ dpkg -L curl        # quali file ha installato il pacchetto

Se il comando non è ancora presente nel sistema, Ubuntu al tentativo di lanciarlo suggerisce il pacchetto giusto (messaggio Command 'tree' not found, but can be installed with: sudo apt install tree). Per cercare tra i file dei pacchetti non installati c'è l'utility apt-file: apt-file search bin/dig dopo sudo apt-file update.

Bloccare una versione: apt-mark hold

A volte un pacchetto non deve essere aggiornato — per esempio la versione di un DBMS o del kernel in produzione si cambia solo a mano. Per questo il pacchetto si «congela»:

sudo apt-mark hold postgresql-16
apt-mark showhold
sudo apt-mark unhold postgresql-16

Un'altra coppia utile è apt-mark manual e apt-mark auto. I pacchetti installati come dipendenza sono contrassegnati come automatici e rientrano in autoremove quando diventano inutili. Il contrassegno manual li protegge da questo.

Repository: come aggiungerli e dove stanno

L'elenco delle sorgenti si trova in /etc/apt/sources.list e nei file /etc/apt/sources.list.d/*.list. In Ubuntu 24.04 e Debian 12+ si usa sempre più spesso il formato deb822 con estensione .sources (per esempio /etc/apt/sources.list.d/ubuntu.sources).

Repository di terze parti con chiave

Il modo attuale è conservare la chiave del repository a parte e collegarla tramite signed-by. Il comando apt-key è obsoleto e nelle versioni recenti è stato rimosso.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce

PPA su Ubuntu

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo add-apt-repository --remove ppa:deadsnakes/ppa

I PPA sono repository personali su Launchpad. Collega solo quelli di cui ti fidi: i pacchetti da lì vengono installati con i privilegi di root.

Cache e spazio su disco

I pacchetti scaricati restano in /var/cache/apt/archives/. Sui dischi piccoli e nelle immagini Docker conviene svuotare la cache.

du -sh /var/cache/apt/archives
sudo apt clean          # elimina tutta la cache dei .deb
sudo apt autoclean      # elimina solo le versioni obsolete

Nei Dockerfile l'installazione si scrive di solito in un unico livello e le liste dei pacchetti vengono subito rimosse:

RUN apt-get update \
 && apt-get install -y --no-install-recommends curl ca-certificates \
 && rm -rf /var/lib/apt/lists/*

Negli script si usa apt-get e non apt: l'interfaccia di apt non è stabile e lo dichiara apertamente (WARNING: apt does not have a stable CLI interface). Per evitare che l'installazione chieda conferme si aggiunge DEBIAN_FRONTEND=noninteractive.

Errori tipici di apt e come risolverli

Could not get lock /var/lib/dpkg/lock-frontend

Un altro processo sta già lavorando sui pacchetti: un secondo terminale con apt, il «Centro applicazioni» o gli aggiornamenti automatici in background di unattended-upgrades. Attendi qualche minuto e verifica chi tiene il lock:

ps aux | grep -E 'apt|dpkg'

Non cancellare a mano i file di lock finché il processo è attivo: un'installazione interrotta può lasciare il sistema in uno stato incoerente. Se il processo è davvero bloccato o è stato terminato, dopo la sua chiusura esegui sudo dpkg --configure -a.

Unable to locate package

apt non trova il pacchetto. Succede soprattutto perché non hai eseguito sudo apt update su un sistema appena installato, hai sbagliato il nome oppure il pacchetto si trova in un componente disattivato (universe in Ubuntu). Il componente si attiva con sudo add-apt-repository universe.

Unmet dependencies / held broken packages

Le dipendenze non tornano: di solito dopo l'installazione manuale di un .deb o dopo aver mescolato repository di versioni diverse della distribuzione.

sudo apt --fix-broken install
sudo dpkg --configure -a
apt policy pacchetto-problematico

dpkg was interrupted

L'installazione è stata interrotta (chiuso il terminale, mancata alimentazione). Il messaggio stesso indica la soluzione: sudo dpkg --configure -a.

NO_PUBKEY durante apt update

Il repository di terze parti non ha la chiave di firma oppure la chiave è scaduta. Scarica la chiave aggiornata dal sito del progetto in /etc/apt/keyrings/ e indicala in signed-by, come nell'esempio Docker qui sopra.

Aggiornamenti di sicurezza automatici

Ubuntu Server include di default il pacchetto unattended-upgrades, che installa da solo gli aggiornamenti di sicurezza. Per verificarlo e attivarlo:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
cat /var/log/unattended-upgrades/unattended-upgrades.log

Il file /var/run/reboot-required indica se serve un riavvio dopo l'aggiornamento: se esiste, sono stati aggiornati il kernel o librerie fondamentali.

Conclusioni

I comandi apt di base seguono un ciclo semplice: update prima di ogni operazione, install per installare, upgrade per aggiornare, remove o purge per rimuovere e autoremove per fare pulizia. Per le versioni ci sono apt policy e apt-mark hold, per i guasti --fix-broken install e dpkg --configure -a, mentre negli script conviene usare apt-get. La gestione dei pacchetti è trattata in pratica nel corso di Linux.

Domande frequenti

In cosa apt si differenzia da apt-get?

Sono due interfacce dello stesso sistema di pacchetti. apt è più comodo per il lavoro da terminale (avanzamento, colori, comandi brevi), mentre apt-get ha un output stabile ed è consigliato per script e Dockerfile.

Serve eseguire apt update prima di ogni installazione?

Conviene farlo se l'elenco non viene aggiornato da tempo: altrimenti apt potrebbe non trovare il pacchetto oppure tentare di scaricare una versione già rimossa dal mirror, con un errore 404.

Come vedere la cronologia di installazioni e rimozioni fatte con apt?

La cronologia si scrive in /var/log/apt/history.log (le voci vecchie negli archivi history.log.N.gz), mentre il log dettagliato di dpkg si trova in /var/log/dpkg.log.

Come riportare un pacchetto a una versione precedente?

Verifica le versioni disponibili con apt policy pacchetto e installa quella che ti serve con sudo apt install pacchetto=versione, poi bloccala con apt-mark hold così il prossimo aggiornamento non la riporta alla nuova.

Si può usare apt su CentOS o Fedora?

No, lì il formato dei pacchetti è rpm e gli strumenti sono dnf e yum. apt funziona su Debian, Ubuntu e le distribuzioni derivate.

Impara l’argomento in video

Questo argomento è trattato in modo approfondito, con pratica, nel corso «Linux: с нуля до уверенного администрирования».

Vai al corso