好用的Linux指令--dmesg的多种用法以及源码

dmesg 的功能:喷kernel log
dmesg 是一个用于显示系统内核环形缓冲区(ring buffer)中的信息的命令工具。它可以输出内核在启动过程中或运行过程中产生的各种消息,这些消息通常用于调试、诊断系统问题、查看硬件设备状态和跟踪内核日志。dmesg 输出的信息包括内核启动时的各种事件、硬件设备的加载、驱动程序的初始化、内核模块的加载、错误、警告信息等。


dmesg 的常用选项
dmesg -C:清空内核缓冲区。
dmesg -c:清空缓冲区并显示当前的内核消息。
dmesg -H:输出具有时间戳的内核消息。
dmesg -T:将时间戳转换为可读格式,通常以 YYYY-MM-DD HH:MM:SS 形式显示。
dmesg -l level:显示指定级别的日志消息(例如 -l err 只显示错误消息)。
dmesg | grep <pattern>:结合 grep 使用,过滤出与特定模式匹配的日志信息。

平时最常用的是dmesg -w,它会不断地输出新的内核日志条目

dmesg 输出内容解释
dmesg 输出的每一行通常包含以下几部分内容:

时间戳:表示消息发生的时间,通常是内核启动后的时间(秒)。可以通过 -T 选项将其转换为可读的日期格式。

示例:[    0.000000] 表示消息在系统启动后的第 0 秒。

消息级别:包括不同的日志级别,如信息(INFO)、警告(WARNING)、错误(ERROR)等。

内核消息内容:内核生成的详细信息,如硬件检测、驱动加载、内存分配、错误日志等。

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 5.4.0-42-generic (buildd@lamiak) (gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)) #46-Ubuntu SMP Thu Jul 16 09:29:24 UTC 2020
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-5.4.0-42-generic root=UUID=42f1f90c-8e5f-4f0e-8a2d-b76bbf1e6247 ro quiet splash
[    0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-5.4.0-42-generic root=UUID=42f1f90c-8e5f-4f0e-8a2d-b76bbf1e6247 ro quiet splash
[    0.030000] printk: console [tty0] enabled
[    0.070000] ACPI: Core revision 20190912
[    0.070000] ACPI: All ACPI Tables successfully acquired


dmesg.c简化版demo

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <time.h>

#define KMSG_PATH "/dev/kmsg"

int main(int argc, char *argv[]) {
    int fd;
    char buf[4096];
    ssize_t len;
    
    // 打开内核消息缓冲区
    fd = open(KMSG_PATH, O_RDONLY);
    if (fd == -1) {
        perror("Failed to open /dev/kmsg");
        return 1;
    }

    // 从内核消息缓冲区中读取数据并输出
    while ((len = read(fd, buf, sizeof(buf) - 1)) > 0) {
        buf[len] = '\0'; // 确保字符串以 '\0' 结尾
        printf("%s", buf);  // 输出读取到的内核日志
    }

    if (len == -1) {
        perror("Failed to read from /dev/kmsg");
    }

    close(fd); // 关闭文件描述符
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值