Linux 查看内核日志的方法

文章目录

  • 1. dmesg 命令
    • 一. 介绍
      • 内核环形缓冲区的特点
    • 二. 主要功能
    • 三. dmesg 使用
  • 2. 查看kmsg文件
      • `/dev/kmsg` 的用途
      • 使用 `/dev/kmsg`
      • 与 `dmesg` 的关系
  • 3. 内核日志消息的打印行为

1. dmesg 命令

一. 介绍

dmesg(display message 或 display driver message 的缩写)是 Linux 和类 Unix 操作系统中的一个命令行工具,用于显示和控制内核环形缓冲区中的消息。这些消息是由内核在系统启动和运行过程中生成的,包含了关于硬件检测、驱动程序加载、系统资源分配、设备错误以及其他内核级别事件的详细信息。

内核环形缓冲区是 Linux 操作系统内核中用于存储系统消息的一种数据结构。这些消息通常包括系统启动信息、硬件检测状态、驱动程序加载情况、系统运行时发生的警告或错误等关键信息。dmesg 命令是显示和控制内核环形缓冲区中消息的主要工具。

内核环形缓冲区的特点

  1. 环形结构:环形缓冲区具有固定的有限大小,当新的消息到来时,如果缓冲区已满,则会覆盖最旧的消息。这种结构保证了在有限的内存空间中,能够持续记录新的系统消息。
  2. 索引管理:环形缓冲区通常使用两个索引来管理消息的存储和读取。一个索引(通常称为“head”)用于指示生产者(即内核)将新消息插入缓冲区的位置;另一个索引(通常称为“tail”)用于指示消费者从缓冲区中读取消息的位置。
  3. 高效性:由于环形缓冲区的大小是2的幂次方,因此可以使用位运算来快速计算索引的位置,从而提高消息存储和读取的效率。

二. 主要功能

  1. 显示内核消息dmesg 可以显示内核环形缓冲区中的所有消息。这些消息对于了解系统启动过程、硬件识别和配置、驱动程序行为等方面非常有用。

  2. 过滤和搜索消息:通过结合使用 grep 等文本搜索工具,用户可以轻松过滤和搜索特定的内核消息,以便快速定位感兴趣的信息。

  3. 显示时间戳:使用 -T 选项,dmesg 可以为每条消息添加时间戳,帮助用户了解消息发生的时间顺序。

  4. 设置日志级别:通过 -n 选项,用户可以设置 dmesg 显示的日志级别,从而只查看特定级别的消息(如错误、警告等)。

  5. 清空内核消息:使用 -C 选项,dmesg 可以清空内核环形缓冲区中的所有消息。但请注意,这通常只在调试或特定情况下使用,因为清空消息后,将无法再查看之前的信息。

三. dmesg 使用

查询tty相关信息

sudo dmesg -T | grep tty

tty

2. 查看kmsg文件

在 Linux 操作系统中,/dev/kmsg 是一个特殊的设备文件,它提供了一个接口来访问内核环形缓冲区中的消息。与 dmesg 命令不同,/dev/kmsg 通常用于更底层或更持续的内核消息访问。

/dev/kmsg 的用途

  1. 实时访问内核消息

    • /dev/kmsg 允许用户空间程序(如日志守护进程或调试工具)实时读取内核生成的消息。
    • 这对于需要持续监控内核日志的系统管理员或开发人员来说非常有用。
  2. 持久化内核消息

    • 在系统启动过程中,/dev/kmsg 可以被用作初始化日志记录的目标,直到更高级的日志系统(如 syslog)完全启动。
    • 通过将 /dev/kmsg 的输出重定向到文件或其他日志系统,可以确保内核消息在系统启动期间也被持久化。
  3. 调试和故障排除

    • 在调试内核问题或硬件问题时,/dev/kmsg 提供了一个直接访问内核日志的接口。
    • 通过读取 /dev/kmsg,开发人员可以获取关于系统启动、硬件检测、驱动程序加载等关键事件的详细信息。

使用 /dev/kmsg

  • 读取消息

    • 可以使用 cattail -f 或其他文件读取命令来查看 /dev/kmsg 中的内容。
    • 例如,tail -f /dev/kmsg 会实时显示内核消息,类似于 dmesg -w
  • 写入消息

    • 通常,用户空间程序不会直接写入 /dev/kmsg,因为这是内核消息的输出接口。
    • 然而,在某些情况下(如内核调试),可能会通过特定的内核机制(如 printk)向 /dev/kmsg 写入消息。
  • 权限

    • 访问 /dev/kmsg 通常需要超级用户权限,因为它包含敏感的内核信息。
    • 使用 sudo 或以 root 用户身份运行命令是访问 /dev/kmsg 的常见方式。

