Debian Debian-France Debian-Facile Debian-fr.org Debian-fr.xyz Debian ? Communautés

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 10-10-2021 16:25:54

Tawal
Membre
Distrib. : Debian 11 Bullseye
Noyau : Linux 5.10.0-9-amd64
(G)UI : Xfce
Inscription : 25-02-2021

Historique apt humainement lisible.

Hello,

J'ai fait fait un script afin d'afficher l'historique d'apt d'une façon plus humainement lisible.
Surtout au niveau de la liste des paquets.
Je l'ai appelé apt-hist tongue
Et je l'ai placé dans /usr/local/bin et l'ai rendu exécutable bien entendu.
Il nécessite d'avoir gawk installé.

Voici ce que ça donne :

apt-hist --help



Usage :
  apt-hist
  apt-hist -z NOMBRE
  apt-hist -h

Options :
  -h, --help          Affiche cette aide

  -z, --dezip NOMBRE  Dézippe et traite le fichier archive
                      correspondant au NOMBRE.
                      exemple : apt-hist -z 1
                      traite le fichier /var/log/apt/history.log.1.gz

Affichage humainement lisible de l'historique d'apt.
Traite aussi les fichiers d'historique archivés (option z).
Sans option, traite le fichier /var/log/apt/history.log
 



apt-hist


Date Début : 2021-10-02  14:24:27
Date Fin   : 2021-10-02  14:25:24
Commande   : apt install cheese
Installés :
   cheese-common:amd64 (3.38.0-3, automatic)
   cheese:amd64 (3.38.0-3)
   gnome-video-effects:amd64 (0.5.0-1, automatic)
   gstreamer1.0-clutter-3.0:amd64 (3.0.27-2, automatic)
   libcheese-gtk25:amd64 (3.38.0-3, automatic)
   libcheese8:amd64 (3.38.0-3, automatic)
   libclutter-gst-3.0-0:amd64 (3.0.27-2, automatic)
7 paquets installés


Date Début : 2021-10-02  14:48:25
Date Fin   : 2021-10-02  14:48:48
Commande   : /usr/sbin/synaptic
Installés :
   paprefs:amd64 (1.1-2)
   pulseaudio-module-gsettings:amd64 (14.2-2, automatic)
   pulseaudio-module-zeroconf:amd64 (14.2-2, automatic)
3 paquets installés


Date Début : 2021-10-03  11:05:33
Date Fin   : 2021-10-03  11:13:19
Commande   : apt install virtualbox-6.1
Installés :
   libqt5printsupport5:amd64 (5.15.2+dfsg-9, automatic)
   libqt5x11extras5:amd64 (5.15.2-2, automatic)
   libsdl-ttf2.0-0:amd64 (2.0.11-6, automatic)
   virtualbox-6.1:amd64 (6.1.26-145957~Debian~bullseye)
4 paquets installés


Date Début : 2021-10-03  21:25:48
Date Fin   : 2021-10-03  21:26:33
Commande   : apt -y upgrade
Upgradés :
   qemu-system-common:amd64 (1:5.2+dfsg-11, 1:5.2+dfsg-11+deb11u1)
   qemu-system-data:amd64 (1:5.2+dfsg-11, 1:5.2+dfsg-11+deb11u1)
   qemu-system-gui:amd64 (1:5.2+dfsg-11, 1:5.2+dfsg-11+deb11u1)
   qemu-system-x86:amd64 (1:5.2+dfsg-11, 1:5.2+dfsg-11+deb11u1)
   qemu-utils:amd64 (1:5.2+dfsg-11, 1:5.2+dfsg-11+deb11u1)
5 paquets upgradés


Date Début : 2021-10-05  18:01:11
Date Fin   : 2021-10-05  18:03:45
Commande   : apt remove --purge --autoremove virtualbox-6.1
Purgés :
   libqt5printsupport5:amd64 (5.15.2+dfsg-9)
   libqt5x11extras5:amd64 (5.15.2-2)
   libsdl-ttf2.0-0:amd64 (2.0.11-6)
   virtualbox-6.1:amd64 (6.1.26-145957~Debian~bullseye)
