本文主要介绍:Linux “dmesg”和 “uname” 命令。dmesg 是 Linux 中一个基于命令行的实用程序,它显示从内核环形缓冲区检索到的与内核相关的消息。
公众号: 滑翔的纸飞机
在系统的启动过程中,屏幕上会显示许多消息,我们可以看到内核检测到的硬件设备。这些消息对于在设备发生故障时进行诊断非常重要。当我们连接或断开系统上的硬件设备时,使用 dmesg,我们可以即时检测信息。事实上,当我们在终端中执行 dmesg 命令时,从内核环形缓冲区接收到的所有消息都会显示在屏幕上。
内核环形缓冲区是一种数据结构,用于记录与内核运行相关的信息。它是一种特殊的缓冲区,大小恒定,因此在接收新信息时会自动删除旧信息。
实际上,在boot阶段,所有的应用还没有启动,syslogd也未启动,这时内核日志是非常重要的信息。
除了设备初始化日志、内核模块日志,它还会包含一些应用崩溃的相关信息记录,了解dmesg的使用对于调试程序相当重要。
dmesg 命令在类 Unix 系统上显示与内核相关的信息,从 /proc/kmsg(提供了到内核环形缓冲区的接口,并且只能由一个进程打开) 虚拟文件中读取内核生成的消息。它用于控制内核环形缓冲区。使用 dmesg 命令可以随时查看环形缓冲区的内容,其内容也会保存到 /var/log/dmesg
文件中。
root@dev:~# dmesg | less
[1235469.779191] br-1a43d09b35e3: port 7(vethf16bbb4) entered forwarding state
[1235470.265144] eth0: renamed from veth949e906
[1235470.278600] IPv6: ADDRCONF(NETDEV_CHANGE): veth622d4ce: link becomes ready
[1235470.278816] br-1a43d09b35e3: port 3(veth0e635e8) entered disabled state
[1235470.278881] br-1a43d09b35e3: port 6(vethab5a006) entered disabled state
[1235470.278930] br-1a43d09b35e3: port 7(vethf16bbb4) entered disabled state
... ...
要实时查看 dmesg 命令的输出,请使用 -w / --follow
选项,例如命令:dmesg -H -T --follow
dmesg -h
Options:
-f, --facility 选项允许你将输出限制为特定的设备,该选项接受一个或多个逗号分隔的功能,例如,要仅显示内核和系统守护程序消息,可以使用:dmesg -f kern,daemon
-k, --kernel 显示内核消息
-l, --level 输出指定日志级别
-S, --syslog 强制使用syslog而不是/dev/kmsg
-u, --userspace 显示用户空间信息
-w, --follow 实时查看 dmesg 命令的输出
-T, --ctime 显示可读的时间戳
更多选项可以:man dmesg
或者 dmesg -h
按设施过滤日志:
dmesg -f syslog | less
[ 10.250252] systemd-journald[355]: Received client request to
flush runtime journal.
...
...
按标签过滤日志:
root@dev:~# dmesg -l info
[1236289.210050] br-1a43d09b35e3: port 10(vethe43ec92) entered disabled state
[1236289.217221] device vethe43ec92 left promiscuous mode
[1236289.217227] br-1a43d09b35e3: port 10(vethe43ec92) entered disabled state
[1236293.029618] br-1a43d09b35e3: port 8(veth96410fd) entered disabled state
...
...
按多个日志级别筛选:
root@dev:~# dmesg -l warn,notice
root@dev:~# dmesg | grep -i memory
-----------------------------------------------------------------------------
[ 0.016691] check: Scanning 1 areas for low memory corruption
[ 0.017233] ACPI: Reserving FACP table memory at [mem 0x7ffe1e29-0x7ffe1f1c]
[ 0.017234] ACPI: Reserving DSDT table memory at [mem 0x7ffe0040-0x7ffe1e28]
[ 0.017235] ACPI: Reserving FACS table memory at [mem 0x7ffe0000-0x7ffe003f]
[ 0.017236] ACPI: Reserving APIC table memory at [mem 0x7ffe1f1d-0x7ffe1f94]
[ 0.017237] ACPI: Reserving MCFG table memory at [mem 0x7ffe1f95-0x7ffe1fd0]
[ 0.017238] ACPI: Reserving WAET table memory at [mem 0x7ffe1fd1-0x7ffe1ff8]
...
...
显示前 “n” 条消息:
root@dev:~# dmesg | head -5
[1290812.104068] br-097d3c3ce0f2: port 4(vetha20f967) entered forwarding state
[1290812.217531] br-097d3c3ce0f2: port 4(vetha20f967) entered disabled state
[1290812.326985] br-097d3c3ce0f2: port 7(vetha5c5ffd) entered blocking state
[1290812.326988] br-097d3c3ce0f2: port 7(vetha5c5ffd) entered disabled state
[1290812.331357] device vetha5c5ffd entered promiscuous mode
显示后 “n” 条消息:
root@dev:~# dmesg | tail -4
[1386732.457280] br-b2618bd64406: port 10(veth531df63) entered disabled state
[1386732.464134] br-b2618bd64406: port 10(veth531df63) entered disabled state
[1386732.466799] device veth531df63 left promiscuous mode
[1386732.466804] br-b2618bd64406: port 10(veth531df63) entered disabled state
root@dev:~# sudo dmesg -C
只有 root 或具有 sudo 特权的用户才能清除缓冲区。
要在清除之前打印缓冲区内容,请使用 -c(--read-clear)
选项:
root@dev:~# sudo dmesg -c
如果要在清除文件之前将当前 dmesg 日志保存到文件中,你可以将输出重定向到文件:
root@dev:~# dmesg > dmesg_messages
对于服务器,本操作请谨慎使用,清除后不会再恢复。下次再dmesg时就没有以前的日志了。
uname 是一种 Linux 命令行实用程序,可显示基本的系统信息。
root@dev:~# uname
Linux
>> uname --help
-a, --all print all information 输出所有信息
-s, --kernel-name print the kernel name 输出内核名称
-n, --nodename print the network node hostname 输出节点主机名
-r, --kernel-release print the kernel release 输出内核版本
-v, --kernel-version print the kernel version 输出内核版本
-m, --machine print the machine hardware name 输出硬件名称
-p, --processor print the processor type (non-portable) 输出处理器类型
-i, --hardware-platform print the hardware platform (non-portable)输出硬件平台
-o, --operating-system print the operating system 输出操作系统
--version output version information and exit 输出版本信息并退出
root@dev:~# uname -s
Linux
root@dev:~# uname -n
dev
root@dev:~# uname -r
5.4.0-165-generic
root@dev:~# uname -v
#182-Ubuntu SMP Mon Oct 2 19:43:28 UTC 2023
root@dev:~# uname -m
x86_64
root@dev:~# uname -p
x86_64
root@dev:~# uname -i
x86_64
root@dev:~# uname -o
GNU/Linux
root@dev:~# uname -a
Linux jpzhang-dev 5.4.0-165-generic #182-Ubuntu SMP Mon Oct 2 19:43:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux