Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/08/2014, à 16:02

Efhache84

Conversion string en date/time

Bonjour à tous,

petite demande pour un script, je cherche à vérifier le délai écoulé depuis un accès ssh.

Pour ce faire, dans les logs j'ai des lignes du genre :

Aug  7 12:16:06 (none) authpriv.info dropbear[9655]: exit after auth (root): Exited normally
Aug  7 12:16:06 (none) authpriv.info dropbear[9668]: Child connection from 192.168.12.140:43894

l'information de date et heure je peux l'extraire en utilisant gre et awk, ce qui m'offre ceci :

/tmp # cat /var/log/syslog.log | grep dropbear | awk -F\( '{print $1}'
Aug  7 12:16:06 
Aug  7 12:16:06 
Aug  7 12:16:06 

Désormais je voudrais convertir ce string en un timestamp (ou autre) qui permettrai de le comparer avec le temps courant et de savoir s'il est supérieur ou non à deux heures.

l'utilisation de date -d, n'est pas faisable car ne semble pas apprécier le formattage de la date présente dans le fichier de log.

Quelqu'un aurait-il une idée?


Aspire 5633 WLMi - Lucid Lynx 10.04 en 64 bits

Hors ligne

#2 Le 07/08/2014, à 18:31

pingouinux

Re : Conversion string en date/time

Bonjour,
Pour info, tu peux simplifier ta commande

awk -F\( '/dropbear/{print $1}' /var/log/syslog.log

Chez moi, la syntaxe de cette date fonctionne

$ date -d "Aug  7 12:16:06 "
Thu Aug  7 12:16:06 CEST 2014

Et tu peux faire ceci, pour obtenir des temps en secondes

t_log=$(date -d "Aug  7 12:16:06 " +"%s")
t_courant=$(date +"%s")

Pour voir si le temps courant dépasse de 2h le temps log, il suffit de tester

(( (t_courant- t_log) > 7200 )) && echo "Plus grand" || echo "Pas plus grand"

Dernière modification par pingouinux (Le 07/08/2014, à 18:32)

Hors ligne

#3 Le 08/08/2014, à 10:17

Efhache84

Re : Conversion string en date/time

Merci de la réponse, mais comme dis plus haut date -d n'accepte pas ce format dans mon environnement  (embarqué, pas ubuntu, précision que j'ai omise, désolé)

~ # date -d "Aug  8 08:14:00"                                   
date: invalid date 'Aug  8 08:14:00'

Ma version de date : BusyBox v1.15.2 (2009-12-03 15:11:08 CET) multi-call binary

Mon problème est vraiment de convertir ce "Aug 8 08:14:00"  en quelque chose de comparable avec les opérateurs mathématique.


Aspire 5633 WLMi - Lucid Lynx 10.04 en 64 bits

Hors ligne

#4 Le 08/08/2014, à 10:32

pingouinux

Re : Conversion string en date/time

À tout hasard :

LC_TIME=C date -d "Aug  8 08:14:00"

Quel est le résultat de

locale

Hors ligne

#5 Le 08/08/2014, à 11:25

Efhache84

Re : Conversion string en date/time

~ # LC_TIME=C date -d "Aug  8 08:14:00"
date: invalid date 'Aug  8 08:14:00'
~ # locale
-sh: locale: not found
~ # 

Je pense que l'utilisation des commandes courante ne sera pas possible, mon environnement est beaucoup trop strippé.

La seule option que j'imagine ce serait une fonction en shell/bash  qui décortique la date pour en faire un format utilisable par date (??)

~ # date --help
BusyBox v1.15.2 (2009-12-03 15:11:08 CET) multi-call binary

Usage: date [OPTIONS] [+FMT] [TIME]

Display time (using +FMT), or set time

