用于检测和控制内核环缓冲。程序用来助用户了解系统的启动信息

Linux命令dmesg用来显示开机信息,kernel会将开机信息存储在ring buffer中

开机信息保存在/var/log目录中名称为dmesg的文件里

dmesg [ -c ] [ -n 级别 ] [ -s 缓冲区大小 ]
  • 1

-c 
清除环缓冲内的内容

-s 缓冲区大小

定义一个大小为”缓冲区大小”的缓冲区用于查询内核环缓冲区。默认大小为 8196(此大小与 2.0.33 和 2.1.103 内核的默认syslog 缓冲区大小一致),如果你设置了一个大于默认值的环缓冲区,那你就可以用这个选项定义一个相当的缓冲区来查看完整的环缓冲区内容

-n级别 
设置级别为记录控制台启动信息的级别。比如,-n 1指的就是将此级别设为最低级,除了内核恐慌信息之外不会向控制台显示信息。所有级别的启动信息还将记录到/proc/kmsg,文件中,因此,syslogd(8)同样可以用来对信息的输出进行控制。当使用-n选项时,dmesg将不会清除内核环缓冲区中的内容。当同时使用以上两个选项时,只有最后一个选项才会产生效果。

要将linux内核的带级别控制的printk内容打印出来,在命令行 输入 dmesg -n 8 就将所有级别的信息都打印出来

printk() 使用说明

内核通过 printk() 输出的信息具有日志级别,日志级别是通过在 printk() 输出的字符串前加一个带尖括号的整数来控制的,如 printk("<6>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() 可以这样用:printk(KERN_INFO "Hello, world!/n");。

未指定日志级别的 printk() 采用的默认级别是 DEFAULT_MESSAGE_LOGLEVEL,这个宏在 kernel/printk.c 中被定义为整数 4,即对应KERN_WARNING。

在 /proc/sys/kernel/printk 会显示4个数值(可由 echo 修改),分别表示当前控制台日志级别、未明确指定日志级别的默认消息日志级别、最小(最高)允许设置的控制台日志级别、引导时默认的日志级别。当 printk() 中的消息日志级别小于当前控制台日志级别时,printk 的信息(要有/n符)就会在控制台上显示。但无论当前控制台日志级别是何值,通过 /proc/kmsg (或使用dmesg)总能查看。另外如果配置好并运行了 syslogd 或 klogd,没有在控制台上显示的 printk 的信息也会追加到 /var/log/messages.log 中。

通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别。查看这个文件的方法如下:

#cat /proc/sys/kernel/printk
6   4  1   7

上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别。

可用下面的命令设置当前日志级别:

# echo 8 > /proc/sys/kernel/printk

另外为了防止 printk() 瞬时被调用次数过多,可以通过 printk_ratelimit() 来控制速度。printk_ratelimit() 通过跟踪发送到控制台的消息数量工作,当输出速度超过一个临界值,就返回零。可通过修改 /proc/sys/kernel/{printk_ratelimit, printk_ratelimit_burst} 来调节 printk_ratelimit() 的计算。

printk_ratelimit() 的典型用法如下:
if (printk_ratelimit())
    printk(KERN_INFO "Hello, world!/n");

参看:

http://blog.csdn.net/zhenwenxian/article/details/4336211

http://blog.csdn.net/zhangxuechao_/article/details/50783298

dmesg与printk命令相关推荐

  1. Android 用adb 打印linux内核调试信息dmesg和kmsg命令

    Android的log信息分为内核空间和用户空间中LOG,查看用户空间(也就是app等上层的log)的log直接用logcat就可以了,如果想过滤一些信息就用adb shell "logca ...

  2. 客户端dmesg_打印调试技术 printk klogd dmesg(解决打印信息的问题)

    4.2.1. printk #include printk(KERN_CRIT"error %s,%i",__FILE__,__LINE__); 注: 1). printk 函数中 ...

  3. Linux dmesg命令

      Linux dmesg命令用于显示开机信息.   kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息亦保存在/var/log目录中 ...

  4. C语言再学习 -- dmesg 命令

    dmesg 这个命令,Linux下用的还是比较多的.现在来详细看一下: Linux dmesg命令用于显示开机信息. kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息 ...

  5. 图解Linux命令之--dmesg命令

    dmesg命令-->用来显示开机信息, kernel会将开机信息存储在ring buffer中.开机时来不及查看信息,可利用dmesg来查看.开机信息亦保存在/var/log/dmesg [dm ...

  6. Linux 系统设置 : dmesg 命令详解

    dmesg命令被用于检查和控制内核的环形缓冲区.kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息保存在/var/log/dmesg文 ...

  7. Linux dmesg命令帮你处理故障和收集系统信息的几种方法

    'dmesg'命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构.cpu.挂载的硬件,RAM等多个运行级别的大量的系统信息.当计算机启动时,系统内核(操作系统的核心部分)将会被加载到 ...

  8. Linux必会100个命令(五十三)dmesg命令

    105.dmesg dmesg是英文display message缩写. 命令用于显示开机信息. kernel会将开机信息存储在ring buffer中.如果开机时来不及察看信息,可以用dmesg来查 ...

  9. Linux dmesg 命令

    Linux dmesg 命令 1.dmesg 2. 常用操作 1.dmesg 1.全称: dmesg 全称是display message (or display driver),即显示信息 kern ...

最新文章

  1. 笔记本电池电量校正方法(转CSDN)
  2. SAP CRM WebClient UI recent object的后台存储实现
  3. php blowfish 解密,PHP blowfish 加密解密函数
  4. oracel 创建视图给某个用户
  5. 网友爆料乘顺风车被司机拿刀砍伤:或面临截肢危险...
  6. Python的collections模块中namedtuple结构使用示例
  7. vue中axios的基本使用,天气查询案例
  8. springMVC接受对象集合,name数组
  9. jquery消息插件(jquery.messager.js)
  10. 类对象等式括号的意义
  11. java项目新东方在线源码_[VIP源码]【S019】SSM框架开发智夫子在线考试系统项目源码 百度云盘...
  12. Studio 3T无限试用
  13. day09、1 - 简单渗透测试流程
  14. 2020中兴捧月傅里叶派记录
  15. Clion笔记- 菜单栏不见了...
  16. 人脸识别最低像素_人脸识别新利器:让你在50米内无处遁逃
  17. 输入一个日期,计算该日期是该年度第几天,输出计算结果。
  18. 【奈茶君】STM32F407驱动WS2812
  19. 我是如何在自学编程9个月后找到工作的 1
  20. 菜鸟首次公开巴西3年规划 1000组中国智能快递柜来到巴西

热门文章

  1. 访问进程环境变量environ时的一个坑
  2. 文件操作:fread()和fwrite()
  3. JavaScript 32位整型无符号操作
  4. Vista 系统C盘(系统盘)越来越小的问题.与解决.
  5. Linux系统下提升进程优先级的办法
  6. tensorboard出现OSError: [Errno 22] Invalid argument问题解决
  7. 众筹网02_项目环境搭建
  8. 【CSDN】图片居中与调整大小
  9. [云炬创业基础笔记]第二章创业者测试10
  10. [云炬ThinkPython阅读笔记]第一章 程序之道