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 26-12-2021 23:06:45

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

Outil de recherche dans l'historique d'apt

Hello,

Ce sujet fait suite à celui-ci : https://debian-facile.org/viewtopic.php?id=30791

J'ai donc fait un script de recherche dans l'historique d'apt avec un affichage humainement lisible.
Je l'ai appelé ahr (Apt History Research).
Je l'ai placé dans /usr/local/bin en l'ayant rendu exécutable auparavant.

Il nécessite d'avoir gawk installé.

En voici les retours :
    - L'aide :

ahr --help


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 :
    -a, --all               Rechercher dans tout l'historique, même archivé.
                            Imcompatible avec '-z'.

    -c, --command  COMMAND  Rechercher sur la commande COMMAND.

    -d, --date  DATE        Rechercher sur la date DATE affinée avec l'heure.
                            Format : AAAA[-MM[-JJ[ HH[:MM[:SS]]]]]

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

    -t, --type TYPE         Rechercher selon le TYPE, TYPE prend les valeurs :
                              Install, Reinstall, Upgrade, Remove et Purge

    -z, --dezip N           Rechercher dans le fichier archive N :
                              /var/log/apt/history.log.N.gz
                            Imcompatible avec '-a'.

    --apt                   N'afficher que la liste des noms des paquets.
                            Le retour est utilisable par apt ou dpkg.
                            Un nom de paquet par ligne.

    -0                      Seulement avec '--apt'.
                            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®©


    - Un exemple d'utilisation :

ahr -c unattended -d 2021-12-22


Date Début : 2021-12-22  19:10:50
Date Fin   : 2021-12-22  19:11:13
Commande   : /usr/bin/unattended-upgrade
Upgradés :
   xserver-common:amd64 (2:1.20.11-1, 2:1.20.11-1+deb11u1)
1 paquet upgradé



Date Début : 2021-12-22  19:11:21
Date Fin   : 2021-12-22  19:11:35
Commande   : /usr/bin/unattended-upgrade
Upgradés :
   xserver-xorg-core:amd64 (2:1.20.11-1, 2:1.20.11-1+deb11u1)
1 paquet upgradé



Date Début : 2021-12-22  19:11:47
Date Fin   : 2021-12-22  19:12:01
Commande   : /usr/bin/unattended-upgrade
Upgradés :
   xserver-xorg-legacy:amd64 (2:1.20.11-1, 2:1.20.11-1+deb11u1)
1 paquet upgradé
 


    - et le script :

#!/bin/bash

# Nom : ahr       Apt History Research
# Par : Tawal

# Nécessite : gawk (apt install gawk)
# ShellCheck SC1004 assumée.

### Couleurs et Formats Textes
Surb='\e[1m'               # Surbrillance
Ital='\e[3m'               # Italique
Rst='\e[0m'                # Reset

### Nombre de fichiers archivés
z=$(find /var/log/apt -type f -name "his*gz" | wc -l)

### 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}/var/log/apt/history.log.${Surb}N${Rst}.gz${Rst}
                            Imcompatible avec '${Ital}-a${Rst}'.

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

erreur()
{
    if [ "$1" ]
    then
        echo -e "Option '${Surb}-0${Rst}' utilisée sans '${Surb}--apt${Rst}'."
    else
        echo -e "Motif absent ou pas d'utilisation d'une des options '${Surb}-c${Rst}' ou '${Surb}-d${Rst}' ou '${Surb}-t${Rst}'."
    fi
    exit 1
} >&2

opt_err()
{
    echo -e "Option ${Surb}'$1'${Rst} non-reconnue !"
    exit 1
} >&2

test_opt()
{
    if [ "$1" = "opt_az" ] && [ "$opt_a" ] && [ "$opt_z" ]
    then
        echo -e "Options '${Surb}-a${Rst}' et '${Surb}-z${Rst}' incompatibles."
        exit 1
    elif [ "$1" = "opt_z" ]
    then
        if [[ "$2" != [[:digit:]]* ]]
        then
            echo -e "L'argument de l'option ${Surb}'-z'${Rst} doit être un nombre."
            exit 1
        fi
    elif [ "$1" = "opt_t" ]
    then
        if [ "$2" != "Install" ] && [ "$2" != "Reinstall" ] && [ "$2" != "Upgrade" ] && [ "$2" != "Remove" ] && [ "$2" != "Purge" ]
        then
            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}."
            exit 1
        fi
    elif [ "$1" = "opt_d" ]
    then
        shift
        if ! [[ "$*" =~ ^[[: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]))))$ ]]
        then
            echo -e "Date incorrecte : $*"
            exit 1
        fi
    fi
} >&2