4 paquets purgés


Date Début : 2021-10-05  18:15:26
Date Fin   : 2021-10-05  18:25:03
Commande   : apt install virtualbox-6.1
Installés :
   libqt5printsupport5:amd64 (5.15.2+dfsg-9, automatic)
   libqt5x11extras5:amd64 (5.15.2-2, automatic)
   libsdl-ttf2.0-0:amd64 (2.0.11-6, automatic)
   virtualbox-6.1:amd64 (6.1.26-145957~Debian~bullseye)
4 paquets installés


Date Début : 2021-10-06  21:17:11
Date Fin   : 2021-10-06  21:17:49
Commande   : apt -y upgrade
Upgradés :
   firefox-esr-l10n-fr:amd64 (78.14.0esr-1~deb11u1, 78.15.0esr-1~deb11u1)
   firefox-esr:amd64 (78.14.0esr-1~deb11u1, 78.15.0esr-1~deb11u1)
2 paquets upgradés


Date Début : 2021-10-09  00:54:33
Date Fin   : 2021-10-09  00:55:11
Commande   : apt install smart-notifier
Installés :
   smart-notifier:amd64 (0.28-7)
1 paquets installés


Date Début : 2021-10-09  01:33:30
Date Fin   : 2021-10-09  01:34:05
Commande   : apt install mutt
Installés :
   libtokyocabinet9:amd64 (1.4.48-13, automatic)
   mutt:amd64 (2.0.5-4.1)
2 paquets installés


Date Début : 2021-10-09  14:18:02
Date Fin   : 2021-10-09  14:26:17
Commande   : apt -y upgrade
Installés :
   linux-headers-5.10.0-9-amd64:amd64 (5.10.70-1, automatic)
   linux-headers-5.10.0-9-common:amd64 (5.10.70-1, automatic)
   linux-image-5.10.0-9-amd64:amd64 (5.10.70-1, automatic)