Options:
        [-s] TIME       Set time to TIME
        -u              Work in UTC (don't convert to local time)
        -R              Output RFC-822 compliant date string
        -I[SPEC]        Output ISO-8601 compliant date string
                        SPEC='date' (default) for date only,
                        'hours', 'minutes', or 'seconds' for date and
                        time to the indicated precision
        -r FILE         Display last modification time of FILE
        -d TIME         Display TIME, not 'now'
        -D FMT          Use FMT for -d TIME conversion

Recognized formats for TIME:
        hh:mm[:ss]
        [YYYY.]MM.DD-hh:mm[:ss]
        YYYY-MM-DD hh:mm[:ss]
        [[[[[YY]YY]MM]DD]hh]mm[.ss]

Mon approche serait-elle trop overkill ?


Aspire 5633 WLMi - Lucid Lynx 10.04 en 64 bits

Hors ligne

#6 Le 08/08/2014, à 11:30

credenhill

Re : Conversion string en date/time

hello
et avec awk ?

$ declare -A mois; mois=([Jan]=1 [Feb]=2 [Mar]=2 [Apr]=4 [May]=5 [Jun]=6 [Jul]=7 [Aug]=8 [Sep]=9 [Oct]=10 [Nov]=11 [Dec]=12)
$ awk -F "[: ]" '{b=" "; print mktime($1 b $2 b $3 b $4 b $5 b $6 )}' <<<"2014 ${mois[Aug]} 8 08:14:00"
1407478440
$ date -d "Aug  8 08:14:00" +%s
1407478440

Hors ligne

#7 Le 08/08/2014, à 11:39

Efhache84

Re : Conversion string en date/time

ce sera la solution je pense... juste que (murphy n'est pas cool aujourd'hui)  declare n'est pas disponnible ici...   snnifff


Aspire 5633 WLMi - Lucid Lynx 10.04 en 64 bits

Hors ligne

#8 Le 08/08/2014, à 12:17

credenhill

Re : Conversion string en date/time

c'estt du bash, quel shell ?
en ksh, remplacer parf typeset

Hors ligne

#9 Le 08/08/2014, à 12:22

Efhache84

Re : Conversion string en date/time

c'est ash

BusyBox v1.15.2 (2009-12-03 15:11:08 CET) built-in shell (ash)

mais dans le monde particulier du embedded... donc strippé... ce qui cause mes soucis malheureux


Aspire 5633 WLMi - Lucid Lynx 10.04 en 64 bits

Hors ligne

#10 Le 08/08/2014, à 12:59

credenhill

Re : Conversion string en date/time

sans tableau shell, dans awk

$ echo "2014 Aug 8 08:14:00" | awk -F "[: ]" -f f1.awk
1407478440
$ cat f1.awk
BEGIN {split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", a)}
{for(n in a)d[a[n]]=n; b=" "; print mktime($1 b d[$2] b $3 b $4 b $5 b $6 )}

Dernière modification par credenhill (Le 08/08/2014, à 13:34)

Hors ligne

#11 Le 08/08/2014, à 13:44

Efhache84

Re : Conversion string en date/time

Je dois être un peu bête...

/minimuc # echo "2014 Aug 8 08:14:00" | awk -F "[: ]" -f f1.awk
awk: f1.awk:2: Call to undefined function

ferais-je une erreur en mettant le tout sur deux lignes ?


Aspire 5633 WLMi - Lucid Lynx 10.04 en 64 bits

Hors ligne

#12 Le 08/08/2014, à 14:59

credenhill

Re : Conversion string en date/time

il faut créer un fichier f1.awk contenant les 2 lignes BEGIN ...
ou alors il ne connait pas mktime
quel awk ? awk --version

Dernière modification par credenhill (Le 08/08/2014, à 15:01)

Hors ligne

#13 Le 08/08/2014, à 15:55

Efhache84

Re : Conversion string en date/time

Bien entendu j'avais créé le fichier...

l'argument version n'est pas reconnu... c'est une version strippée de busybox... et effectivement mktime n'est pas connu


Aspire 5633 WLMi - Lucid Lynx 10.04 en 64 bits

Hors ligne

#14 Le 08/08/2014, à 16:16

credenhill

Re : Conversion string en date/time

essayer

awk -W version

et en perl (ignore le  fuseau horaire)

$ perl -e 'use Time::Piece; my $t=Time::Piece->strptime($ARGV[0], "%Y %b %d %T"); print $t->strftime("%s\n")' "2014 Aug  8 08:14:00"
1407482040

Dernière modification par credenhill (Le 08/08/2014, à 16:18)

Hors ligne