如何从上一个会话中读取 dmesg?(dmesg.0)

don*_*ote 60 dmesg

dmesg 是一个从/var/log/dmesg. 与之相比less /var/log/dmesg的好处是,我可以使用 -T 标志进行人类可读的时间输出。

现在我想看看/var/log/dmesg.0,看看我的电脑是如何崩溃的。该文件包含来自先前会话的日志。但我想使用 dmesg 命令中的 -T 标志。或者等价的东西。

知道怎么做吗?

我不介意图形工具,但最好的方法是 cli 解决方案。

rus*_*dev 78

虽然 OP 有点晚了...

我使用 Fedora,但如果您的系统使用,journalctl那么您可以通过以下方式轻松获取先前关闭/崩溃(以某种dmesg -T格式)的内核消息(dmesg 日志)。

选项:

  • -k (dmesg)
  • -b < boot_number >(0、-1、-2 等之前的重启次数)
  • -o 短精确 (dmesg -T)
  • -p priority按优先级输出过滤(4 过滤掉通知和信息)。

注意:还有一个-o shortand-o short-iso分别为您提供日期和 iso 格式的日期时间。

命令:

  • 所有启动周期: journalctl -o short-precise -k -b all
  • 当前启动: journalctl -o short-precise -k
  • 最后启动: journalctl -o short-precise -k -b -1
  • 前两双靴子: journalctl -o short-precise -k -b -2
  • 等等

示例输出:

Feb 18 21:41:26.917400 localhost.localdomain kernel: usb 2-4: USB disconnect, device number 12
Feb 18 21:41:26.917678 localhost.localdomain kernel: usb 2-4.1: USB disconnect, device number 13
Feb 18 21:41:27.246264 localhost.localdomain kernel: usb 2-4: new high-speed USB device number 22 using xhci_hcd
Feb 18 21:41:27.419395 localhost.localdomain kernel: usb 2-4: New USB device found, idVendor=05e3, idProduct=0610
Feb 18 21:41:27.419581 localhost.localdomain kernel: usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 18 21:41:27.419739 localhost.localdomain kernel: usb 2-4: Product: USB2.0 Hub
Feb 18 21:41:27.419903 localhost.localdomain kernel: usb 2-4: Manufacturer: GenesysLogic
Run Code Online (Sandbox Code Playgroud)

您可以回顾的靴子数量可以通过以下方式查看。

  • journalctl --list-boot

的输出journalctl --list-boot如下所示。

-6 cc4333602fbd4bbabb0df2df9dd1f0d4 Sun 2016-11-13 08:32:58 JST—Thu 2016-11-17 07:53:59 JST
-5 85dc0d63e6a14b1b9a72424439f2bab4 Fri 2016-11-18 22:46:28 JST—Sat 2016-12-24 02:38:18 JST
-4 8abb8267e06b4c26a2466562f3422394 Sat 2016-12-24 08:10:28 JST—Sun 2017-02-12 12:31:20 JST
-3 a040f5e79a754b2a9055ac2598d430e8 Sun 2017-02-12 12:31:36 JST—Sat 2017-02-18 21:31:04 JST
-2 6c29e3b6f6a14f549f06749f9710e1f2 Sat 2017-02-18 21:31:15 JST—Sat 2017-02-18 22:36:08 JST
-1 42fd465eacd345f7b595069c7a5a14d0 Sat 2017-02-18 22:51:22 JST—Sat 2017-02-18 23:08:30 JST  
 0 26ea10b064ce4559808509dc7f162f07 Sat 2017-02-18 23:09:25 JST—Sun 2017-02-19 00:57:35 JST
Run Code Online (Sandbox Code Playgroud)

  • OP 迟到了。未来的谷歌员工永远不会迟到! (18认同)

roa*_*ima 43

为了澄清一个根本的误解,dmesg不从/var/log/dmesg. 它直接从内核环形缓冲区读取,并为您提供最近的 N 条消息。在引导过程即将结束时,dmesg被调用以将引导消息写入/var/log/dmesg(以通常方式轮换该文件的旧版本)。

一旦你有一个Syslog运行(syslogdrsyslogdsyslog-ng等)读取从内核缓冲区和写入文件如/var/log/kern.log。(这是针对 Debian 的;其他系统会有所不同)。假设您的系统能够在崩溃之前写入磁盘并刷新磁盘缓冲区,那么您将在那里找到内核垂死的尖叫声。

在我的 Debian 系统上,该/var/log/kern.log文件包含人类可读的时间戳。


小智 9

在 Debian 中,dmesg日志存储为:

  • /var/log/dmesg (实时和未压缩)
  • /var/log/dmesg.0 (最后一个会话和未压缩)
  • /var/log/dmesg.1.gz (倒数第二和压缩)
  • /var/log/dmesg.2.gz (倒数第二和压缩)
  • /var/log/dmesg.3.gz (倒数第三,压缩)
  • /var/log/dmesg.4.gz (倒数第 4 个并压缩)

如果您有许可,您可以使用catmoreless纯文本和zcatzmorezless压缩文本阅读它们

  • 感谢您的回答。现在我认识了英文单词“penultimate”和“antepenultimate” (3认同)
  • 赞成使用“antepenultimate”(也是一个很好的答案) (2认同)