La gestion des paquets est l’une des tâches les plus fondamentales d’un administrateur système sous Debian ou Ubuntu. Contrairement à d’autres distributions qui utilisent rpm, dnf ou yum, l’écosystème Debian repose sur un outillage cohérent et mature : dpkg en couche basse, et APT (Advanced Package Tool) en couche haute pour résoudre les dépendances, gérer les dépôts et orchestrer les mises à jour.
La commande apt, introduite dans Debian 8 et Ubuntu 16.04 pour remplacer progressivement apt-get et apt-cache dans les usages interactifs, offre une interface unifiée, colorée et plus lisible. Sur un serveur en production sous Debian 12 Bookworm ou Ubuntu 24.04 LTS, maîtriser apt en profondeur — y compris le pinning, la gestion des sources et les marquages de paquets — est indispensable pour maintenir un système sain et prévisible.
Ce guide couvre l’ensemble des commandes apt utiles au quotidien : mise à jour du système, installation et suppression de paquets, recherche dans les dépôts, configuration des sources, nettoyage des résidus, et fonctionnalités avancées comme le gel de version (hold) et le pinning.
APT vs apt-get : lequel utiliser ?
apt est le frontal recommandé pour un usage interactif dans un terminal. Il agrège les fonctionnalités de apt-get et apt-cache avec une meilleure lisibilité : barre de progression, couleurs, résolution de conflits de dépendances améliorée. APT 3.0.3 (version présente sous Debian 12/Ubuntu 24.04) introduit notamment le résolveur solver3 par défaut et les commandes diagnostiques apt why / apt why-not.
En revanche, pour les scripts, playbooks Ansible ou Dockerfiles, préférez apt-get : son format de sortie est stable entre les versions, ses codes de retour sont normalisés, et il ne présuppose pas de TTY. La règle est simple : apt pour le terminal humain, apt-get pour la machine.
# Vérifier la version APT installée
apt --version
# apt 3.0.3 (amd64)
Mise à jour du système
apt update — synchronisation des métadonnées
apt update ne met pas à jour les paquets installés : il rafraîchit uniquement les listes de paquets disponibles depuis les dépôts configurés. Cette étape est indispensable avant toute installation ou mise à niveau.
sudo apt update
# Sortie typique :
# Hit:1 https://deb.debian.org/debian bookworm InRelease
# Hit:2 https://security.debian.org/debian-security bookworm-security InRelease
# Get:3 https://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
# Reading package lists... Done
apt upgrade et apt full-upgrade
apt upgrade met à jour les paquets installés sans jamais supprimer de paquet ni en installer de nouveau. C’est le comportement conservateur recommandé en production pour les mises à jour de sécurité courantes.
apt full-upgrade (anciennement apt-get dist-upgrade) est plus agressif : il peut installer de nouveaux paquets et en supprimer d’autres pour satisfaire les dépendances. À utiliser lors des montées de version majeures ou quand upgrade est bloqué par des conflits.
# Mise à jour sûre (ne supprime rien)
sudo apt upgrade
# Mise à jour complète (peut installer/supprimer des paquets)
sudo apt full-upgrade
# Simuler sans appliquer (dry-run)
sudo apt upgrade --dry-run
Installation et suppression de paquets
apt install
# Installer un paquet
sudo apt install htop
# Installer une version spécifique
sudo apt install nginx=1.26.*
# Installer sans confirmation interactive (utile en script, mais préférer apt-get)
sudo apt install -y curl wget
# Installer depuis un fichier .deb local (résolution des dépendances via APT)
sudo apt install ./monpaquet_1.0_amd64.deb
# Réinstaller un paquet (utile si les fichiers ont été altérés)
sudo apt reinstall openssh-server
apt remove et apt purge
apt remove supprime les binaires du paquet mais conserve les fichiers de configuration dans /etc. apt purge supprime également les fichiers de configuration — à préférer quand on désinstalle définitivement un service.
# Supprimer un paquet (conserve la configuration)
sudo apt remove apache2
# Supprimer un paquet ET sa configuration
sudo apt purge apache2
# Purger plusieurs paquets d'un coup
sudo apt purge apache2 libapache2-mod-php php-common
Recherche et informations sur les paquets
apt search et apt show
# Rechercher un paquet par nom ou description
apt search "monitoring agent"
# Afficher les informations détaillées d'un paquet
apt show prometheus-node-exporter
# Sortie partielle :
# Package: prometheus-node-exporter
# Version: 1.7.0+ds-1
# Depends: libsystemd0 (>= 244)
# Description: Prometheus exporter for machine metrics
apt list
# Lister les paquets installés
apt list --installed
# Lister les paquets pouvant être mis à jour
apt list --upgradable
# Lister toutes les versions disponibles d'un paquet
apt list -a nginx
apt why et apt why-not (APT 3.x)
Nouvelles commandes introduites avec APT 3, elles permettent de comprendre pourquoi un paquet est installé ou pourquoi il ne peut pas l’être — précieux pour déboguer les conflits de dépendances.
# Pourquoi le paquet 'libssl3' est-il installé ?
apt why libssl3
# Pourquoi 'nodejs' version 22 ne peut-il pas être installé ?
apt why-not nodejs=22.*
Configuration des dépôts : sources.list et format deb822
Format classique /etc/apt/sources.list
# Structure d'une ligne sources.list classique
# deb [options] URI suite composantes
deb https://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb https://security.debian.org/debian-security bookworm-security main
deb https://deb.debian.org/debian bookworm-updates main
Format deb822 (recommandé depuis Ubuntu 24.04 / Debian 13)
Le format deb822 (.sources) remplace progressivement le format classique. Il est plus lisible, supporte plusieurs URI par entrée, et facilite la gestion des clés GPG. C’est le format par défaut sur Ubuntu 24.04 LTS et Debian 13 Trixie.
# /etc/apt/sources.list.d/debian.sources (format deb822)
Types: deb deb-src
URIs: https://deb.debian.org/debian
Suites: bookworm bookworm-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Enabled: yes
Types: deb
URIs: https://security.debian.org/debian-security
Suites: bookworm-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
# Migrer automatiquement les sources.list vers le format deb822 (APT 3.x)
sudo apt modernize-sources
Ajouter un dépôt tiers de façon sécurisée
# Télécharger et stocker la clé GPG du dépôt
curl -fsSL https://exemple.com/repo.gpg | sudo gpg --dearmor -o /usr/share/keyrings/exemple-keyring.gpg
# Créer le fichier source en format deb822
cat <<EOF | sudo tee /etc/apt/sources.list.d/exemple.sources
Types: deb
URIs: https://exemple.com/debian
Suites: stable
Components: main
Signed-By: /usr/share/keyrings/exemple-keyring.gpg
EOF
sudo apt update
Fonctionnalités avancées
Geler la version d’un paquet (apt-mark hold)
Le hold empêche un paquet d’être mis à jour par apt upgrade. Indispensable pour maintenir une version spécifique d’un noyau, d’une base de données ou d’un runtime en production.
# Geler le paquet (ne sera plus mis à jour)
sudo apt-mark hold nginx
# Vérifier les paquets gelés
apt-mark showhold
# Dégeler le paquet
sudo apt-mark unhold nginx
Pinning : contrôler la priorité des dépôts
Le pinning permet d’affiner quelle version d’un paquet est installée lorsqu’il est disponible dans plusieurs dépôts. Les règles se définissent dans /etc/apt/preferences.d/.
# /etc/apt/preferences.d/nginx-pin
# Forcer nginx à venir du dépôt bookworm-backports uniquement
Package: nginx
Pin: release a=bookworm-backports
Pin-Priority: 900
# Bloquer l'installation d'un paquet (priorité négative)
Package: snapd
Pin: release *
Pin-Priority: -1
# Vérifier les priorités effectives d'un paquet
apt-cache policy nginx
Téléchargement sans installation
# Télécharger le .deb sans installer
apt download curl
# Télécharger les sources
apt source nginx
Nettoyage du système
# Supprimer les paquets installés automatiquement devenus orphelins
sudo apt autoremove
# Vider le cache des paquets téléchargés (fichiers .deb dans /var/cache/apt/archives/)
sudo apt clean
# Supprimer uniquement les paquets obsolètes du cache (versions non disponibles)
sudo apt autoclean
# Voir la taille du cache avant nettoyage
du -sh /var/cache/apt/archives/
Attention :
apt cleansupprime l’intégralité du cache local. Si vous avez besoin de réinstaller des paquets sans accès réseau, conservez le cache ou utilisezautocleanà la place.
Récapitulatif des commandes essentielles
| Commande | Action |
|---|---|
apt update |
Rafraîchir les listes de paquets |
apt upgrade |
Mettre à jour les paquets (conservateur) |
apt full-upgrade |
Mise à niveau complète (peut installer/supprimer) |
apt install pkg |
Installer un paquet |
apt remove pkg |
Désinstaller (conserve la conf) |
apt purge pkg |
Désinstaller + supprimer la conf |
apt search terme |
Rechercher dans les dépôts |
apt show pkg |
Détails d’un paquet |
apt list --installed |
Lister les paquets installés |
apt-mark hold pkg |
Geler un paquet |
apt autoremove |
Supprimer les orphelins |
apt clean |
Vider le cache local |
À lire également
- Gestion des services avec systemd sur Debian et Ubuntu — maîtrisez le cycle de vie des services installés via APT avec systemctl et journald.
- Ansible : automatiser la gestion de serveurs Linux avec des playbooks — automatisez vos installations apt à grande échelle sur un parc de serveurs.
- Scripting Bash avancé — pièges, bonnes pratiques et optimisation — intégrez apt-get dans vos scripts de déploiement de manière robuste.
- Gestion des journaux avec syslog et journalctl — consultez les logs d’installation APT via journalctl pour auditer les changements de paquets.