使用Busybox转换dmesg的时间戳
服务器
Published: 2023-02-24

Busybox的dmesg命令没有转换并显示时间戳的 -T 选项,因此我尝试用一行命令进行转换。

一行命令

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

简要说明

  1. /proc/uptime 文件记录了系统自启动以来经过的时间(以秒为单位)。
  2. dmesg 输出的时间戳是系统自启动以来经过的时间。
  3. 通过从当前时间减去系统自启动的经过时间,就可以求得系统启动的时间。
当前时间 - (累计运行秒数 - dmesg时间戳) = 日志时间