Linux学习篇(十三):Linux 日志信息的查看
关于内核日志的两个主要文件:
1. /var/log/dmesg
2. /var/log/messages
dmesg 记录着开机时的内核日志,终端输入 dmesg 就可以查看文件dmesg 文件的内容 。printk ( ) 函数打印的日志可写到dmesg 或 messages 文件中。咦~ 这个树莓派的系统/var/log/下竟然没有 messages 文件。
关于printk( ):
内核中不能直接调用C标准库的函数比如printf ( ),但他有内核函数 比如 printk。题外话:Linux内核 内核可以通过user_modehelper( ) 来调用用户空间的可执行文件(如shell 脚本)。通过 printk() 输出的日志信息具有不同级别,日志级别是通过在 printk() 输出的字符串前加一个带尖括号的整数来控制的,如 printk("<4>Hello, world!/n"); ,尖括号数字组合 也可用 与之对应的宏定义字符串来代替。 如 <0> 可替换为 KERN_EMERG,所以 printk() 可以这样用: printk(KERN_WARNING "Hello, world!/n"); 。内核中共提供了八种不同的日志级别,在 linux/kernel.h 中有对应的宏定义。
#define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "<3>" /* error conditions */ #define KERN_WARNING "<4>" /* warning conditions */ #define KERN_NOTICE "<5>" /* normal but significant */ #define KERN_INFO "<6>" /* informational */ #define KERN_DEBUG "<7>" /* debug-level messages */ #define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "<3>" /* error conditions */ #define KERN_WARNING "<4>" /* warning conditions */ #define KERN_NOTICE "<5>" /* normal but significant */ #define KERN_INFO "<6>" /* informational */ #define KERN_DEBUG "<7>" /* debug-level messages */
未指定日志级别的 printk() 采用的默认级别是 DEFAULT_MESSAGE_LOGLEVEL,这个宏在 kernel/printk.c 中被定义为整数 4,即对应KERN_WARNING。
参考文章: 1. dmesg 总结 2. dmesg与printk命令
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?