如何显示特定时间范围内的 dmesg 日志?

如何显示特定时间范围内的 dmesg 日志?

在 Fedora 29(我被迫使用)中,dmesg缺少选项--since,就像--until这样journalctl

journalctl --since "2022-12-20 09:00:00" --until "2022-12-20 10:00:00"

如何过滤显示to内的dmesg日志?9AM10AMDec 20

答案1

--time-format选项dmesg是可以使用格式:

(请注意,T由于 iso 格式,日期和时间之间没有空格)

sed 只能工作如果你的日志中有一行2022-12-12T09和 一行。2022-12-12T10

$ sudo dmesg --time-format=iso | sed -n '/2022-12-12T09/,/2022-12-12T10/p'


您也可以执行类似的操作来为时间范围添加更多特异性(在这里,我们仅获取范围内指定的分钟数):

在此情况下,您的日志中还需要一行 with2022-12-12T09:16和一行 with 。2022-12-12T09:24

$ sudo dmesg --time-format=iso | sed -n '/2022-12-12T09:16/,/2022-12-12T09:24/p'

来自联机帮助页

- 时间格式format 使用给定格式打印时间戳,可以是 ctime、reltime、delta 或 iso。前三种格式是时间格式特定选项的别名。 iso 格式是 ISO-8601 时间戳格式的 dmesg 实现。这种格式的目的是使两个系统之间的时间戳比较以及任何其他解析变得容易。 iso时间戳的定义为:YYYY-MM-DDHH:MM:SS,<-+>。

iso格式与ctime有同样的问题:系统暂停和恢复时时间可能不准确。

答案2

我写了一个小脚本来收集一定范围内的日志

while read line; do
        d=$(echo $line | cut -d ',' -f 1)
        if [[ $line =~ ^[[:digit:]] ]] && [[ `date -d "$d" +%s` > `date --date="2 hours ago" +%s` ]]
        then
                echo $line
        fi
done < <(dmesg -T --time-format iso)

这只会显示since2 小时前的日志。until可以使用相同的逻辑和不同的数学来编写脚本。唯一的问题是,它比 dmesg 本身慢。

相关内容