logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

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 15:25:54

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : 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 [-a] [-h] [-z NOMBRE]

Options :
  -a, --all           Affiche tout l'historique dans l'ordre chronologique.
                      (archives comprises).

  -h, --help          Affiche cette aide et quitter.

  -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 (options a et z).
Sans option, traite le fichier /var/log/apt/history.log.
                                                                  Tawal®©
 



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 -e "Usage :    \033[1m${0##*/} [-a] [-h] [-z NOMBRE]\033[0m"
    echo
    echo "Options :"
    echo "  -a, --all           Affiche tout l'historique dans l'ordre chronologique."
    echo "                      (archives comprises)."
    echo
    echo "  -h, --help          Affiche cette aide et quitter."
    echo
    echo -e "  -z, --dezip \033[1mNOMBRE\033[0m  Dézippe et traite le fichier archive"
    echo -e "                      correspondant au \033[1mNOMBRE\033[0m."
    echo "                      exemple : ${0##*/} -z 1"
    echo -e "                      traite le fichier /var/log/apt/history.log.\033[1m1\033[0m.gz"
    echo
    echo "Affichage humainement lisible de l'historique d'apt."
    echo "Traite aussi les fichiers d'historique archivés (options a et z)."
    echo "Sans option, traite le fichier /var/log/apt/history.log."
    printf "%75s\n" "Tawal®©"
    exit 0
}

opt-err() {
    echo -e "Option \033[1m'$1'\033[0m non-reconnue !" >&2
    exit 1
}

dezip() {
    if [ "$1" = "all" ]
    then
        for ((i=10; i>=1; i--))
        do
            input="$input"$(zcat /var/log/apt/history.log.$i.gz)
        done
        input="$input"$(cat /var/log/apt/history.log)
    elif [[ $1 == [[:digit:]]* ]]
    then
        if [ -e /var/log/apt/history.log.$1.gz ]
        then
            input=$(zcat /var/log/apt/history.log.$1.gz)
        else
            echo "Pas de fichier /var/log/apt/history.log.$1.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
}

while getopts :ahz:-: opt
do
    case $opt in
        a) dezip all
           ;;
        h) usage
           ;;
        z) dezip $OPTARG
           ;;
        -) case $OPTARG in
                all) dezip all
                     ;;
               help) usage
                     ;;
              dezip) OPTARG="${!OPTIND}"
                     OPTIND=$(( OPTIND+1 ))
                     dezip $OPTARG
                     ;;
                  *) opt-err $OPTARG
                     ;;
           esac
           ;;
        *) opt-err $OPTARG
           ;;
    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 ~ /Commandline/) {command=gensub($1" ", "", 1)}
        if ($1 ~ /Requested-By/) {demand=gensub($1" ", "", 1)}
        if ($1~ /End/) {end="Date Fin   : "$2"  "$3; ok=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
                }else if ($1 ~ /Reinstall:/) {
                    Re[e++]=paq
                }
            }
        }
        if (ok==1) {
            print start
            print end
            if (command) {print "Commande   : "command}
            if (demand) {print "Demandeur  : "demand}
            if (0 in I) {
                print "Installés :"
                for (w in I) {
                    if (I[w] ~ /,/) {
                        Itmp[l++]=I[w]
                        continue
                    }
                    print "\t",I[w]
                }
            }
            if (0 in Itmp) {
                for (tmp in Itmp) {
                    print "\t",Itmp[tmp]
                }
            }
            if (0 in U) {
                print "Upgradés :"
                for (x in U) {
                    print "\t",U[x]
                }
            }
            if (0 in R) {
                print "Désinstallés :"
                for (y in R) {
                    print "\t",R[y]
                }
            }
            if (0 in P) {
                print "Purgés :"
                for (z in P) {
                    print "\t",P[z]
                }
            }
            if (0 in Re) {
                print "Réinstallés : "
                for (w in Re) {
                    print "\t",Re[w]
                }
            }
            if (a>1) {s1="s"}else{s1=""}
            if (b>1) {s2="s"}else{s2=""}
            if (c>1) {s3="s"}else{s3=""}
            if (d>1) {s4="s"}else{s4=""}
            if (e>1) {s5="s"}else{s5=""}
            if (a>0) {print a,"paquet"s1" installé"s1}
            if (b>0) {print b,"paquet"s2" upgradé"s2}
            if (c>0) {print c,"paquet"s3" désinstallé"s3}
            if (d>0) {print d,"paquet"s4" purgé"s4}
            if (e>0) {print e,"paquet"s5" réinstallé"s5}
            print "\n"
            delete I; delete U; delete R; delete P; delete Re; delete Itmp
            command=""
            demand=""
            a=0; b=0; c=0; d=0; e=0; ok=0; l=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)

Edit3:
Mise à jour du script :
   - ajout option "-a, -all" : affichage de tout l'historique même archivé.
   - ajout de la catégorie "Réinstallés" pour les paquets.
   - mise à jour de l'aide.

Dernière modification par Tawal (26-12-2021 12:33:53)


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

#2 23-12-2021 23:03:29

tartare
Membre
Inscription : 18-11-2021

Re : Historique apt humainement lisible.

lu,

merci pour ca, je pense bien m'en servir.
tartare

ce n'est pas à la machine de dire à l'homme ce qu'il peut faire, c'est a l'homme de dire a la machine ce qu'elle doit faire

Hors ligne

#3 24-12-2021 08:50:33

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : Historique apt humainement lisible.

Hello
hop hop hop dans mes notes
c'est pas que je regarde souvent l'historique apt mais je garde ton scriptouillage sous le coude smile

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#4 26-12-2021 12:40:41

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Historique apt humainement lisible.

Hello,

Un petit up, car il y a eu une mise à jour du script.
Le plus important, c'est l'ajout de la catégorie "Réinstallés" pour les paquets.
Voir message #1

De plus, j'ai déjà sous la main, un autre script (utilisant celui-ci) de recherche dans l'historique d'apt.
Il est assez complet (recherche sur un motif de paquet, sur la commande déclenchant l'action d'apt, sur la date ...)
Je ne le poste pas encore car j'ai l'intention de rassembler ces 2 scripts pour n'en faire qu'un seul.
À savoir que toutes les fonctionnalités d'apt-hist (mon script au #1) sont déjà accessibles par ce nouveau script de recherche.
À suivre donc ...

Edit:
Je pense que ce nouveau script sera bien plus utile smile

Dernière modification par Tawal (26-12-2021 12:46:54)


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

#5 26-12-2021 13:51:10

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : Historique apt humainement lisible.

Un peu compliqué a comprendre pour moi ton script , me pose une question
else if sa correspond bien a un elif?
sauf que gawk n'accepte pas les elif c'est bien ça? c'est ce que j'ai cru comprendre dans le man a la partie control statements

Dernière modification par Croutons (26-12-2021 13:51:45)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#6 26-12-2021 14:15:33

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Historique apt humainement lisible.

Oui else if correspond à elif en logique.
Quant à gawk (GNU awk), je ne saurais trop dire, le mot "elif" semble accepté mais je ne sais m'en servir.

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

#7 26-12-2021 23:09:07

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : Historique apt humainement lisible.

Re up, pour indiquer que le 2ième script est prêt ici : https://debian-facile.org/viewtopic.php?id=31213
En espérant qu'il n'y ait pas de bugs, mais cela ce passera sur l'autre sujet tongue

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