Upgradés :
   base-files:amd64 (11.1, 11.1+deb11u1)
   krb5-locales:amd64 (1.18.3-6, 1.18.3-6+deb11u1)
   libatk-wrapper-java-jni:amd64 (0.38.0-2, 0.38.0-2+deb11u1)
   libatk-wrapper-java:amd64 (0.38.0-2, 0.38.0-2+deb11u1)
   libbluray2:amd64 (1:1.2.1-4, 1:1.2.1-4+deb11u1)
   libc-bin:amd64 (2.31-13, 2.31-13+deb11u2)
   libc-dev-bin:amd64 (2.31-13, 2.31-13+deb11u2)
   libc-devtools:amd64 (2.31-13, 2.31-13+deb11u2)
   libc-l10n:amd64 (2.31-13, 2.31-13+deb11u2)
   libc6-dev:amd64 (2.31-13, 2.31-13+deb11u2)
   libc6:amd64 (2.31-13, 2.31-13+deb11u2)
   libc6:i386 (2.31-13, 2.31-13+deb11u2)
   libcpupower1:amd64 (5.10.46-5, 5.10.70-1)
   libgssapi-krb5-2:amd64 (1.18.3-6, 1.18.3-6+deb11u1)
   libgssapi-krb5-2:i386 (1.18.3-6, 1.18.3-6+deb11u1)
   libhdf5-103-1:amd64 (1.10.6+repack-4, 1.10.6+repack-4+deb11u1)
   libhdf5-hl-100:amd64 (1.10.6+repack-4, 1.10.6+repack-4+deb11u1)
   libk5crypto3:amd64 (1.18.3-6, 1.18.3-6+deb11u1)
   libk5crypto3:i386 (1.18.3-6, 1.18.3-6+deb11u1)
   libkrb5-3:amd64 (1.18.3-6, 1.18.3-6+deb11u1)
   libkrb5-3:i386 (1.18.3-6, 1.18.3-6+deb11u1)
   libkrb5support0:amd64 (1.18.3-6, 1.18.3-6+deb11u1)
   libkrb5support0:i386 (1.18.3-6, 1.18.3-6+deb11u1)
   libmariadb3:amd64 (1:10.5.11-1, 1:10.5.12-0+deb11u1)
   libpam-modules-bin:amd64 (1.4.0-9, 1.4.0-9+deb11u1)
   libpam-modules:amd64 (1.4.0-9, 1.4.0-9+deb11u1)
   libpam-runtime:amd64 (1.4.0-9, 1.4.0-9+deb11u1)
   libpam0g:amd64 (1.4.0-9, 1.4.0-9+deb11u1)
   libperl5.32:amd64 (5.32.1-4+deb11u1, 5.32.1-4+deb11u2)
   libperl5.32:i386 (5.32.1-4+deb11u1, 5.32.1-4+deb11u2)
   libpmem1:amd64 (1.10-2, 1.10-2+deb11u1)
   libpq5:amd64 (13.3-1, 13.4-0+deb11u1)
   libslirp0:amd64 (4.4.0-1, 4.4.0-1+deb11u2)
   libspeechd2:amd64 (0.10.2-2, 0.10.2-2+deb11u1)
   linux-compiler-gcc-10-x86:amd64 (5.10.46-5, 5.10.70-1)
   linux-cpupower:amd64 (5.10.46-5, 5.10.70-1)
   linux-headers-amd64:amd64 (5.10.46-5, 5.10.70-1)
   linux-image-amd64:amd64 (5.10.46-5, 5.10.70-1)
   linux-kbuild-5.10:amd64 (5.10.46-5, 5.10.70-1)
   linux-libc-dev:amd64 (5.10.46-5, 5.10.70-1)
   locales:amd64 (2.31-13, 2.31-13+deb11u2)
   mariadb-common:amd64 (1:10.5.11-1, 1:10.5.12-0+deb11u1)
   perl-base:amd64 (5.32.1-4+deb11u1, 5.32.1-4+deb11u2)
   perl-modules-5.32:amd64 (5.32.1-4+deb11u1, 5.32.1-4+deb11u2)
   perl:amd64 (5.32.1-4+deb11u1, 5.32.1-4+deb11u2)
   python3-speechd:amd64 (0.10.2-2, 0.10.2-2+deb11u1)
   rsync:amd64 (3.2.3-4, 3.2.3-4+deb11u1)
   shellcheck:amd64 (0.7.1-1, 0.7.1-1+deb11u1)
   speech-dispatcher-audio-plugins:amd64 (0.10.2-2, 0.10.2-2+deb11u1)
   speech-dispatcher-espeak-ng:amd64 (0.10.2-2, 0.10.2-2+deb11u1)
   speech-dispatcher:amd64 (0.10.2-2, 0.10.2-2+deb11u1)
3 paquets installés
51 paquets upgradés

 



Le script :

#!/bin/bash

# Nom : apt-hist
# Par : Tawal

# Nécessite : gawk (apt install gawk)

usage() {
    echo
    echo "Usage :"
    echo "  ${0##*/}"
    echo "  ${0##*/} -z NOMBRE"
    echo "  ${0##*/} -h"
    echo
    echo "Options :"
    echo "  -h, --help          Affiche cette aide"
    echo
    echo "  -z, --dezip NOMBRE  Dézippe et traite le fichier archive"
    echo "                      correspondant au NOMBRE."
    echo "                      exemple : ${0##*/} -z 1"
    echo "                      traite le fichier /var/log/apt/history.log.1.gz"
    echo
    echo "Affichage humainement lisible de l'historique d'apt."
    echo "Traite aussi les fichiers d'historique archivés (option z)."
    echo "Sans option, traite le fichier /var/log/apt/history.log"
    echo
    exit 0
}