dmesg 的关系

  • dmesg 命令实际上是通过读取 /dev/kmsg 来获取内核消息的。
  • dmesg 提供了对内核消息的更高层次封装和格式化输出,使其更易于阅读和理解。
  • 相比之下,/dev/kmsg 提供了更原始和底层的访问方式,适用于需要直接处理内核消息的场景。

总之,/dev/kmsg 是 Linux 操作系统中一个重要的接口,它允许用户空间程序实时访问内核环形缓冲区中的消息。这对于系统管理员、开发人员和故障排除人员来说是一个非常有价值的工具。

3. 内核日志消息的打印行为

/proc/sys/kernel/printk 是 Linux 内核中一个重要的文件,它用于控制内核日志消息的打印行为。这个文件包含了四个整数值,这些值定义了内核日志消息的优先级、默认级别以及控制台日志级别的限制。

printk

以下是这四个值的详细解释:

  1. 控制台日志级别(Console Log Level)

    • 这个值决定了哪些优先级的日志消息可以被打印到控制台(即终端或屏幕)。
    • 只有优先级高于或等于此值的消息才会被显示。
    • 数值越小,优先级越高,表示只有更紧急或更严重的消息才会被打印。
  2. 默认的消息日志级别(Default Message Log Level)

    • 当使用 printk 函数打印日志消息且未指定优先级时,将使用此级别。
    • 这个值定义了在没有明确指定优先级的情况下,日志消息的默认优先级。
  3. 最低的控制台日志级别(Minimum Console Log Level)

    • 这个值设置了控制台日志级别的下限(即最高优先级)。
    • 即使控制台日志级别被设置为一个更高的值(表示显示更多消息),这个下限也会确保不会显示低于此优先级的消息。
  4. 默认的控制台日志级别(Default Console Log Level)

    • 这个值通常用于系统启动时设置控制台日志级别的默认值。
    • 它可能不会在运行时被修改,因为系统启动后的日志级别通常由其他机制(如命令行参数或系统配置文件)控制。

要查看当前 /proc/sys/kernel/printk 的值,可以使用以下命令:

cat /proc/sys/kernel/printk

在这里插入图片描述


这将输出四个整数值,分别对应上述四个设置。

要修改这些值,可以使用 echo 命令将新的值写入该文件。例如,要将控制台日志级别设置为 1,默认消息日志级别设置为 4,最低控制台日志级别设置为 1,默认控制台日志级别设置为 7,可以使用以下命令:

echo "1 4 1 7" > /proc/sys/kernel/printk

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Perforce SAST专家详解:自动驾驶汽车的安全与技术挑战,Klocwork、Helix QAC等静态代码分析成必备合规性工具

自动驾驶汽车安全吗?现代汽车的软件包含1亿多行代码,支持许多不同的功能,如巡航控制、速度辅助和泊车摄像头。而且,这些嵌入式系统中的代码只会越来越复杂。 随着未来汽车的互联程度越来越高,这一趋势还将继续。汽车越…

从Full-Text Search全文检索到RAG检索增强

从Full-Text Search全文检索到RAG检索增强 时光飞逝,转眼间六年过去了,六年前铁蛋优化单表千万级数据查询性能的场景依然历历在目,铁蛋也从最开始做CRUD转行去了大数据平台开发,混迹包装开源的业务,机缘巧合下做了实时…

LLM PPT Translator

LLM PPT Translator 引言Github 地址UI PreviewTranslated Result Samples 引言 周末开发了1个PowerPoint文档翻译工具,上传PowerPoint文档,指定想翻译的目标语言,通过LLM的能力将文档翻译成目标语言的文档。 Github 地址 https://github.…

【踩坑】git中文乱码问题

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 背景说明 使用git diff显示中文乱码,如: 修复方法 执行一次: export LESSCHARSETutf-8 如果需要下次登录免输入…

安装Docker报错TCP connection reset by peer或者Timeout

原因:访问的外网下载导致超时或者断连接报错 修改为国内阿里下载地址 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Linux宝塔部署wordpress网站更换服务器IP后无法访问管理后台和打开网站页面显示错乱

一、背景: wordpress网站搬家,更换服务器IP后,如果没有域名时,使用服务器IP地址无法访问管理后台和打开网站页面显示错乱。 二、解决方法如下: 1.wordpress搬家后,在新服务器上,新建站点时&am…