dezip()
{
    if [ "$1" = "all" ]
    then
        for ((i=z; i>=1; i--))
        do
            input="$input"$(zcat /var/log/apt/history.log."$i".gz)
        done
        input="$input"$(</var/log/apt/history.log)
    else
        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
    fi
}

### Gestion des Options.
while getopts :ac:d:ht:z:-:0 option
do
    case $option in
        a) opt_a="ON"
           test_opt opt_az
           dezip all
           ;;
        c) opt_c="$OPTARG"
           ;;
        d) opt_d="$OPTARG"
           test_opt opt_d "$opt_d"
           ;;
        z) opt_z="ON"
           test_opt opt_az
           test_opt opt_z "$OPTARG"
           dezip "$OPTARG"
           ;;
        h) usage
           ;;
        t) test_opt opt_t "$OPTARG"
           opt_t="$OPTARG"
           ;;
        0) opt_null="ON"
           ;;
        -) case $OPTARG in
                 all) opt_a="ON"
                      test_opt opt_az
                      dezip all
                      ;;
                 apt) opt_apt="ON"
                      ;;
             command) opt_c="${!OPTIND}"
                      OPTIND=$((OPTIND+1))
                      ;;
                date) opt_d="${!OPTIND}"
                      OPTIND=$((OPTIND+1))
                      ;;
               dezip)
                      opt_z="ON"
                      test_opt opt_az
                      test_opt opt_z "$OPTARG"
                      dezip ${!OPTIND}
                      OPTIND=$((OPTIND+1))
                      ;;
                help) usage
                      ;;
                type) test_opt opt_t ${!OPTIND}
                      opt_t=${!OPTIND}
                      OPTIND=$((OPTIND+1))
                      ;;
                   *) opt_err --"$OPTARG"
                      ;;
           esac
           ;;
        *) opt_err -"$OPTARG"
           ;;
    esac
done
shift $((OPTIND-1))

if [ "$1" ]
then
    rech="$1"
elif [ ! "$opt_c" ] && [ ! "$opt_d" ] && [ ! "$opt_t" ]
then
    erreur
fi

if [ "$opt_null" ] && [ ! "$opt_apt" ]
then
    erreur 2
fi

### Si pas d'option -a ou -z --> création de l'entrée
if [ ! "$input" ]
then
    input=$(</var/log/apt/history.log)
fi


### Corps du programme
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_d && date ~ opt_d && rech && $0 ~ rech && opt_t && $1 ~ opt_t) || \
           (!opt_c && opt_d && date ~ opt_d && rech && $0 ~ rech && opt_t && $1 ~ opt_t) || \
           (!opt_c && !opt_d && rech && $0 ~ rech && opt_t && $1 ~ opt_t) || \
           (opt_c && command ~ opt_c && !opt_d && rech && $0 ~ rech && opt_t && $1 ~ opt_t) || \
           (opt_c && command ~ opt_c && opt_d && date ~ opt_d && !rech && opt_t && $1 ~ opt_t) || \
           (!opt_c && opt_d && date ~ opt_d && !rech && opt_t && $1 ~ opt_t) || \
           (opt_c && command ~ opt_c && !opt_d && !rech && opt_t && $1 ~ opt_t) || \
           (opt_c && command ~ opt_c && opt_d && date ~ opt_d && rech && $0 ~ rech && !opt_t) || \
           (!opt_c && opt_d && date ~ opt_d && rech && $0 ~ rech && !opt_t) || \
           (!opt_c && !opt_d && rech && $0 ~ rech && !opt_t) || \
           (opt_c && command ~ opt_c && !opt_d && rech && $0 ~ rech && !opt_t) || \
           (opt_c && command ~ opt_c && opt_d && date ~ opt_d && !rech && !opt_t) || \
           (!opt_c && opt_d && date ~ opt_d && !rech && !opt_t) || \
           (opt_c && command ~ opt_c && !opt_d && !rech && !opt_t) || \
           (!opt_c && !opt_d && !rech && opt_t && $1 ~ opt_t)) {
               ok1=1
        }
        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) {
                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}
                print "\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
        }
    }
