' dmesg '命令显示来自内核环形缓冲区的消息。系统会经过多个运行级别,从中我们可以获得大量信息,例如系统架构、CPU、附加设备、RAM 等。当计算机启动时,内核(操作系统的核心)会加载到内存中。在此期间,会显示大量消息,我们可以在其中看到内核检测到的硬件设备。
dmesg 命令示例
这些消息对于设备故障时的诊断目的非常重要。当我们连接或断开系统上的硬件设备时,借助 dmesg 命令,我们可以实时了解检测到或断开的信息。dmesg命令可在大多数基于Linux 和 Unix 的操作系统上使用。
让我们通过下面讨论的实际示例来了解最著名的工具“dmesg”命令。dmesg 的具体语法如下。
# dmseg [选项...]
1.列出内核中所有加载的驱动程序
我们可以使用文本操作工具,即“ more ”、“ tail ”、“ less ”或“ grep ”以及 dmesg 命令。由于 dmesg 日志的输出无法容纳在单个页面上,因此将 dmesg 与 pipe more 或 less 命令一起使用将在单个页面中显示日志。
[ root@howtoing.com ~]# dmesg | 更多的
[ root@howtoing.com ~]# dmesg | 较少的
样本输出
[0.000000]初始化cgroup子系统cpuset
[0.000000]初始化cgroup子系统cpu
[0.000000]初始化cgroup子系统cpuacct
[ 0.000000] Linux 版本 3.11.0-13-generic (buildd@aatxe) (gcc 版本 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP 10 月 23 日星期三 17:26:33 UTC 2013
(Ubuntu 3.11.0-13.20-通用3.11.6)
[ 0.000000] 内核支持的CPU:
[ 0.000000] 英特尔正版英特尔
[ 0.000000] AMD 正品AMD
[ 0.000000] NSC Geode 由 NSC
[0.000000]西里克斯西里克斯代替
[ 0.000000] 半人马半人马拖车
[0.000000]全美达正品TMx86
[0.000000]全美达全美达CPU
[0.000000]联电联电联电联电
[ 0.000000] e820:BIOS 提供的物理 RAM 映射:
[0.000000]BIOS-e820:[mem 0x0000000000000000-0x000000000009fbff]可用
[0.000000]BIOS-e820:[mem 0x00000000000f0000-0x00000000000fffff]保留
[0.000000]BIOS-e820:[mem 0x0000000000100000-0x000000007dc08bff]可用
[0.000000]BIOS-e820:[mem 0x000000007dc08c00-0x000000007dc5cbff]ACPI NVS
[0.000000]BIOS-e820:[mem 0x000000007dc5cc00-0x000000007dc5ebff]ACPI数据
[0.000000]BIOS-e820:[mem 0x000000007dc5ec00-0x000000007fffffff]保留
[0.000000]BIOS-e820:[mem 0x00000000e0000000-0x00000000efffffff]保留
[0.000000]BIOS-e820:[mem 0x00000000fec00000-0x00000000fed003ff]保留
[0.000000]BIOS-e820:[mem 0x00000000fed20000-0x00000000fed9ffff]保留
[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] 保留
[0.000000]BIOS-e820:[mem 0x00000000ffb00000-0x00000000ffffffff]保留
[ 0.000000] NX(执行禁用)保护:活动
……
另请阅读:使用命令 head、tail 和 cat 有效管理 Linux 文件
2. 列出所有检测到的设备
要发现内核已检测到哪些硬盘,您可以搜索关键字“ sda ”和“ grep ”,如下所示。
[ root@howtoing.com ~]# dmesg | grep sda
[ 1.280971] sd 2:0:0:0: [ sda ] 488281250 512 字节逻辑块:(250 GB/232 GiB)
[ 1.281014] sd 2:0:0:0: [ sda ] 写保护已关闭
[ 1.281016] sd 2:0:0:0: [ sda ] 模式检测: 00 3a 00 00
[ 1.281039] sd 2:0:0:0: [ sda ] 写入缓存:已启用,读取缓存:已启用,不支持 DPO 或 FUA
[1.359585] sda:sda 1 sda 2< sda 5 sda 6 sda 7 sda 8>
[ 1.360052] sd 2:0:0:0: [ sda ] 连接的 SCSI 磁盘
[2.347887]EXT4-fs(sda 1):使用有序数据模式安装的文件系统。选项:(空)
[22.928440]在/dev/ sda 6上添加3905532k交换。优先级:-1范围:1跨:3905532k FS
[23.950543]EXT4-fs(sda 1):重新安装。选择:errors=remount-ro
[24.134016] EXT4-fs(sda 5):使用有序数据模式安装的文件系统。选项:(空)
[24.330762] EXT4-fs(sda 7):使用有序数据模式安装的文件系统。选项:(空)
[24.561015] EXT4-fs(sda 8):使用有序数据模式安装的文件系统。选项:(空)
注:“sda”是第一个 SATA 硬盘驱动器,“sdb”是第二个 SATA 硬盘驱动器,依此类推。如果是 IDE 硬盘,请使用“hda”或“hdb”进行搜索。
3. 仅打印前 20 行输出
'head' 和 dmesg 将显示起始行,即 'dmesg | head -20' 将仅打印从起点开始的 20 行。
[ root@howtoing.com ~]# dmesg | 头-20
[0.000000]初始化cgroup子系统cpuset
[0.000000]初始化cgroup子系统cpu
[0.000000]初始化cgroup子系统cpuacct
[ 0.000000] Linux 版本 3.11.0-13-generic (buildd@aatxe) (gcc 版本 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP 10 月 23 日星期三 17:26:33 UTC 2013 ( Ubuntu 3.11.0-13.20-通用3.11.6)
[ 0.000000] 内核支持的CPU:
[ 0.000000] 英特尔正版英特尔
[ 0.000000] AMD 正品AMD
[ 0.000000] NSC Geode 由 NSC
[0.000000]西里克斯西里克斯代替
[ 0.000000] 半人马半人马拖车
[0.000000]全美达正品TMx86
[0.000000]全美达全美达CPU
[0.000000]联电联电联电联电
[ 0.000000] e820:BIOS 提供的物理 RAM 映射:
[0.000000]BIOS-e820:[mem 0x0000000000000000-0x000000000009fbff]可用
[0.000000]BIOS-e820:[mem 0x00000000000f0000-0x00000000000fffff]保留
[0.000000]BIOS-e820:[mem 0x0000000000100000-0x000000007dc08bff]可用
[0.000000]BIOS-e820:[mem 0x000000007dc08c00-0x000000007dc5cbff]ACPI NVS
[0.000000]BIOS-e820:[mem 0x000000007dc5cc00-0x000000007dc5ebff]ACPI数据
[0.000000]BIOS-e820:[mem 0x000000007dc5ec00-0x000000007fffffff]保留
4. 仅打印最后 20 行输出
“tail”和 dmesg 命令将只打印最后 20 行,这在我们插入可移动设备时很有用。
[ root@howtoing.com ~]# dmesg | 尾-20
parport0:PC 风格,位于 0x378,irq 7 [PCSPP,TRISTATE]
ppdev:用户空间并行端口驱动程序
EXT4-fs (sda1):以有序数据模式挂载的文件系统
在 /dev/sda2 上添加 2097144k 交换。优先级:-1 范围:1 跨度:2097144k
readahead-disable-service:延迟服务auditd
ip_tables:(C) 2000-2006 Netfilter 核心团队
nf_conntrack 版本 0.5.0(16384 个存储桶,最多 65536 个)
NET:注册协议族 10
lo:禁用隐私扩展
e1000:eth0 NIC 链路已启动 1000 Mbps 全双工,流量控制:无
慢速工作线程池:正在启动
慢工作线程池:就绪
FS 缓存:已加载
缓存文件:已加载
CacheFiles:安全拒绝指定安全上下文的权限:错误 -95
eth0:不存在 IPv6 路由器
类型=1305审核(1398268784.593:18630):audit_enabled=0旧=1 auid=4294967295 ses=4294967295 res=1
readahead-collector:启动延迟服务auditd
预读收集器:排序
预读收集器:完成
5. 搜索检测到的设备或特定字符串
由于 dmesg 输出的长度,很难搜索特定字符串。因此,过滤包含“ usb ”、“ dma ”、“ tty ”和“ memory ”等字符串的行。“-i”选项指示grep 命令忽略大小写(大写或小写字母)。
[ root@howtoing.com日志]# dmesg | grep -i USB
[ root@howtoing.com日志]# dmesg | grep -i DMA
[ root@howtoing.com日志]# dmesg | grep -i tty
[ root@howtoing.com日志]# dmesg | grep -i 内存
样本输出
[ 0.000000] 扫描 1 个区域是否存在低内存损坏
[0.000000]初始内存映射:[mem 0x00000000-0x01ffffff]
[ 0.000000] 基本内存蹦床位于 [c009b000] 9b000 大小 16384
[0.000000]init_内存_映射:[mem 0x00000000-0x000fffff]
[0.000000]init_内存_映射:[mem 0x37800000-0x379fffff]
[0.000000]init_内存_映射:[mem 0x34000000-0x377fffff]
[0.000000]init_内存_映射:[mem 0x00100000-0x33ffffff]
[0.000000]init_内存_映射:[mem 0x37a00000-0x37bfdfff]
[ 0.000000] 早期内存节点范围
[ 0.000000] PM:注册的 nosave内存:[mem 0x0009f000-0x000effff]
[ 0.000000] PM:注册的 nosave内存:[mem 0x000f0000-0x000fffff]
[ 0.000000]如果您不需要内存cgroup ,请尝试“cgroup_disable=内存”选项
[0.000000]内存:2003288K/2059928K可用(6352K内核代码,607K rwdata,2640K rodata,880K init,908K bss,56640K保留,1146920K highmem)
[0.000000]虚拟内核内存布局:
[0.004291]初始化cgroup子系统内存
[0.004609]释放SMP替代内存:28K(c1a3e000 - c1a45000)
[0.899622]释放initrd内存:23616K(f51d0000 - f68e0000)[0.899813]每 60 秒
扫描一次低内存损坏
[0.946323] agpgart-intel 0000:00:00.0:检测到32768K被盗内存
[1.360318]释放未使用的内核内存:880K(c1962000 - c1a3e000)
[1.429066][drm]图形设备可用的内存= 2048M
6.清除dmesg缓冲区日志
是的,如果需要,我们可以使用以下命令清除 dmesg 日志。它将清除 dmesg 环形缓冲区消息日志,直到您执行以下命令。您仍然可以查看存储在“ /var/log/dmesg ”文件中的日志。如果连接任何设备都会生成 dmesg 输出。
[ root@howtoing.com日志]# dmesg -c
7. 实时监控dmesg
某些发行版还允许使用命令“tail -f /var/log/dmesg”进行实时 dmesg 监控。
[ root@howtoing.com log]# watch "dmesg | tail -20"
结论: dmesg 命令很有用,因为 dmesg 实时记录所有已完成或发生的系统更改。与往常一样,您可以man dmesg来获取更多信息。