Rust Newtype模式(通过结构体封装现有类型来创建新的类型)(单字段结构体,通过.0访问)模式匹配、解构、DerefMut

文章目录 深入理解Rust中的Newtype模式什么是Newtype模式?Newtype模式的基本形式Newtype的访问访问 Newtype 的值1. 通过 .0 访问字段2. 通过方法访问3. 通过模式匹配(解构)访问 总结 Newtype模式的应用场景1. 类型安全2. 增强可读性3. 定制化…

【ArcGIS Pro】实现一下完美的坐标点标注

在CAD里利用湘源可以很快点出一个完美的坐标点标注。 但是在ArcGIS Pro中要实现这个效果却并不容易。 虽然有点标题党,这里就尽量在ArcGIS Pro中实现一下。 01 标注实现方法 首先是准备工作,准备一个点要素图层,包含xy坐标字段。 在地图框…

【ArcGIS Pro实操第10期】统计某个shp文件中不同区域内的站点数

统计某个shp文件中不同区域内的站点数 方法 1:使用“空间连接 (Spatial Join)”工具方法 2:使用“点计数 (Point Count)”工具方法 3:通过“选择 (Select by Location)”统计方法 4:通过“Python 脚本 (ArcPy)”实现参考 在 ArcGI…

学习threejs,使用设置lightMap光照贴图创建阴影效果

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshLambertMaterial…

Cocos编辑器

1、下载 下载地址:https://www.cocos.com/creator-download 2、编辑器界面介绍 官方链接:https://docs.cocos.com/creator/3.8/manual/zh/editor/ 3、项目结构 官方链接:https://docs.cocos.com/creator/3.8/manual/zh/getting-started/…

C++11特性(详解)

目录 1.C11简介 2.列表初始化 3.声明 1.auto 2.decltype 3.nullptr 4.范围for循环 5.智能指针 6.STL的一些变化 7.右值引用和移动语义 1.左值引用和右值引用 2.左值引用和右值引用的比较 3.右值引用的使用场景和意义 4.右值引用引用左值及其一些更深入的使用场景分…

Notepad++ 替换所有数字给数字加单引号

前言 今天遇到这样一个场景: 要去更新某张表里 code1,2,3,4,5,6 的数据,把它的 name 设置为 ‘张三’ 但是 code在数据库里面的字段类型是 vachar(64),它自身携带索引 原本可以这样写 SQL: update tableA set namezhangsan where code in …

Django 路由层

1. 路由基础概念 URLconf (URL 配置):Django 的路由系统是基于 urls.py 文件定义的。路径匹配:通过模式匹配 URL,并将请求传递给对应的视图处理函数。命名路由:每个路由可以定义一个名称,用于反向解析。 2. 基本路由配…

工作中可以用到的前端小知识(不定时更新)

1、split 结合 filter(Boolean)使用,可以过滤空字符 2、分割 Unicode 字符 用 Array.from() 实现 const text "👍😊👨‍👩‍👦"; const result Array.from(text); console.log(result); // 输…

第R4周:LSTM-火灾温度预测(TensorFlow版)

>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客** >- **🍖 原作者:[K同学啊]** 往期文章可查阅: 深度学习总结 任务说明:数据集中提供了火灾温度(Tem1)、一氧化碳浓度…

CTF-Hub SQL 报错注入(纯手动注入)

​ 当输入1时,发现只有查询正确,基本上可以判断出没有回显 开始注入(工具hackerBar) 题目是报错注入,方向就比较明显,大致说一下用到的函数和原理。 常见报错注入函数: 通过 floor() 报错注入通过 extractValue() …

创建HTTPS网站

每天,我们都会听到网络上发生身份盗窃和数据侵权的案例,这导致用户对自己访问的网站更加怀疑。他们开始更加了解自己将个人信息放在哪里以及信任哪些类型的网站。了解如何使网站使用HTTPS变得比以往任何时候都更加重要。 解读缩略词:HTTP与HT…

计算(a+b)/c的值

计算(ab)/c的值 C语言代码C语言代码Java语言代码Python语言代码 💐The Begin💐点点关注,收藏不迷路💐 给定3个整数a、b、c,计算表达式(ab)/c的值,/是整除运算。 输入 输入仅一行&…

Flink Sink的使用

经过一系列Transformation转换操作后,最后一定要调用Sink操作,才会形成一个完整的DataFlow拓扑。只有调用了Sink操作,才会产生最终的计算结果,这些数据可以写入到的文件、输出到指定的网络端口、消息中间件、外部的文件系统或者是…