'
<<< "$input"



On retrouve donc les fonctionnalités d'apt-hist (voir lien ci-dessus) avec les commandes :
    - ahr ".*" pour afficher l'historique d'apt non archivé.
    - ahr -a ".*" pour afficher tout l'historique d'apt.
De même avec l'option z.

Voilà, je pense ce script plus utile que le précédent et assez complet dans le type de recherche sur l'historique d'apt.

Ah oui ! la licence est : Faites-en ce que vous voulez !

Edit:
1ère mise à jour :
    - correction du contrôle de l'argument de l'option -t.
    - mise à jour de l'aide.

Edit2:
2ième mise à jour :
    - calcul automatique du nombre de fichiers archivés
    - suppression de la variable modifiable z (nb de fichiers archivés).

Edit3:
Mise à jour du script :
    - ajout du test de la présence de gawk (sortie avec message en cas d'absence), le tout juste après la gestion des options afin de garder l'aide accessible.

Edit:4
Mise à jour du script :
   - ajout des options --apt et -0.
   - extension du format de DATE, possibilité de renseigner tout ou partie de l'heure.
   - mise à jour de l'aide.
   - plus quelques petites réécriture (ça mériterait plus ...).

Dernière modification par Tawal (29-09-2022 17:47:10)


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 27-12-2021 10:58:58

clahor
Membre
Inscription : 05-03-2013

Re : Outil de recherche dans l'historique d'apt

bonjour merci pour ce script

si on place le script ailleurs que dans /usr/local/bin/ ça fonctionne ou pas

dans le dossier personnel j'ai un message d'erreur
ahr.sh: 104: Syntax error: Bad for loop variable

Hors ligne

#3 28-12-2021 06:58:08

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

Re : Outil de recherche dans l'historique d'apt

En fait, pour que le script fonctionne comme une commande, il faut le placer dans un dossier du PATH.
/usr/local/bin est dédié a cela.
Il faut aussi le rendre exécutable (chmod +x nom_du_script).

Étrange ton erreur tout de même, je n'arrive pas à la reproduire.

Edit:
Si tu appelles le script ahr.sh, alors la commande sera ahr.sh options ....

Dernière modification par Tawal (28-12-2021 07:00:19)


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

#4 28-12-2021 17:02:51

clahor
Membre
Inscription : 05-03-2013

Re : Outil de recherche dans l'historique d'apt

j'ai tjrs le meme message d'erreur avec le script pourtant placé au bon endroit......

ça restera un mystère

Hors ligne

#5 28-12-2021 17:38:32

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

Re : Outil de recherche dans l'historique d'apt

Combien as-tu de fichiers d'historique archivés ?
Pour le savoir :

ls -l /var/log/apt/history.log.*.gz



Ensuite, quand tu connais ce nombre, tu modifies la ligne 104 :         for ((i=$z; i>=1; i--)) et tu remplaces $z par ce nombre.


Edit:
Non, je ne crois pas que ça vienne de là.
Mais plutôt de l'interpréteur sh ou bash.
As-tu bien

#!/bin/bash

en première ligne du script ?
Sinon, comment lances-tu ce script ? avec quelle commande exactement ?

Edit2:
Erreur reproduite ainsi (placé dans le dossier du script ahr) :

$ sh ahr -a ".*"
ahr: 104: Syntax error: Bad for loop variable


C'est bien un souci d'interpréteur, sh ne supporte pas cette forme de boucle.
Il faut utiliser bash, d'où le shebang d'ailleurs ...

Dernière modification par Tawal (28-12-2021 18:51:05)


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

#6 28-12-2021 18:46:53

clahor
Membre
Inscription : 05-03-2013

Re : Outil de recherche dans l'historique d'apt

merci pour la réponse

@debian:~$ ls -l /var/log/apt/history.log.*.gz

-rw-r--r-- 1 root root  4939 27 nov.  14:39 /var/log/apt/history.log.1.gz

-rw-r--r-- 1 root root  5917 30 oct.  11:37 /var/log/apt/history.log.2.gz

-rw-r--r-- 1 root root 10211 30 sept. 10:24 /var/log/apt/history.log.3.gz

-rw-r--r-- 1 root root  7453 27 août  12:34 /var/log/apt/history.log.4.gz

-rw-r--r-- 1 root root 22146 30 juil. 12:24 /var/log/apt/history.log.5.gz



Sinon, comment lances-tu ce script ? avec quelle commande exactement ?

sh nom_du_script

Dernière modification par clahor (28-12-2021 18:47:46)

Hors ligne

#7 28-12-2021 18:56:28

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

Re : Outil de recherche dans l'historique d'apt

Place ce script dans /usr/local/bin (il faut des droits root).
Ainsi, ce fichier devient une commande (car /usr/local/bin/ est dans le PATH).
Tu peux tester avec :

nom_du_fichier --help



C'est pour ça que j'ai appelé mon script juste ahr, pas de .sh
Comme ça le mot ahr est une commande chez moi.


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

#8 28-12-2021 19:03:52

clahor
Membre
Inscription : 05-03-2013

Re : Outil de recherche dans l'historique d'apt

merci a toi

ça fonctionne deja mieux  mais petit message d'erreur

@debian:/usr/local/bin$ sudo ahr -d 2021-03

/usr/local/bin/ahr: ligne 192: gawk : commande introuvable

Dernière modification par clahor (28-12-2021 19:05:25)

Hors ligne

#9 28-12-2021 19:49:58

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

Re : Outil de recherche dans l'historique d'apt

Ah oui, j'ai oublié de préciser qu'il nécessite gawk.
Pour y remédier :

apt install gawk


Merci du retour, je l'indique dans le message #1 wink

Edit:
Pas besoin de sudo, ni d'être dans le dossier /usr/local/bin, pour lancer la commande wink
Les droits root n'étaient nécessaires que pour copier le fichier dans /usr/local/bin.

Dernière modification par Tawal (28-12-2021 19:55:05)


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

#10 28-12-2021 22:26:14

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

Re : Outil de recherche dans l'historique d'apt

Mise à jour du script.
Voir #1.

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

#11 29-12-2021 11:14:10

clahor
Membre
Inscription : 05-03-2013

Re : Outil de recherche dans l'historique d'apt

et bien felicitations tu peux aller travailler chez google ils doivent rechercher des dev sous linux

ça fonctionne c'est vrai qu'après on en fait ce qu'on veut

tu as d'autres scripts comme ça????

Hors ligne

#12 29-12-2021 17:46:59

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

Re : Outil de recherche dans l'historique d'apt

merci.gif
Mais hors de question de travailler pour ce genre d'entreprise ...

Script listant les processus utilisant le swap :
https://debian-facile.org/viewtopic.php?id=29947

Script listant les jours fériés d'une année donnée en argument :
https://debian-facile.org/viewtopic.php?id=30920

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

#13 30-12-2021 09:01:18

clahor
Membre
Inscription : 05-03-2013

Re : Outil de recherche dans l'historique d'apt

Merci pour les scripts.....tu utilises beaucoup le dossier temps il faut nettoyer
après?

Hors ligne

#14 30-12-2021 10:52:27

LinuxEveryDay
Membre
Distrib. : Debian GNU/sid x86_64
Noyau : 6.5.0-4-amd64
(G)UI : Metacity (Marco) MATE
Inscription : 28-09-2021

Re : Outil de recherche dans l'historique d'apt

Merci bien Tawal, script très utile pour Sid histoire de suivre les upgrade pour les "desktop-environnement" (gnome41 et mate 1.26 ici).

Juste en passant -> je mets tous les scripts "perso, copier/coller etc..." dans

~/.local/bin

qui est par défault dans $PATH de l'utilisateur courant je crois. Ça permet de ne pas mettre les droits d'éxécution root à tout ce qu'on copie/colle (je parle pas des script de DF mais en général). Si je dis des conneries corriger moi hmm

Dernière modification par LinuxEveryDay (30-12-2021 10:57:04)


Si Mr et Mdm tout le monde sont perdus sous Linux, c’est juste qu’ils ont plus l’habitude d’être libre ;-)

