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 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 :
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®©
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
Et autant le partager
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 !