dmesg 是读取内容的命令/var/log/dmesg
。相比之下,好的一点less /var/log/dmesg
是我可以使用 -T 标志来进行人类可读的时间输出。
现在我想看看/var/log/dmesg.0
我的计算机是如何崩溃的。该文件包含先前会话的日志。但我想使用 dmesg 命令中的 -T 标志。或者类似的东西。
知道怎么做吗?
我不介意图形工具,但最好的是 cli 解决方案。
答案1
虽然对于OP来说有点晚了...
我使用 Fedora,但如果您的系统使用 Fedora,那么您可以通过以下方式journalctl
轻松获取先前关闭/崩溃(以某种格式)的内核消息(dmesg 日志) 。dmesg -T
选项:
- -k(dmesg)
- -b <引导号>(0、-1、-2 等之前重新启动了多少次)
- -o 短精确 (dmesg -T)
- -p优先事项按优先级输出过滤(4 过滤掉通知和信息)。
注意:还有一个-o short
and-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
可以回顾的靴子数量可以通过以下方式查看。
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
答案2
为了澄清一个根本性的误解,dmesg
不阅读/var/log/dmesg
。它直接从内核环形缓冲区读取并为您提供最近的 N 条消息。在引导过程即将结束时,dmesg
调用将引导消息写入/var/log/dmesg
(以通常的方式轮换该文件的旧版本)。
一旦您运行了 syslog(syslogd
、rsyslogd
、syslog-ng
等),它就会从内核缓冲区读取数据并写入文件,例如/var/log/kern.log
. (这适用于 Debian;其他系统会有所不同)。假设您的系统在崩溃之前能够写入磁盘并刷新磁盘缓冲区,那么您将在其中找到内核垂死的尖叫声。
在我的 Debian 系统上,该/var/log/kern.log
文件包含人类可读的时间戳。
答案3
在 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
(倒数第五个并已压缩)
如果您有适当的权限,则可以使用cat
,more
或读取它们less
(对于普通文件)和zcat
,zmore
或zless
对于压缩文件
答案4
对于 alpinelinux,
echo 'previous_dmesg=yes' >> /etc/conf.d/bootmisc
将mv /var/log/dmesg /var/log/dmesg.old
在 bootmisc 中执行。