Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr 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 17-11-2022 19:49:26

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

[résolu] Comment afficher la date du dernier upgrade système ?

Bonjour,

Je souhaite ajouter à mon conky la date à laquelle j'ai effectué mon dernier upgrade du système (histoire de savoir où j'en suis car je n'ai pas d'alerte pour me dire si il y a des mises à jours disponible. Je dois donc vérifier manuellement et cette petite aide me dira à quand remonte la dernière mise à jour).

Je sais que l'information est disponible dans le fichier /var/log/apt/history.log (log du mois en cours uniquement d'après les dates affichées).
Je me demande d'ailleurs comment le savoir si j'ai 1 mois ou + de retard dans mes upgrade...

Voilà ce que j'ai essayé:
Comment afficher la date de la dernière commande "apt-get upgrade" effectuée.

Je pensais pouvoir faire un simple

tail -1 /var/log/apt/history.log

Mais non, car il y a potentiellement des paquets installés hors ceux du système ensuite.


En prenant en compte cette caractéristique et si j'essaye de traduire, ça donne ceci
# 1. Chercher toutes les lignes correspondant à "apt-get upgrade"

grep "apt-get upgrade" /var/log/apt/history.log


# 2. Choisir la derniere ligne

grep "apt-get upgrade" /var/log/apt/history.log |tail -1


# 3. Et afficher la date qui se situe 1 ligne au dessus de la commande dans le paragraphe qu'on ne voit plus.
Là je patauge car elle n'est pas dans la sélection de départ.

Je pense que ma traduction n'est pas bonne, mais je ne sais pas comment voir le problème autrement.
Si il y un champion qui peut m'aider à y voir plus clair.
Merci.

Dernière modification par totoZero7 (Hier 14:55:49)

Hors ligne

#2 17-11-2022 20:30:06

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Probablement de faire avec awk, mais voilà comment on fait avec du scotch.

tac /var/log/apt/history.log | grep Upgrade -m1 -B1 | head -n1 | cut -d" " -f2

Dernière modification par otyugh (17-11-2022 20:33:04)


