Convertir los timestamps de dmesg en Busybox
Servidor
Published: 2023-02-24

El comando dmesg de Busybox no tiene la opción -T para convertir y mostrar los timestamps, así que intenté hacer una conversión en una sola línea.

Una línea

uptime=$(cut -d. -f1 /proc/uptime); dmesg | while read line; do time=$(echo $line | sed -e 's/^\[ *\([0-9]*\).*$/\1/g');  echo "[$(date -d @$(($(date +%s) - $uptime + $time)))] $(echo $line | cut -d ] -f 2 -)" ; done

Explicación general

  1. En /proc/uptime se registra el tiempo transcurrido en segundos desde que el sistema se inició.
  2. El timestamp que produce dmesg es el tiempo transcurrido desde que el sistema se inició.
  3. Al restar el tiempo transcurrido desde que el sistema se inició del tiempo actual, se obtiene el momento en que se inició el sistema.
Hora actual - (segundos acumulados de funcionamiento - timestamp de dmesg) = Hora del registro