Hors ligne

#15 30-12-2021 11:10:48

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

Re : Outil de recherche dans l'historique d'apt

et hop un de + dans mes notes merci.gif
Tu utilises geany pour faire tes scripts?

Juste en passant -> je mets tous les scripts "perso, copier/coller etc..." dans

~/.local/bin


oue mais c'est parce que tu les veux pour toi tout seul mrgreen.gif

Dernière modification par Croutons (30-12-2021 11:26:17)


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

#16 30-12-2021 12:43:56

LinuxEveryDay
Membre
Distrib. : Debian GNU/sid x86_64
Noyau : 6.5.0-4-amd64
(G)UI : Metacity (Marco) MATE
Inscription : 28-09-2021

Re : Outil de recherche dans l'historique d'apt

Croutons a écrit :


oue mais c'est parce que tu les veux pour toi tout seul mrgreen.gif


c pas faux, en attendant que

 if (user2 == elle me supporte plus de 3 jours)
{
   cp le script dans /home/user2/.local/bin ;
}
else
{
printf("si t'hésite à rappeler, hésite") ;
}
 


*tin out.gif

banané!acid.gif


Si Mr et Mdm tout le monde sont perdus sous Linux, c’est juste qu’ils ont plus l’habitude d’être libre ;-)

Hors ligne