antifa.png feminism.png lgbtqi.png disarm.png kopimi.png
Pas de repos pour les oppresseurs ! (surtout quand c'est moi)

Hors ligne

#3 17-11-2022 21:46:57

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Merci pour le scotch otyugh, je marque en résolu.

J'ai pris un peu de temps pour comprendre tout ça mais il semble que l'option -m1 ne soit pas nécessaire car -B1 s'en occupe.
Je l'ai retiré et cela fonctionne. (j'ai ajouté l'heure en prime)

tac /var/log/apt/history.log | grep Upgrade -B1 | head -n1 |cut -d " " -f 2,3,4




j'ai découvert tac qui est le cat à l'envers big_smile

Dernière modification par totoZero7 (17-11-2022 21:47:28)

Hors ligne

#4 17-11-2022 22:19:38

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

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Hello,

Une solution avec awk (peut-être pas la meilleure) :

awk '/Upgrade:/{s=1}; s && /End-Date/{date=$2; s=0}END{print date}' /var/log/apt/history.log



Edit: Avec l'heure "en prime"

awk '/Upgrade:/{s=1}; s && /End-Date/{date=$2" "$3; s=0}END{print date}' /var/log/apt/history.log




Edit2: Plus simple

awk '/^Upgrade:/{getline;d=$2" "$3}END{print d}' /var/log/apt/history.log

Dernière modification par Tawal (17-11-2022 22:29:57)


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 19-11-2022 18:44:00

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

Re : [résolu] Comment afficher la date du dernier upgrade système ?

@Tawal
Est-ce que tu pourrais décortiquer ce que fait la ligne ?

awk '/^Upgrade:/{getline;d=$2" "$3}END{print d}' /var/log/apt/history.log


J'ai beau retourner le web, je ne trouve pas suffisamment d'exemples, en français surtout,  pour comprendre.

J'ai compris que awk '/^Upgrade: cherchait toutes les lignes contenant "Upgrade". Mais c'est tout.
Autre chose, le chapeau circonflexe mis avant ^Upgrade sert à quelque chose ? car si je le retire, ça fonctionne aussi.

Hors ligne

#6 19-11-2022 19:56:56

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

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Hello,

Explication de la commande :

/^Upgrade:/

Si la ligne commence par contient Upgrade: en début de ligne (l'accent circonflexe dit que c'est en début de ligne qu'on cherche la chaîne de caractère)

{getline;d=$2" "$3}

Alors lire la ligne suivante (getline) et affecter à la variable d la valeur des champs 2 et 3 (séparés par un espace) de la ligne dernièrement lue

END{print d}

Une fois tout le fichier parcouru, afficher la valeur de la variable d
Donc, ça affiche la date+heure correspondant au dernier Upgrade rencontré.

Edit:
En effet, ça fonctionne sans le ^ devant Upgrade:
Mais rien n'assure que la chaîne "Upgrade:" ne peut se retrouver ailleurs dans le fichier qu'en début de ligne.
C'est une consolidation, une assurance de réussite wink

Dernière modification par Tawal (19-11-2022 20:03:11)


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 19-11-2022 22:23:03

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

Re : [résolu] Comment afficher la date du dernier upgrade système ?

ok, getline affiche la ligne du dessous, il fallait le savoir.
J'étais formaté au code de otyugh qui a mis le processus à l'envers, du coup je n'ai pas vu la date qui était mise aussi à la fin, donc je n'avais pas capté cette possibilité.

@tawal:
Si je veux jouer à l'envers pour voir la ou les lignes du dessus par exemple, ça serait quelle nom de variable ?
Est-ce qu'il y a un tuto qui recence ces choses, ces noms de variables définies ?
Même le END je n'ai pas encore compris. J'aimerais approfondir.



Petit appel au développeurs ou ambassadeur de 'awk' qui passent par là:
Sachez que cette commande 'awk' à l'air vraiment puissante et intéressante à utiliser, mais elle est difficilement abordable voire incompréhensible pour un non codeur, surtout en langue française ; Les tutos mis à dispositions que j'ai chopés sur le web sont très anciens et peu explicites comparait à la puissance de cette fonction... c'est dommage car elle donne envie de s'en servir.


En tout cas, Merci de ouf (comme ils disent les djeuns) Tawal (t'as le droit le dire de ouf mais pas le droit de dire teubé car c'est vieux, va comprendre...), j'ai méga cherché en me cassant 47 neurones et n'ai rien trouvé pour m'apporter un éclairage sur ceci ; Peut-être ai-je mal cherché. Pourtant j'ai regardé des trucs en anglais, même le man qui m'a carrément brisé sur-place. Jme demande si il ne faut pas avoir un niveau diplôme d'ingé en informatique pour comprendre des fois hmm

Hors ligne

#8 19-11-2022 23:36:22

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

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Ce n'est pas du bash, c'est du awk.
https://www.gnu.org/software/gawk/manual/gawk.html

awk, à ma connaissance, ne sait pas nativement lire à l'envers un fichier.
Pour cela, il faut le parcourir dans le bon sens pour enregistrer les lignes dans un tableau et ensuite parcourir ce tableau à l'envers.
Solution que je n'ai pas adopté car le résultat peut être obtenu en 1 seule lecture du fichier.

Edit:
Oui, awk/gawk est très puissant et surtout plus rapide qu'un code bash car c'est presque du C.

Dernière modification par Tawal (19-11-2022 23:37:50)


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

#9 01-12-2022 18:39:52

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

Re : [résolu] Comment afficher la date du dernier upgrade système ?

mise à jour
Je remonte le post car la solution d'aller chercher l'information dans "/var/log/apt/history.log" ne fonctionne pas.
Comme je l'avais senti, le fichier /var/log/apt/history.log ne prend que le mois en cours.

Donc aujourd'hui, 1er décembre, je n'ai rien qui s'affiche si j’exécute la commande et ne peux donc savoir à quand remonte ma dernière mise à jour.

Si qq1 a une autre astuce...

Hors ligne

#10 01-12-2022 19:06:53

phreg
Membre
Distrib. : MX et Manjaro
Noyau : Les derniers dispos
(G)UI : Xfce
Inscription : 02-04-2011

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Bonjour,
chez moi (MX Linux) ce n'est pas le mois en cours. Aujourd'hui la plus ancienne date visible dans le fichier est le 12 novembre et pourtant j'ai fais des tas de mises à jour depuis l'installation en mars.
Il faut aller voir plus ancien dans le fichier /var/log/apt/history.log.1.gz et suivants (3 pour moi). C'est compressé donc moins simple. Ça remonte jusqu'en juin, pas au début de l'installation.

Hors ligne

#11 01-12-2022 19:31:00

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Donc là il faut carrément un script qui dirait :

Si il n'y a pas d'info dans le fichier /var/log/apt/history.log
alors décompresser le fichier /var/log/apt/history.log.1.gz
aller dans le fichier décompressé
et chopper la date de la dernière mise à jour.

Si ne le trouve pas de date, aller dans le fichier encore avant /var/log/apt/history.log.2.gz. (on suppose que j'ai dormi pendant 3 mois tongue)
et on refait la recherche.
Et on cherche jusqu'à trouver, en donnant une limite raisonnable de recherche je suppose (nombre de fichier history.log dispo)


piouf, je me suis encore embarqué dans un truc que je ne maitrise pas du tout (les scripts).

Dernière modification par totoZero7 (01-12-2022 19:31:33)

Hors ligne

#12 01-12-2022 20:20:35

raleur
Membre
Inscription : 03-10-2014

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Ou alors on concatène tous les fichiers log par date croissante ou numéro décroissant avant de faire la recherche.

Il vaut mieux montrer que raconter.

Hors ligne

#13 01-12-2022 20:56:56

ubub
Membre
Distrib. : Debian
(G)UI : xfce
Inscription : 14-05-2019

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Bonjour,
une autre idée, aller voir dans history quand la dernière commande update a eu lieu .. si fait manuellement,of course; mais c'est peut être fait en automatique, d'où le questionement ...

Hors ligne

#14 01-12-2022 21:54:37

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

Re : [résolu] Comment afficher la date du dernier upgrade système ?

ubub a écrit :

une autre idée, aller voir dans history quand la dernière commande update a eu lieu

marche pas car il n'y a pas la date (je ne l'ai pas activé pour une meilleur lisibilité quand je fouine dans le fichier .history)


Donc extraire N fichiers .log.x.gz
Prendre leur contenu en les concaténant en incluant le fichier actuel .log dans un fichier temporaire .temp
Et faire la recherche ensuite. En effet ça semble plus simple.

Par contre, il faut ajouter que si le fichier n'a pas été modifié avec un Upgrade (uniquement) dans le .log (ce qui arrive pendant plusieurs jours voire semaines), alors ne pas recréer la manip, mais lire simplement le fichier temporaire, pour ne pas contraindre le cpu à faire des créations de fichiers à chaque seconde (incluant la décompressions des anciens).
Et lui dire aussi de supprimer l'ancien l'ancien fichier temporaire, si il y a une nouvelle date inscrite. Poaaa j'ai la tête qui tourne.
ça serait ça en gros ?

Je crois que je vais abandonner mon délire.

Hors ligne

#15 01-12-2022 22:06:43

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

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Hello,

Voici une commande qui va scruter tous les fichiers d'historiques (compressés compris) d'apt :

awk '/^Upgrade:/{getline;d=$2" "$3}END{print d}' < <(z=$(find /var/log/apt -type f -name "hist*gz" | wc -l); for ((i=z;i>=1;i--)); do zcat "/var/log/apt/history.log.$i.gz"; done; cat /var/log/apt/history.log)



Pour expliquer :

z=$(find /var/log/apt -type f -name "hist*gz" | wc -l)

donne le nombre de fichier compressés d'historique apt.

for ((i=z;i>=1;i--)); do zcat "/var/log/apt/history.log.$i.gz"; done

affiche le contenu des fichiers compressés par ordre décroissant

cat /var/log/apt/history.log

affiche le contenu du fichier d'historique en cours.

Edit:
C'est la mise en œuvre de la solution de raleur.

Edit2:
Aucun fichier temporaire utilisé/créé par cette commande wink

Dernière modification par Tawal (01-12-2022 22:11:35)


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

#16 01-12-2022 22:44:33

phreg
Membre
Distrib. : MX et Manjaro
Noyau : Les derniers dispos
(G)UI : Xfce
Inscription : 02-04-2011

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Jolies lignes !
Juste un peu luxueux pour simplement connaître la date de dernière mise à jour.
Je retiens plutôt

for ((i=z;i>=1;i--)); do zcat "/var/log/apt/history.log.$i.gz"; done >apt-modifs.txt && cat /var/log/apt/history.log >>apt-modifs.txt


qui permet de voir l'historique en regardant les lignes commençant par "Install:", "Upgrade:" ou "Remove:" dans le fichier apt-modifs.txt.

Hors ligne

#17 01-12-2022 23:31:02

raleur
Membre
Inscription : 03-10-2014

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Champion de l'usine à gaz !

zcat -f $(ls -rv /var/log/apt/history.log*)


Il vaut mieux montrer que raconter.

Hors ligne

#18 Hier 00:30:41

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

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Usine à gaz, j'en conviens.
Mais ls reste déconseillé dans un script car il peut avoir des moutures différentes selon le paramétrage de celui-ci.
Par exemple chez moi, ls ajoute des marqueurs pour signaler un droit d'exécution.
Mais il n'y pas que ça, ls peut aussi ne pas afficher les caractères spéciaux et les remplacer par ?, il peut aussi entourer le nom du fichier par des apostrophes etc.
Donc usine à gaz soit, mais plus sûre d'un résultat correct.

Edit:
Pour en savoir plus lisez le lien dans ma signature : Filenames and Pathnames in Shell: How to do it Correctly

Dernière modification par Tawal (Hier 00:34:18)


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

#19 Hier 02:13:23

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Wow la ligne Tawal !

Avec le terminal elle fonctionne nickel.
Par contre elle ne fonctionne pas dans le conky en mettant ceci:

${exec awk '/^Upgrade:/{getline;d=$2" "$3}END{print d}' < <(z=$(find /var/log/apt -type f -name "hist*gz" | wc -l); for ((i=z;i>=1;i--)); do zcat "/var/log/apt/history.log.$i.gz"; done; cat /var/log/apt/history.log)}



Si j'écris le code dans un fichier script shell nommé "monawk" et que je lance la commande depuis le conky, ça fonctionne:

${exec ./monawk}



Le conky n'accepte pas la commande directe ou alors il y a une subtilité à mettre.

Hors ligne

#20 Hier 10:34:10

raleur
Membre
Inscription : 03-10-2014

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Tawal a écrit :

Mais ls reste déconseillé dans un script car il peut avoir des moutures différentes selon le paramétrage de celui-ci.


J'ai pris ls pour faire au plus court mais on peut utiliser d'autres méthodes comme find + sort pour obtenir une liste des fichiers triée par ordre décroissant de nom.
Ta formule n'est pas parfaite non plus, elle suppose qu'il n'y a pas de "trou" dans la liste des fichiers.

totoZero7 a écrit :

Le conky n'accepte pas la commande directe


Cette ligne est une expression du shell et je soupçonne que conky ne supporte qu'un exécutable avec ses arguments.


Il vaut mieux montrer que raconter.

Hors ligne

#21 Hier 11:28:21

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

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Oui, bien vu pour un "trou" possible.
Du coup je propose ceci :

awk '/^Upgrade:/{getline;d=$2" "$3}END{print d}' < <(find /var/log/apt -type f -name "hist*gz" | sort -t "." -k3 -rn | xargs zcat; cat /var/log/apt/history.log)



Edit:
Pour ce qui est d'inclure la commande dans un conky, tu vas malheureusement devoir passer par un script appelé par ce même conky.

Dernière modification par Tawal (Hier 12:07: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

#22 Hier 14:55:31

totoZero7
Membre
Distrib. : Debian 11 bullseye
Noyau : 5.10.0-19-amd64
(G)UI : Mate 1.24.1
Inscription : 05-07-2020

Re : [résolu] Comment afficher la date du dernier upgrade système ?

Ce n'est peut-être pas plus mal de passer par un script déposé ailleurs, à allégera l'écriture du conky et peut-être même sa consommation ?.

Merci à vous!
Cette fois c'est résolu.

Hors ligne

Pied de page des forums