在 Fedora 29(我被迫使用)中,dmesg
缺少选项--since
,就像--until
这样journalctl
。
journalctl --since "2022-12-20 09:00:00" --until "2022-12-20 10:00:00"
如何过滤显示to内的dmesg
日志?9AM
10AM
Dec 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)
这只会显示since
2 小时前的日志。until
可以使用相同的逻辑和不同的数学来编写脚本。唯一的问题是,它比 dmesg 本身慢。