#17 30-12-2021 16:41:46

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

Re : Outil de recherche dans l'historique d'apt

Croutons a écrit :

Tu utilises geany pour faire tes scripts?


Késako ?
Non, j'utilise nano pour les petits scripts et gedit pour les autres.
Des fois, j'utilise aussi shellcheck pour vérifier le script du point de vue syntaxe et cohérence.

merci.gif à vous pour ces retours smile

Edit:

clahor a écrit :

tu utilises beaucoup le dossier temps il faut nettoyer après?


Non, quand j'utilise un fichier temporaire (je le place en général dans /tmp), je fais le ménage avant de quitter le script wink
De plus, le dossier /tmp est nettoyé à chaque démarrage.

Edit2:

LinuxEveryDay a écrit :

Juste en passant -> je mets tous les scripts "perso, copier/coller etc..." dans

~/.local/bin


Personnellement, je fais d'une manière différente.
Tous les scripts pouvant être utile à plusieurs utilisateurs sont placés dans /usr/local/bin. Ils sont ainsi accessibles par tous les utilisateurs (voir remarque de Croutons)
Tous les scripts de configuration de session (démarrge de conky ...), spécifique à un utilisateur etc, sont placés dans /home/$USER/bin.
Mais /home/$USER/bin n'est pas dans le PATH par défaut (tout comme ~/.local/bin il me semble). Il faut donc le rajouter manuellement au PATH, mais une fois fait, je trouve plus pratique de les avoir visibles (lecture et édition plus facile graphiquement et même en ligne de commande : nano ~/bin/script est plus rapide à taper que nano ~/.local/bin/script)

Dernière modification par Tawal (30-12-2021 17:11:36)


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

#18 30-12-2021 20:40:40

cyrille
CA Debian-Facile
Lieu : Nowhere
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : Outil de recherche dans l'historique d'apt

Il nécessite d'avoir gawk installé.


TU peux tester sa présence, par exemple

# Test de la présence des paquets nécessaires

dpkg -s gawk  &> /dev/null

if [ $? -eq 0 ]; then
    echo -e "\ngawk est installé. Continuons.\n"
else
    echo -e "\ngawk n'est pas installé. \n"
    # Ici la procédure à suivre : installation ? Message d'erreur ? Autre
   
fi


wink mes 2 sous

Dernière modification par cyrille (30-12-2021 20:41:42)


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."

Association Debian-Facile | Les cahiers du débutant | ISO Debian-FacilePage perso. sur #df

Hors ligne

#19 30-12-2021 20:54:17

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

Re : Outil de recherche dans l'historique d'apt

Pour tester la présence d'une commande, je préfère :

if ! hash gawk >/dev/null 2>&1
then
     echo "Nécessité d'installer gawk" >&2
     exit 1
fi


La commande hash à l'avantage de "hasher" la commande, elle est plus rapide d'accès ensuite.

Edit:
Je mets à jour le script au #1.
Car c'est vrai que pour un script partagé, il est intéressant de tester et d'informer en cas.

Dernière modification par Tawal (30-12-2021 21:02:47)


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

#20 30-12-2021 21:11:21

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

Re : Outil de recherche dans l'historique d'apt

Mise à jour du script.
Voir message #1, edit3.

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

#21 31-12-2021 11:47:05

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

Re : Outil de recherche dans l'historique d'apt

Tawal a écrit :

Késako ?
Non, j'utilise nano pour les petits scripts et gedit pour les autres.
Des fois, j'utilise aussi shellcheck pour vérifier le script du point de vue syntaxe et cohérence.


