APT
Paquets APT
Sur Debian (et ses dérivés comme Ubuntu), apt est un outil en ligne de commande pour gérer les paquets logiciels. Il permet d’installer, mettre à jour, supprimer et gérer les logiciels provenant des dépôts officiels de Debian.
Mise à jour de la liste des paquets
sudo apt update
Voir ce qui peut être mis à jour
sudo apt list --upgradable
Installation
sudo apt install --only-upgrade firefox
Ne gère pas les dépendances
sudo apt upgrade
Gère les dépendances
(permet l'installation de nouveaux paquets pour résoudre les dépendances)
sudo apt --with-new-pkgs upgrade
(peut également supprimer des paquets pour satisfaire les dépendances) => plus agressive
sudo apt full-upgrade
Supprimez tous les paquets devenus obsolètes et qui ne sont plus nécessaires
Supprime les anciens noyaux installés
sudo apt-get autoremove --purge
Supprimez le cache des paquets qui ne peuvent plus être téléchargés
sudo apt autoclean
Télécharge et installe les dépendances manquantes pour réparer les paquets cassés.
sudo apt --fix-broken install
Affichage des infos d'un paquet
apt show firefox
Recherche de paquets
apt search mot-clé
Termine la configuration des paquets interrompus.
voir tous les paquets
dpkg --list
ou
dpkg --get-selections
ou
apt list --installed
voir si un paquet est à jour
apt-cache policy firefox
compter les paquets installés sur Ubuntu
sudo dpkg-query -f '${binary:Package}\n' -W | wc -l
# ou
sudo apt list --installed | wc -l
voir si des paquets sont cassés
apt-get check
dpkg -l | grep -v ^ii
dpkg -l | grep ^rc #(installé et reste des fichiers de configuration)
dpkg -l | grep ^iB #(installé et avec des dépendances cassées)
phased => déféré (retardé)
Cette commande permet de calculer un score entre 0 et 99 à partir de votre machine-id, utilisé par Ubuntu pour les phased updates (mises à jour progressives).
1 .Calcul du Score de Phase
echo $((0x$(cut -c1-16 /etc/machine-id | head -c 8) % 100))
ou
awk '{print strtonum("0x" substr($0,1,8)) % 100}' /etc/machine-id
2. Résumé
| Étape | Action | Exemple |
|---|---|---|
| 1 | Extraire les 16 premiers caractères de /etc/machine-id
|
a1b2c3d4e5f6g7h
|
| 2 | Garder les 8 premiers caractères | a1b2c3d4
|
| 3 | Convertir en décimal (hexadécimal 0x...)
|
2712849364
|
| 4 | Appliquer % 100
|
64
|
| 5 | Score final | 64 |
3. À Quoi Sert Ce Score ?
- Phased Updates : Ubuntu déploie les mises à jour par vagues (ex : 10%, 30%, 50% des machines).
- Votre score (
64) détermine si vous recevez une mise à jour :- Si la phase actuelle est ≤ 64 → Vous l’obtenez.
- Si la phase actuelle est ≤ 64 → Vous l’obtenez.
- Si la phase est > 64 → Vous devrez attendre.
4. Pourquoi Cette Méthode ?
- Déterminisme : Le score est toujours le même pour votre machine (car basé sur
machine-id).
- Répartition uniforme : Les scores sont distribués entre 0 et 99 pour équilibrer le déploiement.
5. Lister tous les fichiers phased
#check_phased_updates.sh
#!/bin/bash
# Liste des paquets en phased updates
PACKAGES=$(apt list --upgradable | grep -E "*" | cut -d'/' -f1)
echo "Checking phased updates"
# Parcourir chaque paquet et extraire le pourcentage de phased updates
for PACKAGE in $PACKAGES; do
echo $PACKAGE
apt-cache policy $PACKAGE | grep "phased"
done
chmod +x check_phased_updates.sh
./check_phased_updates.sh
DPKG
APTITUDE
sudo aptitude update
aptitude search '~U'
sudo aptitude upgrade
apt vs apt-get vs aptitude
apt: Version moderne et conviviale, combinant les fonctionnalités deapt-getetapt-cacheavec des couleurs et une barre de progression.apt-get: Outil plus ancien, toujours utilisé dans les scripts pour sa stabilité.aptitude: Alternative avec une interface en mode texte (interactive) et une gestion avancée des dépendances.
Script SH historique
#!/bin/bash
# Permet de consulter l'historique APT sur un système debian
#Usage: ./apt_log_history0.sh [OPTIONS]
#Options:
# -f, --upgrades Affiche uniquement les mises à jour
# -i, --installs Affiche uniquement les installations
# -u, --removals Affiche uniquement les suppressions
# -r, --reset Affiche tout (réinitialise le filtre)
# -h, --help Affiche ce message d'aide
# Fonction pour traiter les fichiers
process_apt_history() {
local file="$1"
local filter="${2:-.*}" # Filtre par défaut : tout afficher
echo -e "\033[1;35m\nFichier: ${file##*/}\033[0m"
if [[ "$file" == *.gz ]]; then
zcat "$file"
else
cat "$file"
fi | awk -v filter="$filter" '
/Start-Date:/ {
start_pos = index($0, "Start-Date:") + 11;
date = substr($0, start_pos, 19);
current_date = "\033[1;32m[" date "]\033[0m";
has_matching_action = 0;
}
/Commandline:/ {
cmd = substr($0, index($0, "Commandline:") + 12);
current_cmd = cmd;
}
/Install:|Upgrade:|Remove:|Installation:|Mise à jour:|Suppression:/ {
action = $1;
details = substr($0, index($0, ": ") + 2);
if (action ~ filter) {
if (!has_matching_action) {
print current_date;
if (current_cmd != "") {
printf " \033[33m● Commande: %s\033[0m\n", current_cmd;
}
has_matching_action = 1;
}
# Couleurs
color = "\033[36m"; # Par défaut (bleu cyan)
if (action ~ /Install|Installation/) color = "\033[32m"; # Vert
if (action ~ /Remove|Suppression/) color = "\033[31m"; # Rouge
printf " %s%-12s\033[0m %s\n", color, action, details;
}
}
'
}
# Affichage de l'aide
display_help() {
echo "Usage: $0 [OPTIONS]"
echo "Options:"
echo " -f, --upgrades Affiche uniquement les mises à jour"
echo " -i, --installs Affiche uniquement les installations"
echo " -u, --removals Affiche uniquement les suppressions"
echo " -r, --reset Affiche tout (réinitialise le filtre)"
echo " -h, --help Affiche ce message d'aide"
exit 0
}
# Paramètres
FILTER=".*" # Affiche tout par défaut
# Traitement des options
while getopts "fiurh" opt; do
case $opt in
f) FILTER="Upgrade|Mise à jour";;
i) FILTER="Install|Installation";;
u) FILTER="Remove|Suppression";;
r) FILTER=".*";;
h) display_help;;
*) display_help;;
esac
done
# Affichage
echo -e "\033[1;34m=== HISTORIQUE APT (Filtre: ${FILTER}) ===\033[0m"
# D'abord les archives (.gz)
for f in $(ls -v /var/log/apt/history.log*.gz 2>/dev/null); do
process_apt_history "$f" "$FILTER"
done
# Puis le fichier courant
[ -f "/var/log/apt/history.log" ] && process_apt_history "/var/log/apt/history.log" "$FILTER"