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
apt list --installed
voir si un paquet est à jour
apt-cache policy firefox
compter les paquets installés sur Ubuntu
filtre pour ne montrer que les paquets actifs.
sudo apt list --installed | wc -l
voir si des paquets sont cassés
sudo apt-get check
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 (old version)
#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
6. Lister tous les fichiers phased (Version améliorée)
#check_phased_updates.sh
#!/bin/bash
# =====================================================
# 🔍 Rapport sur les mises à jour phasées - Fusionné
# =====================================================
# Ce script liste tous les paquets Ubuntu en phase de mise à jour (phased updates).
# Il fusionne les paquets "différés" et "upgradables phasés" pour éviter les doublons,
# et affiche l'état réel de chaque paquet.
# Il gère automatiquement les locales FR/EN pour parser la sortie d'APT.
# =====================================================
echo "=============================================="
echo " 🔍 Rapport sur les mises à jour phasées"
echo "=============================================="
echo
# ==========================
# Couleurs pour la sortie
# ==========================
RED='\033[0;31m' # rouge pour pourcentage
GREEN='\033[0;32m' # vert pour upgradable
YELLOW='\033[1;33m' # jaune pour différé ou paquet
BLUE='\033[0;34m' # bleu pour sections
NC='\033[0m' # reset couleur
# ==========================
# Détection de la langue
# ==========================
# On détecte la locale pour adapter le parsing
LANGUAGE=$(echo $LANG | cut -d_ -f1)
if [ "$LANGUAGE" == "fr" ]; then
REGEX_DEFERRED="Les mises à jour suivantes ont été différées"
REGEX_END="0 mis à jour"
else
REGEX_DEFERRED="The following packages have been kept back"
REGEX_END="0 upgraded"
fi
# ==========================
# 1) Récupérer les paquets différés par phasage
# ==========================
# On simule un full-upgrade pour capturer les paquets différés
DEFERRED=$(apt full-upgrade -s 2>/dev/null | awk "/$REGEX_DEFERRED/{flag=1; next} /$REGEX_END/{flag=0} flag")
# Nettoyage de la sortie pour extraire les noms de paquets
PKGS_DEFERRED=$(echo "$DEFERRED" | tr -d '\n' | sed 's/ /\n/g' | sed 's/^ *//;s/ *$//' | tr '\n' ' ')
# ==========================
# 2) Récupérer les paquets upgradables phasés
# ==========================
UPGRADABLE=$(apt list --upgradable 2>/dev/null | awk -F/ 'NR>1 {print $1}')
# On ne garde que ceux qui ont un pourcentage de phasage
PHASED_UPGRADABLE=""
for PKG in $UPGRADABLE; do
PERC=$(apt-cache show "$PKG" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}')
if [ -n "$PERC" ]; then
PHASED_UPGRADABLE+="$PKG "
fi
done
# ==========================
# 3) Fusionner les listes pour éviter les doublons
# ==========================
declare -A PACKAGES
# Ajouter les paquets différés dans le tableau associatif
for PKG in $PKGS_DEFERRED; do
PERC=$(apt-cache show "$PKG" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}')
PACKAGES["$PKG"]="différé|$PERC"
done
# Ajouter les upgradables phasés seulement si non déjà présent
for PKG in $PHASED_UPGRADABLE; do
PERC=$(apt-cache show "$PKG" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}')
if [ -z "${PACKAGES[$PKG]}" ]; then
PACKAGES["$PKG"]="upgradable|$PERC"
fi
done
# ==========================
# 4) Affichage des résultats
# ==========================
COUNT_DIFF=0
COUNT_UP=0
echo -e "${BLUE}📦 Paquets phasés fusionnés :${NC}"
for PKG in "${!PACKAGES[@]}"; do
STATE=$(echo "${PACKAGES[$PKG]}" | cut -d'|' -f1) # différé / upgradable
PERC=$(echo "${PACKAGES[$PKG]}" | cut -d'|' -f2) # Pourcentage de phasage
# Déterminer la couleur et compter les totaux
if [ "$STATE" == "différé" ]; then
COLOR_STATE="${YELLOW}différé${NC}"
COUNT_DIFF=$((COUNT_DIFF+1))
else
COLOR_STATE="${GREEN}upgradable${NC}"
COUNT_UP=$((COUNT_UP+1))
fi
# Affichage du paquet avec son état et pourcentage
if [ -n "$PERC" ]; then
echo -e " - ${YELLOW}$PKG${NC} → ${RED}$PERC% en phase${NC} (${COLOR_STATE})"
else
echo -e " - ${YELLOW}$PKG${NC} → phasage actif (${COLOR_STATE})"
fi
done
# Totaux
echo
echo " 🔢 Total différés : $COUNT_DIFF"
echo " 🔢 Total upgradables phasés : $COUNT_UP"
echo
echo "=============================================="
echo -e " ✅ ${GREEN}Analyse terminée${NC}"
echo " Résumé : $COUNT_DIFF différés, $COUNT_UP upgradables phasés"
echo "=============================================="
chmod +x check_phased_updates.sh
./check_phased_updates.sh
Script bash APT 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"