opt-err() {
    echo "Option non-reconnue !" >&2
    exit 1
}

dezip() {
    if [[ $OPTARG == [[:digit:]]* ]]
    then
        if [ -e /var/log/apt/history.log.$OPTARG.gz ]
        then
            input=$(zcat /var/log/apt/history.log.$OPTARG.gz)
        else
            echo "Pas de fichier /var/log/apt/history.log.$OPTARG.gz" >&2
            exit 1
        fi
    else
        echo -e "L'argument de l'option \033[1m'z'\033[0m doit être un nombre." >&2
        exit 1
    fi
}

OPTERR=0
while getopts hz:-: opt
do
    case $opt in
        h) usage
           ;;
        z) dezip
           ;;
        -) case $OPTARG in
               help) usage
                     ;;
              dezip) OPTARG="${!OPTIND}"
                     OPTIND=$(( OPTIND+1 ))
                     dezip
                     ;;
                  *) opt-err
                     ;;
           esac
           ;;
        *) opt-err
           ;;
    esac
done

if [ $# -eq 0 ]
then
    input=$(cat /var/log/apt/history.log)
fi

gawk '
    BEGIN {
        PROCINFO["sorted_in"]="@val_str_asc"
    }
    {
        if ($1 ~/Start/) {start="Date Début : "$2"  "$3; ok=0}
        if ($1~ /End/) {end="Date Fin   : "$2"  "$3; ok=1}
        if ($1 ~ /Commandline/) {command=gensub($1" ", "", 1)}
        for (v=2; v<=NF-1; v++) {
            if ($v !~ /,/) {
                if ($(v+2) ~ /)/) {
                    der=gensub(",", "", 1, $(v+2))
                    paq=$v" "$(v+1)" "der
                }else{
                    pre=gensub(",", "", 1, $(v+1))
                    paq=$v" "pre
                }
                if ($1 ~ /Install:/) {
                    I[a++]=paq
                }else if ($1 ~ /Upgrade:/) {
                    U[b++]=paq
                }else if ($1 ~ /Remove:/) {
                    R[c++]=paq
                }else if ($1 ~ /Purge:/) {
                    P[d++]=paq
                }
            }
        }
        if (ok==1) {
            print start
            print end
            if (command) {print "Commande   : "command}
            if (0 in I) {
                print "Installés :"
                for (w in I) {
                    print "\t",I[w]
                    f++
                }
            }
            if (0 in U) {
                print "Upgradés :"
                for (x in U) {
                    print "\t",U[x]
                    g++
                }
            }
            if (0 in R) {
                print "Désinstallés :"
                for (y in R) {
                    print "\t",R[y]
                    h++
                }
            }
            if (0 in P) {
                print "Purgés :"
                for (z in P) {
                    print "\t",P[z]
                    i++
                }
            }
            if (f>0) {print f,"paquets installés"}
            if (g>0) {print g,"paquets upgradés"}
            if (h>0) {print h,"paquets désinstallés"}
            if (i>0) {print i,"paquets purgés"}
            print "\n"
            delete I; delete U; delete R; delete P
            command=""
            a=0; b=0; c=0; d=0; f=0; g=0; h=0; i=0; ok=0
        }
    }
'
<<< $input



Les listes des paquets sont triées par ordre alphabétique. Et j'ai gardé le numéro de version remplacé et remplaçant.
Bref, comme le dit le titre, c'est humainement plus lisible.

Ce n"est pas d'une hyper grande utilité mais je me suis bien amusé à le faire big_smile
Et autant le partager wink

Edit:
Mise à jour du script :
   - Traduction de Start-Date en Date Début et End-Date en Date Fin
   - Alignement des dates et de la commande

Edit2:
Simplification du script (partie gawk)

Dernière modification par Tawal (10-10-2021 20:58:41)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

Pied de page des forums