现在版本的 dmesg -T 都是带时间戳的。
但是老的机器,很有可能是没有 -T 这个参数的,直接 dmesg 是这样的:
这个时间戳是天书啊,这还算好的,好歹有。还有更差的,连戳子都没有:
戳子都没有的,需要做以下步骤来加上,机器重启后必须再执行一遍:
1echo 1 > /sys/module/printk/parameters/printk_time
同时写个脚本,/usr/local/bin/dmesgt.sh
1#!/bin/bash
2# Translate dmesg timestamps to human readable format
3
4# desired date format
5date_format="%a %b %d %T %Y"
6
7# uptime in seconds
8uptime=$(cut -d " " -f 1 /proc/uptime)
9
10# run only if timestamps are enabled
11if [ "Y" = "$(cat /sys/module/printk/parameters/time)" ]; then
12 dmesg | sed "s/^\[[ ]*\?\([0-9.]*\)\] \(.*\)/\\1 \\2/" | while read timestamp message; do
13 printf "[%s] %s\n" "$(date --date "now - $uptime seconds + $timestamp seconds" +"${date_format}")" "$message"
14 done
15else
16 echo "Timestamps are disabled (/sys/module/printk/parameters/time)"
17fi
这样就可以了,最后我们测试一下:
1echo "Enabled timestamps" | tee /dev/kmsg
看到带时间戳的信息就可以了:
1$ dmesg
2[...]
3Bluetooth: RFCOMM TTY layer initialized
4Bluetooth: RFCOMM socket layer initialized
5Bluetooth: RFCOMM ver 1.11
6[...]
7[271309.434405] Enabled timestamps
8[...]