Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ceci est une ancienne révision du document !
Apt History Research - ahr Usage :
ahr [-a | -z N] [--apt [-0]] [-c COMMAND] [-d DATE] [-t TYPE] MOTIF ahr -c COMMAND [-a | -z N] [--apt [-0]] [-d DATE] [-t TYPE] [MOTIF] ahr -d DATE [-a | -z N] [--apt [-0]] [-c COMMAND] [-t TYPE] [MOTIF] ahr -t TYPE [-a | -z N] [--apt [-0]] [-c COMMAND] [-d DATE] [MOTIF]
Outil de recherche dans l'historique d'apt. Recheche sur MOTIF ou COMMAND ou DATE ou TYPE. Si plusieurs champs de recherche sont indiqués, alors applique un ET.
Options :
Imcompatible avec '-z'.
Format : AAAA[-MM[-JJ[ HH[:MM[:SS]]]]]
Install, Reinstall, Upgrade, Remove et Purge
/var/log/apt/history.log.N.gz
Imcompatible avec '-a'.
Le retour est utilisable par apt ou dpkg.
Un nom de paquet par ligne.
Utiliser le caractère NULL pour séparateur
de nom de paquet et pas le retour à la ligne.
MOTIF est une partie ou un nom exact de paquet. COMMAND est une partie ou la commande appelant l'action d'apt. DATE est une partie ou la date de début de l'action d'apt. TYPE est le type d'action d'apt.
Tawal®©</code>
(mis à jour le 10/03/2023)
#!/bin/bash # Nom : ahr Apt History Research # # Par : Tawal # # Nécessite : gawk (apt install gawk) # version=2023-03-10 ### Répertoire des logs d'apt (personnalisable) apt_folder="/var/log/apt" ### Formats Textes Surb='\e[1m' # Surbrillance Ital='\e[3m' # Italique Rst='\e[m' # Reset ### Expressions régulières # Entier (option -z) rgx_int="^[[:digit:]]+$" # Format de DATE (option -d.) rgx_date="^[[:digit:]]{4}($|-(0[1-9]|1[0-2])($|-(0[1-9]|[1-2][0-9]|3[0-1])($| ([0-1][0-9]|2[0-3])($|:[0-5][0-9]))))$" ### Fonctions usage() { echo -e "Apt History Research - ahr Usage : ${Surb}${0##*/} [-a | -z N] [--apt [-0]] [-c COMMAND] [-d DATE] [-t TYPE] MOTIF${Rst} ${Surb}${0##*/} -c COMMAND [-a | -z N] [--apt [-0]] [-d DATE] [-t TYPE] [MOTIF]${Rst} ${Surb}${0##*/} -d DATE [-a | -z N] [--apt [-0]] [-c COMMAND] [-t TYPE] [MOTIF]${Rst} ${Surb}${0##*/} -t TYPE [-a | -z N] [--apt [-0]] [-c COMMAND] [-d DATE] [MOTIF]${Rst} Outil de recherche dans l'historique d'apt. Recheche sur ${Surb}MOTIF${Rst} ou ${Surb}COMMAND${Rst} ou ${Surb}DATE${Rst} ou ${Surb}TYPE${Rst}. Si plusieurs champs de recherche sont indiqués, alors applique un ET. Options : -a, --all Rechercher dans tout l'historique, même archivé. Imcompatible avec '${Ital}-z${Rst}'. -c, --command ${Surb}COMMAND${Rst} Rechercher sur la commande ${Surb}COMMAND${Rst}. -d, --date ${Surb}DATE${Rst} Rechercher sur la date ${Surb}DATE${Rst} affinée avec l'heure. Format : ${Surb}AAAA[-MM[-JJ[ HH[:MM[:SS]]]]]${Rst} -h, --help Afficher cette aide et quitter. -t, --type ${Surb}TYPE${Rst} Rechercher selon le ${Surb}TYPE${Rst}, ${Surb}TYPE${Rst} prend les valeurs : ${Surb}Install${Rst}, ${Surb}Reinstall${Rst}, ${Surb}Upgrade${Rst}, ${Surb}Remove${Rst} et ${Surb}Purge${Rst} -z, --dezip ${Surb}N${Rst} Rechercher dans le fichier archive ${Surb}N${Rst} : ${Ital}$apt_folder/history.log.${Surb}N${Rst}.gz${Rst} Imcompatible avec '${Ital}-a${Rst}'. -v, --version Afficher la version et quitter. --apt N'afficher que la liste des noms des paquets. Le retour est utilisable par ${Ital}apt${Rst} ou ${Ital}dpkg${Rst}. Un nom de paquet par ligne. -0 Seulement avec '${Ital}--apt${Rst}'. Utiliser le caractère NULL pour séparateur de nom de paquet et pas le retour à la ligne. ${Surb}MOTIF${Rst} est une partie ou un nom exact de paquet. ${Surb}COMMAND${Rst} est une partie ou la commande appelant l'action d'apt. ${Surb}DATE${Rst} est une partie ou la date de début de l'action d'apt. ${Surb}TYPE${Rst} est le type d'action d'apt." printf "%80s\n" "Tawal®©" exit 0 } version() { echo "$version" exit } erreur() { echo -n "${0##*/} : " [ "$1" = "log" ] && echo -e "Le fichier '$apt_folder/history.log' n'existe pas." [ "$1" = "zip" ] && echo -e "Le fichier '$apt_folder/history.log.$2.gz' n'existe pas." [ "$1" = "opt" ] && echo -e "Option ${Surb}'$2'${Rst} non-reconnue." [ "$1" = "opt0" ] && echo -e "Option '${Surb}-0${Rst}' utilisée sans '${Surb}--apt${Rst}'." [ "$1" = "motif" ] && echo -e "Motif absent ou pas d'utilisation d'une des options '${Surb}-c${Rst}' ou '${Surb}-d${Rst}' ou '${Surb}-t${Rst}'." [ "$1" = "opt_az" ] && echo -e "Options '${Surb}-a${Rst}' et '${Surb}-z${Rst}' incompatibles." [ "$1" = "opt_z" ] && echo -e "L'argument de l'option ${Surb}'-z'${Rst} doit être un nombre." [ "$1" = "opt_t" ] && echo -e "L'option ${Surb}-t${Rst} ne prend que les mots ${Surb}Install${Rst}, ${Surb}Reinstall${Rst}, ${Surb}Upgrade${Rst}, ${Surb}Remove${Rst} et ${Surb}Purge${Rst}." [ "$1" = "opt_d" ] && echo -e "Date incorrecte : ${*:2}" exit 1 } >&2 test_opt() { [ "$1" = "opt_t" ] && [ "$2" != "Install" ] && \ [ "$2" != "Remove" ] && [ "$2" != "Upgrade" ] && \ [ "$2" != "Reinstall" ] && [ "$2" != "Purge" ] && return 1 [ "$1" = "opt_d" ] && ! [[ "$2" =~ $rgx_date ]] && return 1 [ "$1" = "opt_z" ] && ! [[ "$2" =~ $rgx_int ]] && return 1 return 0 } input2treat() { local f n z zap="$1" declare -a LogFich shift if [ "$1" = "all" ] then z=$(find "$apt_folder" -type f -name "his*gz" | wc -l) for f in "$apt_folder"/hist*gz do n="${f%.*}"; n="${n##*.}" LogFich[$((z-n))]="$f" done for f in "${LogFich[@]}" do zcat "$f" done ((zap)) && cat "$apt_folder"/history.log elif [ "$1" = "one" ] then zcat "$apt_folder"/history.log."$2".gz else cat "$apt_folder"/history.log fi } ### Gestion des Options. shopt -s extglob nullglob while getopts :ac:d:ht:vz:-:0 option do case $option in a) opt_a="on" [ "$opt_z" ] && erreur opt_az dezip_type="all" ;; c) opt_c="$OPTARG" ;; d) opt_d="$OPTARG" test_opt opt_d "$opt_d" || erreur opt_d "$opt_d" ;; z) opt_z="on" [ "$opt_a" ] && erreur opt_az test_opt opt_z "$OPTARG" || erreur opt_z dezip_type="one" dezip_nb="$OPTARG" ;; h) usage ;; t) opt_t="$OPTARG" test_opt opt_t "$opt_t" || erreur opt_t ;; v) version ;; 0) opt_null="on" ;; -) case $OPTARG in all) opt_a="on" [ "$opt_z" ] && erreur opt_az dezip_type="all" ;; apt) opt_apt="on" ;; command) opt_c="${!OPTIND}" OPTIND=$((OPTIND+1)) ;; date) opt_d="${!OPTIND}" test_opt opt_d "$opt_d" || erreur opt_d OPTIND=$((OPTIND+1)) ;; dezip) opt_z="on" [ "$opt_a" ] && erreur opt_az test_opt opt_z ${!OPTIND} || erreur opt_z dezip_type="one" dezip_nb=${!OPTIND} OPTIND=$((OPTIND+1)) ;; help) usage ;; type) opt_t=${!OPTIND} test_opt opt_t "$opt_t" || erreur opt_t OPTIND=$((OPTIND+1)) ;; version) version ;; *) erreur opt --"$OPTARG" ;; esac ;; *) erreur opt -"$OPTARG" ;; esac done shift $((OPTIND-1)) if [ "$1" ] then rech="$1" elif [ ! "$opt_c" ] && [ ! "$opt_d" ] && [ ! "$opt_t" ] then erreur motif fi if [ "$opt_null" ] && [ ! "$opt_apt" ] then erreur opt0 fi if [ "$opt_z" ] then [ -e "$apt_folder"/history.log."$dezip_nb".gz ] || erreur zip "$dezip_nb" else if ! [ -e "$apt_folder"/history.log ] then if [ "$opt_a" ] then zap=1 else erreur log fi fi fi ### Corps du programme # shellcheck disable=SC1004 gawk -vrech="$rech" -vopt_c="$opt_c" -vopt_d="$opt_d" -vopt_t="$opt_t" -vapt="$opt_apt" -vnull="$opt_null" ' BEGIN { PROCINFO["sorted_in"]="@val_str_asc" } { if ($1 ~/Start/) { start="Date Début : "$2" "$3 date=$2" "$3 ok=0 next } if ($1 ~ /Commandline/) { command=gensub($1" ", "", 1) next } if ($1 ~ /Requested-By/) { demand=gensub($1" ", "", 1) next } if ($1~ /End/) { end="Date Fin : "$2" "$3 ok=1 } if (opt_c && command ~ opt_c) {opt_c_ok=1} if (opt_d && date ~ opt_d) {opt_d_ok=1} if (opt_t && $1 ~ opt_t) {opt_t_ok=1} if (rech && $0 ~ rech) {rech_ok=1} if ((opt_c_ok && opt_d_ok && rech_ok && opt_t_ok) || \ (!opt_c && opt_d_ok && rech_ok && opt_t_ok) || \ (!opt_c && !opt_d && rech_ok && opt_t_ok) || \ (opt_c_ok && !opt_d && rech_ok && opt_t_ok) || \ (opt_c_ok&& opt_d_ok && !rech && opt_t_ok) || \ (!opt_c && opt_d_ok && !rech && opt_t_ok) || \ (opt_c_ok && !opt_d && !rech && opt_t_ok) || \ (opt_c_ok && opt_d_ok && rech_ok && !opt_t) || \ (!opt_c && opt_d_ok && rech_ok && !opt_t) || \ (!opt_c && !opt_d && rech_ok && !opt_t) || \ (opt_c_ok && !opt_d && rech_ok && !opt_t) || \ (opt_c_ok && opt_d_ok && !rech && !opt_t) || \ (!opt_c && opt_d_ok && !rech && !opt_t) || \ (opt_c_ok && !opt_d && !rech && !opt_t) || \ (!opt_c && !opt_d && !rech && opt_t_ok)) { ok1=1 } opt_c_ok=0; opt_d_ok=0; opt_t_ok=0; rech_ok=0 if (ok1) { for (v=2; v<=NF-1; v++) { if ($v !~ /,/) { if (apt) { paq=$v }else{ 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 && ok1) { if (!apt) { printf("\n") print start print end if (command) {print "Commande : "command} if (demand) {print "Demandeur : "demand} } if (0 in I) { if (!apt) {print "Installés :"} for (w in I) { if (I[w] ~ /,/) { Itmp[l++]=I[w] continue } if (!apt) {printf("\t")} printf(I[w]) if (null) {printf("\0")}else{printf("\n")} } } if (0 in Itmp) { for (tmp in Itmp) { if (!apt) {printf("\t")} printf(Itmp[tmp]) if (null) {printf("\0")}else{printf("\n")} } } if (0 in U) { if (!apt) {print "Upgradés :"} for (x in U) { if (!apt) {printf("\t")} printf(U[x]) if (null) {printf("\0")}else{printf("\n")} } } if (0 in R) { if (!apt) {print "Désinstallés :"} for (y in R) { if (!apt) {printf("\t")} printf(R[y]) if (null) {printf("\0")}else{printf("\n")} } } if (0 in P) { if (!apt) {print "Purgés :"} for (z in P) { if (!apt) {printf("\t")} printf(P[z]) if (null) {printf("\0")}else{printf("\n")} } } if (0 in Re) { if (!apt) {print "Réinstallés : "} for (w in Re) { if (!apt) {printf("\t")} printf(Re[w]) if (null) {printf("\0")}else{printf("\n")} } } if (!apt) { 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} printf("\n") } delete I; delete U; delete R; delete P; delete Re; delete Itmp command="" date="" demand="" a=0; b=0; c=0; d=0; e=0; ok=0; ok1=0; l=0 } } ' < <(input2treat "$zap" "$dezip_type" "$dezip_nb")
ahr youtube-dl
Date Début : 2023-03-02 09:55:13 Date Fin : 2023-03-02 09:55:57 Commande : apt -t bullseye-backports install youtube-dl Demandeur : tawal (1000) Upgradés : youtube-dl:amd64 (2021.06.06-1, 2021.12.17-1~bpo11+1) 1 paquet upgradé
ahr -ad 2023-03
Date Début : 2023-03-01 22:28:53 Date Fin : 2023-03-01 22:29:14 Commande : apt purge linux-image-5.10.0-19-amd64 Demandeur : tawal (1000) Purgés : linux-image-5.10.0-19-amd64:amd64 () 1 paquet purgé Date Début : 2023-03-02 09:47:51 Date Fin : 2023-03-02 09:49:38 Commande : apt install yt-dlp Demandeur : tawal (1000) Installés : yt-dlp:amd64 (2023.02.17-1~bpo11+1) python3-brotli:amd64 (1.0.9-2+b2, automatic) python3-mutagen:amd64 (1.45.1-2, automatic) python3-pycryptodome:amd64 (3.9.7+dfsg1-1+b2, automatic) python3-websockets:amd64 (8.1-1, automatic) 5 paquets installés Date Début : 2023-03-02 09:55:13 Date Fin : 2023-03-02 09:55:57 Commande : apt -t bullseye-backports install youtube-dl Demandeur : tawal (1000) Upgradés : youtube-dl:amd64 (2021.06.06-1, 2021.12.17-1~bpo11+1) 1 paquet upgradé Date Début : 2023-03-03 16:14:48 Date Fin : 2023-03-03 16:15:43 Commande : apt install gnustep-base-runtime Demandeur : tawal (1000) Installés : gnustep-base-runtime:amd64 (1.27.0-3) gnustep-base-common:amd64 (1.27.0-3, automatic) gnustep-common:amd64 (2.8.0-1, automatic) libgnustep-base1.27:amd64 (1.27.0-3, automatic) libobjc4:amd64 (10.2.1-6, automatic) 5 paquets installés Date Début : 2023-03-03 21:20:23 Date Fin : 2023-03-03 21:20:54 Commande : apt install parole Demandeur : tawal (1000) Installés : parole:amd64 (4.16.0-1) 1 paquet installé Date Début : 2023-03-03 22:08:48 Date Fin : 2023-03-03 22:09:42 Commande : apt install /home/tawal/Téléchargements/yt-dlp_2023.02.17-1_all.deb Demandeur : tawal (1000) Upgradés : yt-dlp:amd64 (2023.02.17-1~bpo11+1, 2023.02.17-1) 1 paquet upgradé Date Début : 2023-03-03 22:38:04 Date Fin : 2023-03-03 22:38:31 Commande : apt remove --purge yt-dlp Demandeur : tawal (1000) Purgés : yt-dlp:amd64 (2023.02.17-1) 1 paquet purgé Date Début : 2023-03-03 22:39:03 Date Fin : 2023-03-03 22:39:34 Commande : apt install yt-dlp Demandeur : tawal (1000) Installés : yt-dlp:amd64 (2023.02.17-1~bpo11+1) 1 paquet installé Date Début : 2023-03-04 11:01:19 Date Fin : 2023-03-04 11:01:53 Commande : apt install weechat-doc Demandeur : tawal (1000) Installés : weechat-doc:amd64 (3.0-1+deb11u1) 1 paquet installé