Aller au contenu

« APT » : différence entre les versions

De Marmits Wiki
Aucun résumé des modifications
 
(41 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== Paquets APT ==
== Paquets APT ==
==== Liste des paquets récemment mis à jour ====
Sur Debian (et ses dérivés comme Ubuntu), '''<code>apt</code>''' 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.
<syntaxhighlight lang="bash" line copy>
=== Mise à jour de la liste des paquets ===
ls -lt /var/lib/dpkg/info/*.list | head -n 50
</syntaxhighlight>
 
==== Mise à jour de la liste des paquets ====
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
sudo apt update
sudo apt update
</syntaxhighlight>
</syntaxhighlight>


==== Voir ce qui peut être mis à jour ====
=== Voir ce qui peut être mis à jour ===
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
sudo apt list --upgradable
sudo apt list --upgradable
</syntaxhighlight>
</syntaxhighlight>
==== Installation ====
=== Installation ===
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
sudo apt install --only-upgrade firefox  
sudo apt install --only-upgrade firefox  
</syntaxhighlight>
</syntaxhighlight>


===== Ne gère pas les dépendances =====
==== Ne gère pas les dépendances ====
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
sudo apt upgrade  
sudo apt upgrade  
</syntaxhighlight>
</syntaxhighlight>
===== Gère les dépendances =====
==== Gère les dépendances ====
(permet l'installation de nouveaux paquets pour résoudre les dépendances)
(permet l'installation de nouveaux paquets pour résoudre les dépendances)
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
Ligne 34 : Ligne 30 :
</syntaxhighlight>
</syntaxhighlight>


==== Supprimez tous les paquets devenus obsolètes et qui ne sont plus nécessaires ====
=== Supprimez tous les paquets devenus obsolètes et qui ne sont plus nécessaires ===
Supprime les anciens noyaux installés
Supprime les anciens noyaux installés
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
Ligne 40 : Ligne 36 :
</syntaxhighlight>
</syntaxhighlight>


==== Supprimez le cache des paquets qui ne peuvent plus être téléchargés ====
=== Supprimez le cache des paquets qui ne peuvent plus être téléchargés ===
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
sudo apt autoclean
sudo apt autoclean
</syntaxhighlight>
</syntaxhighlight>
==== Télécharge et installe les dépendances manquantes pour réparer les paquets cassés. ====
 
=== Télécharge et installe les dépendances manquantes pour réparer les paquets cassés. ===
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
sudo apt --fix-broken install
sudo apt --fix-broken install
</syntaxhighlight>
</syntaxhighlight>


==== Termine la configuration des paquets interrompus. ====
=== Affichage des infos d'un paquet ===
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
sudo dpkg --configure -a
apt show firefox
</syntaxhighlight>
Utilisez les deux commandes en combo si nécessaire :
<syntaxhighlight lang="bash" line>
sudo apt --fix-broken install
sudo dpkg --configure -a
</syntaxhighlight>
</syntaxhighlight>


==== voir tous les paquets ====  
=== Recherche de paquets ===
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
dpkg --list
apt search mot-clé
</syntaxhighlight>
</syntaxhighlight>
ou
 
<syntaxhighlight lang="bash" line copy>
 
dpkg --get-selections
=== Termine la configuration des paquets interrompus. ===
</syntaxhighlight>
[[Dpkg#Termine_la_configuration_des_paquets_interrompus.|Voir commande]]
ou
 
=== voir tous les paquets ===
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
apt list --installed
apt list --installed
</syntaxhighlight>
</syntaxhighlight>


==== voir si un paquet est à jour ====  
=== voir si un paquet est à jour ===  
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
apt-cache policy firefox  
apt-cache policy firefox  
</syntaxhighlight>
</syntaxhighlight>


==== compter les paquets installés sur Ubuntu ====
=== compter les paquets installés sur Ubuntu ===
filtre pour ne montrer que les paquets actifs.
<syntaxhighlight lang="bash" line>
<syntaxhighlight lang="bash" line>
sudo dpkg-query -f '${binary:Package}\n' -W | wc -l
# ou
sudo apt list --installed | wc -l
sudo apt list --installed | wc -l
</syntaxhighlight>
</syntaxhighlight>


==== voir si des paquets sont cassés ====
=== voir si des paquets sont cassés ===
<syntaxhighlight lang="bash" line>
<syntaxhighlight lang="bash" line>
apt-get check
sudo 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)
</syntaxhighlight>
</syntaxhighlight>


==== Nettoyer rc ====
-----
<syntaxhighlight lang="bash" line copy>
dpkg -l | awk '/^rc/{print $2}' | xargs -r sudo dpkg -P
</syntaxhighlight>
source:https://www.debian-fr.org/t/paquets-casses-comment-les-lister/16997/5
 
==== Trouver le nom exact des packages de noyau que vous souhaitez désinstaller ====
<syntaxhighlight lang="bash" line copy>
dpkg -l | grep "linux-[a-z]*-"
</syntaxhighlight>
 
==== Rechercher des informations sur les paquets installés ====
<syntaxhighlight lang="bash" line copy>
dpkg-query -l '*curl*'
</syntaxhighlight>


==== Obtenir plus de détails sur un paquet spécifique ====
=== <span style="font-size: 1.2em;">phased => déféré (retardé)</span> ===
<syntaxhighlight lang="bash" line copy>
dpkg-query -s curl
</syntaxhighlight>
 
==== Rechercher des fichiers appartenant à un paquet ====
<syntaxhighlight lang="bash" line copy>
dpkg-query -S curl
</syntaxhighlight>
 
==== Lister tous les fichiers installés par un paquet ====
<syntaxhighlight lang="bash" line copy>
dpkg-query -L curl
</syntaxhighlight>
 
==== 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).  
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).  


===== Calcul du Score de Phase =====  
==== 1 .Calcul du Score de Phase ====  
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
echo $((0x$(cut -c1-16 /etc/machine-id | head -c 8) % 100))
echo $((0x$(cut -c1-16 /etc/machine-id | head -c 8) % 100))
Ligne 138 : Ligne 98 :
<span id="résumé"></span>
<span id="résumé"></span>


===== Résumé =====
==== 2. Résumé ====
{| class="wikitable"
{| class="wikitable"
|-
|-
Ligne 166 : Ligne 126 :
|}
|}


-----
<span id="à-quoi-sert-ce-score"></span>


<span id="à-quoi-sert-ce-score"></span>
==== 3. À Quoi Sert Ce Score ? ====
===== À Quoi Sert Ce Score ? =====


* '''Phased Updates''' : Ubuntu déploie les mises à jour par vagues (ex : 10%, 30%, 50% des machines).<br />
* '''Phased Updates''' : Ubuntu déploie les mises à jour par vagues (ex : 10%, 30%, 50% des machines).<br />
Ligne 178 : Ligne 137 :
** Si la phase est &gt; 64 → Vous devrez attendre.
** Si la phase est &gt; 64 → Vous devrez attendre.


-----
<span id="pourquoi-cette-méthode"></span>


<span id="pourquoi-cette-méthode"></span>
==== 4. Pourquoi Cette Méthode ? ====
===== Pourquoi Cette Méthode ? =====


* '''Déterminisme''' : Le score est '''toujours le même''' pour votre machine (car basé sur <code>machine-id</code>).<br />
* '''Déterminisme''' : Le score est '''toujours le même''' pour votre machine (car basé sur <code>machine-id</code>).<br />
Ligne 187 : Ligne 145 :
* '''Répartition uniforme''' : Les scores sont distribués entre 0 et 99 pour équilibrer le déploiement.
* '''Répartition uniforme''' : Les scores sont distribués entre 0 et 99 pour équilibrer le déploiement.


===== Lister tous les fichiers installés par un paquet =====
==== 5. Lister tous les fichiers <code>phased</code> (old version) ====


<syntaxhighlight lang="bash" line>
<syntaxhighlight lang="bash" line>
Ligne 193 : Ligne 151 :
#!/bin/bash
#!/bin/bash


# Liste des paquets en phased updates
# Liste des paquets en phased updates  
PACKAGES=$(apt list --upgradable | grep -E "*" | cut -d'/' -f1)
PACKAGES=$(apt list --upgradable | grep -E "*" | cut -d'/' -f1)
echo "Checking phased updates"
echo "Checking phased updates"
Ligne 208 : Ligne 166 :
</syntaxhighlight>
</syntaxhighlight>


== Noyau ==
-----
==== Lister tous les paquets liés au noyau installés sur votre système avec la commande suivante ====
 
<syntaxhighlight lang="bash" line copy>
==== 6. Lister tous les fichiers <code>phased</code> (Version améliorée) ====
dpkg --list | grep linux-image
<syntaxhighlight lang="bash" line>
#!/bin/bash
 
: '
============================================================
Script : check-phased-list.sh
Objet  : Générer un rapport clair sur les mises à jour phasées APT Ubuntu
============================================================
 
DESCRIPTION :
Ce script analyse les paquets upgradables signalés par APT et
vérifie s’ils sont soumis au "phasage" (phased updates).
 
Le phasage est une fonctionnalité d’APT qui déploie certaines
mises à jour progressivement (ex: 10%, 20%, ... des machines)
afin de limiter l’impact d’éventuels bugs.
 
Le script :
  1. Récupère la liste des paquets upgradables via
    `apt list --upgradable`.
  2. Pour chaque paquet, interroge `apt-cache show` pour
    extraire le champ `Phased-Update-Percentage`.
  3. Construit une liste fusionnée des paquets concernés,
    en indiquant le pourcentage de phasage appliqué.
  4. Trie et affiche les résultats par ordre alphabétique.
  5. Résume le nombre total de paquets affectés par le phasage.
 
AFFICHAGE :
- Chaque paquet est listé avec son pourcentage de phasage.
- Un résumé final indique le total de paquets concernés.
 
UTILISATION :
  ./rapport-phasage.sh
 
PRÉREQUIS :
- Debian/Ubuntu (ou dérivés) avec apt >= 2.2
- Droits de lecture sur `apt list` et `apt-cache show`
============================================================
'
 
# --- Définition des couleurs pour l'affichage ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'  # Reset couleur (No Color)
 
# --- En-tête ---
echo "=============================================="
echo " 🔍 Rapport sur les mises à jour phasées"
echo "=============================================="
echo
 
# Étape 1 : récupération des paquets upgradables
UPGRADABLE_PKGS=$(apt list --upgradable 2>/dev/null | awk -F/ 'NR>1 {print $1}')
 
# Étape 2 : carte associative pour stocker les pourcentages
declare -A PHASE_MAP
 
for pkg in $UPGRADABLE_PKGS; do
    PERC=$(apt-cache show "$pkg" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}')
    if [ -n "$PERC" ]; then
        PHASE_MAP["$pkg"]="$PERC"
    fi
done
 
# Étape 3 : affichage trié
if [ ${#PHASE_MAP[@]} -eq 0 ]; then
    echo -e " ${GREEN}→ Aucun paquet soumis au phasage${NC}"
else
    for pkg in $(printf "%s\n" "${!PHASE_MAP[@]}" | sort); do
        echo -e "  - ${YELLOW}$pkg${NC} → ${RED}${PHASE_MAP[$pkg]}% en phase${NC}"
    done
    echo
    echo "=============================================="
    echo -e " ✅ ${GREEN}Analyse terminée${NC}"
    echo "  Résumé : ${#PHASE_MAP[@]} paquets concernés par le phasage"
    echo "=============================================="
fi
 
 
</syntaxhighlight>
</syntaxhighlight>
==== Lister les fichiers dans le répertoire /boot pour voir les versions du noyau installées ====
 
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line>
ls -l /boot | grep vmlinuz
chmod +x check_phased_updates.sh
./check_phased_updates.sh
</syntaxhighlight>
</syntaxhighlight>
==== Vérifier quel noyau est actuellement en cours d'utilisation ====
 
-----
 
== Lister toutes les installations (avec filtrage) ==
Pour voir tous les paquets installés manuellement (pas les dépendances automatiques)
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
uname -r
apt-mark showmanual | sort
</syntaxhighlight>
</syntaxhighlight>
==== Voir noyau version ====
 
Pour voir tous les paquets installés automatiques
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
uname -a
apt-mark showauto
</syntaxhighlight>
</syntaxhighlight>


==== Voir noyaux installés ====
-----
 
== Script bash APT historique ==  
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
dpkg -l | awk '!/^rc/ && / linux-(c|g|h|i|lo|m|si|t)/{print $1,$2,$3,$4 | "sort -k3 | column -t"}'
#!/bin/bash
</syntaxhighlight>
# Permet de consulter l'historique APT sur un système debian
<syntaxhighlight lang="bash" line copy>
#Usage: ./apt_log_history0.sh [OPTIONS]
dpkg --get-selections | grep 'linux-.*-v'
#Options:
</syntaxhighlight>
#  -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


==== Lister les paquets de noyau installés et leur taille ====
# Affichage
<syntaxhighlight lang="bash" line copy>
echo -e "\033[1;34m=== HISTORIQUE APT (Filtre: ${FILTER}) ===\033[0m"
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | grep linux-image
</syntaxhighlight>


==== Vérifier l'espace disque utilisé dans /boot  ====
# D'abord les archives (.gz)
<syntaxhighlight lang="bash" line copy>
for f in $(ls -v /var/log/apt/history.log*.gz 2>/dev/null); do
sudo du -sh /boot/*
    process_apt_history "$f" "$FILTER"
</syntaxhighlight>
done


==== Pour obtenir plus de détails sur un paquet de noyau spécifique, y compris sa taille  ====
# Puis le fichier courant
Liste
[ -f "/var/log/apt/history.log" ] && process_apt_history "/var/log/apt/history.log" "$FILTER"
<syntaxhighlight lang="bash" line copy>
dpkg --list | grep linux-image
</syntaxhighlight>
Puis
<syntaxhighlight lang="bash" line copy>
apt show linux-image-X.Y.Z-W-generic
</syntaxhighlight>


==== Supprimer des anciens noyaux ====
Debian propose un script appelé purge-old-kernels qui peut automatiser la suppression des anciens noyaux. Vous pouvez l'installer et l'utiliser comme suit :
<syntaxhighlight lang="bash" line>
sudo apt-get install byobu
sudo purge-old-kernels
</syntaxhighlight>
</syntaxhighlight>
Ce script supprimera automatiquement les anciens noyaux tout en conservant le noyau actuel et un noyau de secours.


== APTITUDE ==
<syntaxhighlight lang="bash" line>
sudo aptitude update
aptitude search '~U'
sudo aptitude upgrade
</syntaxhighlight>
[[Catégorie:Linux]] [[Catégorie:Debian]]
[[Catégorie:Linux]] [[Catégorie:Debian]]

Dernière version du 16 octobre 2025 à 19:52

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 commande

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 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)

#!/bin/bash

: '
============================================================
 Script : check-phased-list.sh
 Objet  : Générer un rapport clair sur les mises à jour phasées APT Ubuntu
============================================================

DESCRIPTION :
Ce script analyse les paquets upgradables signalés par APT et
vérifie s’ils sont soumis au "phasage" (phased updates).

Le phasage est une fonctionnalité d’APT qui déploie certaines
mises à jour progressivement (ex: 10%, 20%, ... des machines)
afin de limiter l’impact d’éventuels bugs.

Le script :
  1. Récupère la liste des paquets upgradables via
     `apt list --upgradable`.
  2. Pour chaque paquet, interroge `apt-cache show` pour
     extraire le champ `Phased-Update-Percentage`.
  3. Construit une liste fusionnée des paquets concernés,
     en indiquant le pourcentage de phasage appliqué.
  4. Trie et affiche les résultats par ordre alphabétique.
  5. Résume le nombre total de paquets affectés par le phasage.

AFFICHAGE :
- Chaque paquet est listé avec son pourcentage de phasage.
- Un résumé final indique le total de paquets concernés.

UTILISATION :
  ./rapport-phasage.sh

PRÉREQUIS :
- Debian/Ubuntu (ou dérivés) avec apt >= 2.2
- Droits de lecture sur `apt list` et `apt-cache show`
============================================================
'

# --- Définition des couleurs pour l'affichage ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'   # Reset couleur (No Color)

# --- En-tête ---
echo "=============================================="
echo " 🔍 Rapport sur les mises à jour phasées"
echo "=============================================="
echo

# Étape 1 : récupération des paquets upgradables
UPGRADABLE_PKGS=$(apt list --upgradable 2>/dev/null | awk -F/ 'NR>1 {print $1}')

# Étape 2 : carte associative pour stocker les pourcentages
declare -A PHASE_MAP

for pkg in $UPGRADABLE_PKGS; do
    PERC=$(apt-cache show "$pkg" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}')
    if [ -n "$PERC" ]; then
        PHASE_MAP["$pkg"]="$PERC"
    fi
done

# Étape 3 : affichage trié
if [ ${#PHASE_MAP[@]} -eq 0 ]; then
    echo -e " ${GREEN}→ Aucun paquet soumis au phasage${NC}"
else
    for pkg in $(printf "%s\n" "${!PHASE_MAP[@]}" | sort); do
        echo -e "  - ${YELLOW}$pkg${NC}${RED}${PHASE_MAP[$pkg]}% en phase${NC}"
    done
    echo
    echo "=============================================="
    echo -e " ✅ ${GREEN}Analyse terminée${NC}"
    echo "   Résumé : ${#PHASE_MAP[@]} paquets concernés par le phasage"
    echo "=============================================="
fi
chmod +x check_phased_updates.sh
./check_phased_updates.sh

Lister toutes les installations (avec filtrage)

Pour voir tous les paquets installés manuellement (pas les dépendances automatiques)

apt-mark showmanual | sort

Pour voir tous les paquets installés automatiques

apt-mark showauto

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"