dmesg
可以选择-T
打印人类可读的时间戳,新版本有选项--time-format
,可以更改时间格式,例如:
--time-format iso
不幸的是,iso
时间格式也不太好读。我可以使用标准date
语法定义自己的时间格式吗?即:
date +%F-%T
答案1
你不能,但你可以解析dmesg
-output:
dmesg --time-format iso \
| while read datestring rest; do \
printf '%s\n' "$(date -d "$datestring" +%F-%T) $rest"; done
答案2
gawk
是的,您可以,例如,通过使用(GNU )重新格式化时间,awk
如下所示:
dmesg --time-format iso | gawk '{ printf (strftime("+%F-%T",mktime(gensub("[-+T:,]"," ","g",$1)))) ; $1 = ""; print $0}'
dmesg
在这里打印 iso 日期,如下所示:
2019-09-02T06:10:30,708864+02:00 this is an important message
我们去掉第一个字符串中的特殊字符,然后使用mktime
( g
)中的函数awk
将字符串解析为日期,然后strftime
进行格式化 - 使用您最喜欢的参数。
这给出了类似的东西
+2019-09-02-06:10:30 this is an important message
小注意事项:
我们在这里忽略时区,假设这是显而易见的,因为我们在本地运行命令。
dmesg
请注意,如果您由于时间戳的存储方式而暂停然后唤醒计算机,则给出的时间可能不准确(事实上,有时会很不准确),请参阅dmesg(1)
:man 1 dmesg