Convertir formato de fecha en la salida del comando dmesg

En algunos casos, cuando ejecutamos el comando dmesg en Linux o Unix, nos aparece la información de esta manera

[3548047.134322] wlp2s0: associate with 00:15:fa:86:b7:20 (try 1/3)
[3548047.144920] wlp2s0: RX ReassocResp from 00:15:fa:86:b7:20 (capab=0x431 status=0 aid=154)
[3548047.146530] wlp2s0: associated

Lo ideal, es que el formato de la primer columna, apareza así

[mié feb  6 11:22:13 2019] wlp2s0: associate with 00:15:fa:86:b7:20 (try 1/3)
[mié feb  6 11:22:13 2019] wlp2s0: RX ReassocResp from 00:15:fa:86:b7:20 (capab=0x431 status=0 aid=154)
[mié feb  6 11:22:13 2019] wlp2s0: associated

En algunos casos, esto se soluciona pasándole al comando dmesg el parámetro -T

└─>  ¯\_(ツ)_/¯  dmesg -T 
[vie ene 25 09:06:46 2019] acpi INT33C5:00: Cannot transition to non-D0 state from D3
[vie ene 25 09:06:46 2019] acpi device:41: Cannot transition to a higher-powered state than parent
[vie ene 25 09:06:46 2019] acpi INT33C6:00: Cannot transition to non-D0 state from D3

Sin embargo, no todos los sistemas y versiones soportan la opción T en el comando dmesg. Para ellos, nos toca realizar una serie de pasos que nos permitirán formatear esta salida.

#!/bin/bash
# Translate dmesg timestamps to human readable format  Tomado de : https://blog.sleeplessbeastie.eu/2013/10/31/how-to-deal-with-dmesg-timestamps/

# desired date format
date_format="%a %b %d %T %Y"

# uptime in seconds
uptime=$(cut -d " " -f 1 /proc/uptime)

# run only if timestamps are enabled
if [ "Y" = "$(cat /sys/module/printk/parameters/time)" ]; then
  dmesg | sed "s/^\[[ ]*\?\([0-9.]*\)\] \(.*\)/\\1 \\2/" | while read timestamp message; do
    printf "[%s] %s\n" "$(date --date "now - $uptime seconds + $timestamp seconds" +"${date_format}")" "$message"
  done
else
  echo "Timestamps are disabled (/sys/module/printk/parameters/time)"
fi

Ejecutando estas instrucciones podemos formatear la salida de dmesg.

En el caso en que genere el mensaje “Timestamps are disabled” , es cuestión de habilitar los timestamps ejecutando la siguiente orden como adminitrador o root

echo "Y" > /sys/module/printk/parameters/time

 

 

 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *