Publi

Ver la fecha de dmesg en formato humano

Cuando ejecutamos el comando dmesg, normalmente la fecha y la hora viene dada en un formato extraño, unos números decimales normalmente largos, indescifrables que nos pueden traer de cabeza cuando queremos saber cuándo sucedió el evento que estamos leyendo.

[280213.568809] type=1701 audit(1360483429.151:991): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[280213.568815] type=1701 audit(1360483429.151:992): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[280213.568819] type=1701 audit(1360483429.151:993): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[280213.568822] type=1701 audit(1360483429.151:994): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[280213.568826] type=1701 audit(1360483429.151:995): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[280213.570694] type=1701 audit(1360483429.151:996): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=21 compat=0 ip=0x7f2f734d9957 code=0x50000
[280213.570701] type=1701 audit(1360483429.151:997): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=91 compat=0 ip=0x7f2f734d95a7 code=0x50000
[280214.706376] type=1701 audit(1360483430.291:998): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000
[280217.461365] type=1701 audit(1360483433.047:999): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000
[280217.461376] type=1701 audit(1360483433.047:1000): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000

Tenemos varios modos de hacer esto:

Un argumento

Vale, todo esto podemos simplificarlo, si hacemos

$ dmesg -T
[dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:991): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:992): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:993): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:994): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:995): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
[dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:996): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=21 compat=0 ip=0x7f2f734d9957 code=0x50000
[dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:997): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=91 compat=0 ip=0x7f2f734d95a7 code=0x50000
[dom feb 10 08:57:40 2013] type=1701 audit(1360483430.291:998): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000
[dom feb 10 08:57:43 2013] type=1701 audit(1360483433.047:999): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000
[dom feb 10 08:57:43 2013] type=1701 audit(1360483433.047:1000): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=”chromium-browse” reason=”seccomp” sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000

Aunque en algunos sistemas no encontraremos este argumento.

Ubuntu y derivados tienen /var/log/kern.log

En estos sistemas, podemos hacer un visualizar este archivo y veremos el resultado deseado.

Script

Podemos hacerlo con varios lenguajes, por ejemplo, en esta web encontramos un script en perl y aquí podemos encontrar otra versión en perl y en python.

Yo quiero proponer una versión en bash, será un poco más lenta que las anteriores, pero alguna vez nos puede hacer el apaño. Por otra parte, utiliza alguna técnica curiosa por lo que vale la pena echarle un ojo.

1
base=$(cat /proc/uptime | cut -d '.' -f1); seconds=`date +%s`; dmesg | sed 's/^\[\(.*\)\..*\]\(.*\)$/\1\n\2/' | while read first; do read second; first=`date +"%d/%m/%Y %H:%M:%S" --date="@$(($seconds - $base + $first))"`; echo "[$first] $second"; done

Lo podemos dividir en líneas para leerlo más cómodamente y vemos cómo funciona:

1
2
3
4
5
6
7
base=$(cat /proc/uptime | cut -d '.' -f1);
seconds=`date +%s`;
dmesg | sed 's/^\[\(.*\)\..*\]\(.*\)$/\1\n\2/' | while read first; do
   read second;
   first=`date +"%d/%m/%Y %H:%M:%S" --date="@$(($seconds - $base + $first))"`;
   echo "[$first] $second";
done

Lo primero que hacemos es calcular el tiempo que lleva el ordenador encendido. Esto lo podemos calcular con el contenido de /proc/uptime quitando los decimales. Ese tiempo vendrá en segundos.
Luego calculamos el tiempo UNIX (segundos desde el 01/01/1970 00:00)
Así, calcularemos el momento en que se encendió el ordenador (al tiempo indicado en cada línea de dmesg, tendremos que sumarle el momento en que se encendió el ordenador para ver la fecha en que se produjo).

hecho esto ejecutamos dmesg y dividimos el resultado en partes (y ponemos cada una en una línea):

  • Dentro de los corchetes, nos quedamos con lo que hay antes del punto
  • Fuera de los corchetes lo cogemos todo

Ahora almacenamos cada línea en una variable, y la fecha la expresamos en el formato deseado.

También podría interesarte...

Leave a Reply