Je connais pas shellcheck
Mais depuis que je connais geany je ne fais plus un script sans, ta le bouton exécuté et tu sais de suite le résultat de ton script
Je fais beaucoup d'erreur mais grace a geany ça va vite
regarde voir

apt search geany


j'ai installé les plugins j'en ai activé certain qui me semblait utile
le top c'est que tu peux travailler sur ton script pas longtemps des que tu ouvres geany ils sont devant toi

en vrai le Tawal tu me taquine vilain mrgreen.gif question.gif

Dernière modification par Croutons (31-12-2021 11:50:38)


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

#22 31-12-2021 11:59:07

cyrille
CA Debian-Facile
Lieu : Nowhere
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : Outil de recherche dans l'historique d'apt

En effet, très intéressant "shellcheck", j'ai du taf pour corriger mes scripts wink

"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."

Association Debian-Facile | Les cahiers du débutant | ISO Debian-FacilePage perso. sur #df

Hors ligne

#23 29-09-2022 18:15:12

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

Re : Outil de recherche dans l'historique d'apt

Hello,

Un petit déterrage pour signaler une mise à jour du script. (voir message #1)

Ajout des options --apt et -0 :
   - --apt : ne lister que les noms de paquets (avec identification d'architecture), un nom par ligne.
   - -0 : utiliser le caractère NULL comme séparateur de nom de paquet (utile avec xargs -0 ...).

Extension du paramètre de l'option --date :
   - possibilité d'ajouter l'heure pour affiner la recherche.
   - le format est AAA[-MM[-JJ [HH[:MM[:SS]]]]],
     c'est à dire qu'une date comme "2022-09-11 13" est valide.
     il faut protéger l'espace entre la date et l'heure (guillemets, apostrophes, anti-slash).

Évidemment, mise à jour de l'aide et quelques petites retouches.

Le pourquoi du comment de l'ajout de ces options :
   Ça 2 ou 3 fois que je vois sur les forums un souci avec apt autoremove qui aurait causé des dégâts.
Bien sûr, les aidants les font chercher dans l'historique d'apt pour réinstaller les paquets utiles emportés par "autoremove".
Pour la recherche mon script est clairement utile.
Mais son retour est difficilement exploitable (autrement que par la lecture).
Et c'est là que deviennent intéressante les nouvelles options.
Une fois bien ciblée l'action d'apt (par la date et l'heure et un bout de commande par exemple),
un retour en arrière devient plus simple.
Par exemple (ceci n'est qu'une commande d'exemple) :

ahr -d "2022-09-11 13:34" -c autoremove --apt -0  |  sudo xargs -0 apt install



Edit:
Illustration chez moi :

$ ahr -d "2022-09-11 13:34" -c autoremove
Date Début  :  2022-09-11 13:34:11
Date Fin    :  2022-09-11 13:34:28
Commande    :  apt remove --purge --autoremove firmware-ti-connectivity firmware-atheros firmware-ath9k-htc
Demandeur   :  tawal (1000)
Purgés :
  firmware-ath9k-htc:amd64 (1.4.0-106-gc583009+dfsg1-1)
  firmware-atheros:amd64 (20210315-3)
  firmware-ti-connectivity:amd64 (20210315-3)
3 paquets purgés


$ ahr -d "2022-09-11 13:34" -c autoremove --apt -0 | sudo xargs -0 apt -s install
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait      
Les NOUVEAUX paquets suivants seront installés :
  firmware-ath9k-htc firmware-atheros firmware-ti-connectivity
0 mis à jour, 3 nouvellement installés, 0 à enlever et 0 non mis à jour.
Inst firmware-ath9k-htc (1.4.0-106-gc583009+dfsg1-1 Debian:11.5/stable [all])
Inst firmware-atheros (20210315-3 Debian:11.5/stable [all])
Inst firmware-ti-connectivity (20210315-3 Debian:11.5/stable [all])
Conf firmware-ath9k-htc (1.4.0-106-gc583009+dfsg1-1 Debian:11.5/stable [all])
Conf firmware-atheros (20210315-3 Debian:11.5/stable [all])
Conf firmware-ti-connectivity (20210315-3 Debian:11.5/stable [all])
$

Dernière modification par Tawal (29-09-2022 18:41:25)


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