“内核环形缓冲区”、“用户级别”、“日志级别”是什么概念?

Tim*_*Tim 53 logs kernel

我经常看到“内核环形缓冲区”、“用户级别”、“日志级别”等几个词一起出现。例如

/var/log/dmesg 包含内核环形缓冲区信息。

/var/log/kern.log 只包含任何日志级别的内核消息

/var/log/user.log 包含有关所有用户级别日志的信息

它们都是关于日志的吗?它们之间有何关联和不同?

通过“级别”,我会想象一个多层次的层次结构?

“用户级别”是否与“用户空间”有关?

它们在某种程度上与运行级别保护环有关吗?

Cel*_*ada 56

是的,所有这些都与日志记录有关。不,它与运行级别或“保护环”无关。

内核将其日志保存在环形缓冲区中。这样做的主要原因是系统启动时的日志得到保存,直到 syslog 守护进程有机会启动并收集它们。否则,在 syslog 守护进程启动之前将不会有任何日志记录。使用该dmesg命令可以随时查看该环形缓冲区的内容,并且它的内容也会/var/log/dmesg在 syslog 守护程序启动时保存。

所有不是来自内核的日志在生成时都会发送到 syslog 守护程序,因此它们不会保存在任何缓冲区中。内核日志在生成时也由 syslog 守护程序获取,但它们也会继续(不必要地,有争议地)保存到环形缓冲区。

日志级别可以在syslog(3) 联机帮助页中看到,如下所示:

  • LOG_EMERG : 系统不可用
  • LOG_ALERT : 必须立即采取行动
  • LOG_CRIT : 临界条件
  • LOG_ERR : 错误条件
  • LOG_WARNING : 警告条件
  • LOG_NOTICE : 正常但重要的条件
  • LOG_INFO : 信息性消息
  • LOG_DEBUG : 调试级消息

每个级别的设计都没有前一个级别那么“重要”。在一个级别记录日志的日志文件也将在所有更重要的级别记录日志。

/var/log/kern.log/var/log/mail.log(例如)之间的区别与级别无关,而与设施或类别有关。这些类别也记录在联机帮助页中。

  • 我的第二个问题是:虽然“dmesg”打印出内核环形缓冲区的当前值,但缓冲区的过去/旧值存储在“/var/log/dmesg”中。所以 `dmesg` 输出只是 `/var/log/dmesg` 内容的最近子集,并且它们是不同的。那么“/var/log/dmesg”(不是您评论中的“dmesg”)和“/var/log/kernel.log”的内容是否相同? (2认同)
  • 要看什么时候!启动后不久,“/var/log/dmesg”内容可能会接近“/var/log/kern.log”的末尾。很久以后,它就不会在那里了,它会被轮换出来。一般来说,“/var/log/kern.log”将包含比内核日志环缓冲区的任何给定快照更旧的日志,以及比该快照更新的日志。 (2认同)
  • [这个视频很好地解释了循环缓冲区](https://www.youtube.com/watch?v=gYxdHbbjn_8) (2认同)

nom*_*drc 24

至少回答您关于dmesg以下问题的第一部分:

/var/log/dmesg 存储“内核环缓冲区”的内容,这是内核在启动时创建的内存缓冲区,用于存储在您通过引导加载程序阶段后立即生成的日志数据。

环形缓冲区是一种特殊的缓冲区,它的大小始终保持不变,当新消息进来时会删除最旧的消息。存储在内核环形缓冲区中的文本是您第一次启动 Unix 时在屏幕上闪过的内容- 控制台模式下的机器(没有启动画面,普利茅斯)。内核日志存储在内存缓冲区中,以便引导日志可以存放在某个地方,直到系统将自身引导到syslog守护程序可以接管的位置。

dmesgLinux 下是util-linuxkernel.org 发布的系统维护工具的基本包的一部分。根据dmesg(1)手册页,

dmesg 用于检查或控制内核环形缓冲区。

见:http : //www.computerhope.com/unix/dmesg.htm

在 'systemd' init 下,此命令可用于打印内核环形缓冲区:
# journalctl --dmesg or journalctl -k, thxs 以供更正 @don_crissti

dmesg | grep -i ethernet 例如,发出该命令将解析字符串“ethernet”的内核环形缓冲区。

我希望这至少对您查询的第一部分有所帮助。