当前位置: 首页 > news >正文

/dev/console文件详解

/dev/console概览

/dev/console 是 Linux 系统中的一个特殊设备文件,通常用于与系统的控制台进行交互。它的作用和特点如下:

1. 作用

  • init 进程(PID 1)和某些系统服务在启动时会使用 /dev/console 进行日志输出,以确保关键信息能够显示在控制台上,即使系统尚未完全初始化。
  • 当系统运行级别较低(如单用户模式)或出现故障时,管理员可以通过 /dev/console 直接进行交互,而无需依赖其他终端设备。

2. 设备类型

  • /dev/console 通常是一个 字符设备,可以使用 ls -l /dev/console 查看其设备号:
    ls -l /dev/console 
    输出示例:
    crw--w---- 1 root tty 5, 1 Mar 6 12:34 /dev/console 
    其中:
    • c 代表字符设备
    • 5, 1 是主设备号和次设备号
    • 只有 root 用户和 tty 组有写权限

3. 区别于其他终端设备

  • /dev/ttyX(如 /dev/tty1)指的是物理终端(VT,Virtual Terminal)。
  • /dev/pts/X 指的是伪终端(Pseudo Terminal),用于远程或 GUI 终端会话。
  • /dev/null 是一个特殊设备,丢弃所有写入的数据。
  • /dev/console 一般与 系统的主控制台 相关联,不管是物理终端、串口控制台,还是虚拟控制台。

4. 如何使用

  • 输出信息到控制台:
    echo "System is going down!" > /dev/console 
  • 作为 initgrub 的默认输入/输出设备: 在 grub 配置文件中可以设置:
    console=ttyS0,115200n8 
    这样 /dev/console 就会映射到串口 ttyS0

5. 典型应用场景

  • 服务器无显示器时,远程通过 串口控制台 访问 /dev/console 进行维护。
  • initrdinitramfs 早期启动阶段,系统日志和错误信息会写入 /dev/console 以便管理员查看。
  • Docker、LXC 等容器环境中,/dev/console 可能会被映射到宿主机的某个终端。

信息写入到/dev/console

printk是内核中的函数,用于将信息写入内核ring buffer中,printk何时将信息写入 /dev/console 取决于 消息的日志级别当前的 console_loglevel 配置。下面是详细解析:


1. printk 的日志级别

printk 允许开发者指定不同的日志级别,每个级别对应一个 优先级

printk(KERN_EMERG "Emergency message\n"); 
printk(KERN_ALERT "Alert message\n"); 
printk(KERN_CRIT "Critical message\n"); 
printk(KERN_ERR "Error message\n"); 
printk(KERN_WARNING "Warning message\n"); 
printk(KERN_NOTICE "Notice message\n"); 
printk(KERN_INFO "Info message\n"); 
printk(KERN_DEBUG "Debug message\n"); 

日志级别从高到低依次是:

级别常量含义
0KERN_EMERG0系统崩溃,所有用户都必须立即关注
1KERN_ALERT1必须立刻采取措施的问题
2KERN_CRIT2严重错误
3KERN_ERR3普通错误
4KERN_WARNING4警告
5KERN_NOTICE5正常但需要注意的事件
6KERN_INFO6信息性消息
7KERN_DEBUG7调试消息

2. console_loglevel 决定哪些日志会写入 /dev/console

系统使用 console_loglevel 来决定 哪些级别的 printk 消息可以被输出到 /dev/console

2.1 如何查看当前 console_loglevel

cat /proc/sys/kernel/printk 

示例输出:

4 4 1 7 

这些值的含义:

  • 第 1 个值:当前 console_loglevel,只有日志级别 小于等于 该值的消息会输出到 /dev/console
  • 第 2 个值:默认 console_loglevel
  • 第 3 个值:最低 console_loglevel
  • 第 4 个值:最高 console_loglevel

在上述示例中,console_loglevel = 4,意味着 KERN_WARNING(4)及以上级别的消息会输出到 /dev/console


3. 如何修改 console_loglevel

如果你希望 更详细的日志信息写入 /dev/console,可以修改 console_loglevel

3.1 临时修改(重启后失效)

echo 7 > /proc/sys/kernel/printk 

这会让 所有日志级别(包括 KERN_DEBUG 都输出到 /dev/console

3.2 永久修改(重启后生效)

将以下内容添加到 /etc/sysctl.conf

kernel.printk = 7 4 1 7 

然后应用:

sysctl -p 

4. 影响 /dev/console 的其他因素

除了 console_loglevel,还有一些其他因素影响 printk 是否写入 /dev/console

4.1 控制台是否已初始化

如果 printk 发生在 系统启动早期(如 early printk 阶段),系统可能还没有初始化 /dev/console,此时日志不会输出。

4.2 dmesg 级别过滤

即使 printk 输出到 内核日志缓冲区dmesg 命令默认不会显示所有日志,你可以用 -n 选项调整:

dmesg -n 7 # 允许显示所有日志 

4.3 串口/远程控制台

如果系统使用 串口作为控制台,可能需要在 grub 配置中添加:

console=ttyS0,115200n8 

然后在 dmesg 中就能看到 printk 的输出。


5. 总结

  1. printk 只有 日志级别小于等于 console_loglevel 时,才会写入 /dev/console
  2. console_loglevel 可通过 /proc/sys/kernel/printk 读取和修改。
  3. 默认情况下,KERN_WARNING 及以上级别 (console_loglevel = 4) 的消息才会进入 /dev/console
  4. 可以通过 echo 7 > /proc/sys/kernel/printk 让所有日志级别都输出到 /dev/console
  5. /dev/console 可能是 物理终端、串口终端或伪终端,具体取决于系统配置。

相关文章:

/dev/console文件详解

/dev/console概览 /dev/console 是 Linux 系统中的一个特殊设备文件,通常用于与系统的控制台进行交互。它的作用和特点如下: 1. 作用 init 进程(PID 1)和某些系统服务在启动时会使用 /dev/console 进行日志输出,以确…...

ProfibusDP主站转ModbusTCP网关如何进行数据互换

ProfibusDP主站转ModbusTCP网关如何进行数据互换 在现代工业自动化领域,通信协议的多样性和复杂性不断增加。Profibus DP作为一种经典的现场总线标准,广泛应用于工业控制网络中;而Modbus TCP作为基于以太网的通信协议,因其简单易…...

springboot3 WebClient

1 介绍 在 Spring 5 之前,如果我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,不过由于 RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端,因此存在一定性能瓶颈。根据 Spring 官…...

牛客周赛 Round 83

A.和猫猫一起起舞! 思路:遇到‘U’和‘D’,输出‘R’或者‘L’;遇到‘R’和‘L’,输出‘U’或者‘D’.(这题比较简单) AC代码: void solve() {int n, m, k;char ch;cin >> ch;if (ch U || ch D)…...

硬通货用Deekseek做一个Vue.js组件开发的教程

安装 Node.js 与 Vue CLI‌ npm install -g vue/cli vue create my-vue-project cd my-vue-project npm run serve 通过 Vue CLI 可快速生成项目骨架,默认配置适合新手快速上手 目录结构‌ src/ ├── components/ # 存放组件文件 │ └── …...

Windows权限维持之利用安全描述符隐藏服务后门进行权限维持(八)

我们先打开cs的服务端 然后我们打开客户端 我们点击连接 然后弹出这个界面 然后我们新建一个监听器 然后我们生成一个beacon 然后把这个复制到目标主机 然后我们双击 运行 然后cs这边就上线了 然后我们把进程结束掉 然后我们再把他删除掉 然后我们创建服务 将后门程序注册…...

Ubuntu20.04双系统安装及软件安装(七):Anaconda3

Ubuntu20.04双系统安装及软件安装(七):Anaconda3 打开Anaconda官网,在右侧处填写邮箱(要真实有效!),然后Submit。会出现如图示的Success界面。 进入填写的邮箱,有一封Ana…...

【极光 Orbit•STC8A-8H】02. STC8 单片机工程模板创建

【极光 Orbit•STC8A-8H】02. STC8 单片机工程模板创建 七绝单片机 小小芯片大乾坤, 集成世界在其中。 初学虽感千重难, 实践方知奥妙通。 今天的讲法和过去不同,直接来一个多文件模块化的工程模板创建,万事开头难,…...

Spring Boot WebFlux 中 WebSocket 生命周期解析

Spring Boot WebFlux 中的 WebSocket 提供了一种高效、异步的方式来处理客户端与服务器之间的双向通信。WebSocket 连接的生命周期包括连接建立、消息传输、连接关闭以及资源清理等过程。此外,为了确保 WebSocket 连接的稳定性和可靠性,我们可以加入重试…...

PostgreSQL中的事务隔离

1. 事务隔离的概念 在数据库管理系统中,事务隔离是一项重要的功能,它能确保在并发访问数据库时事务之间能够独立运行,不会相互干扰。数据库系统通常支持不同级别的事务隔离,用来满足不同应用程序之间的需求。 2. 事务隔离的种类…...

基于Rye的Django项目通过Pyinstaller用Github工作流简单打包

前言 Rye的介绍和安装 Ryehttps://rye.astral.sh/Rye 完整使用教程_安装rye-CSDN博客https://blog.csdn.net/zhenndbc/article/details/144544692 正文 项目建立 配置好环境后 新建文件夹 新建文件夹,进入项目 初始化 rye init下载依赖 rye syncpycharm 打…...

ubuntu 20.04 C++ 源码编译 cuda版本 opencv4.5.0

前提条件是安装好了cuda和cudnn 点击下载: opencv_contrib4.5.0 opencv 4.5.0 解压重命名后 进入opencv目录,创建build目录 “CUDA_ARCH_BIN ?” 这里要根据显卡查询一下,我的cuda是11,显卡1650,所以是7.5 查询链接:…...

【VUE】第一期——初使用、基本语法

目录 0 前言 1 准备工作 1.1 创建vue实例 1.2 vue开发者工具 2 插值表达式 2.1 基本用法 3 常用指令 3.1 内容渲染指令 3.1.1 v-text 3.1.2 v-html 3.2 条件渲染指令 3.2.1 v-show 3.2.2 v-if 3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 3.3.1 内联语句 3.3…...

计算光学成像与光学计算概论

计算光学成像所涉及研究的内容非常广泛,虽然计算光学成像的研究内容是发散的,但目的都是一致的:如何让相机记录到客观实物更丰富的信息,延伸并扩展人眼的视觉感知。总的来说,计算光学成像现阶段已经取得了很多令人振奋…...

开启科创服务新篇章:八月瓜科技CRM数字化管理系统成功上线

近日,北京八月瓜科技有限公司(以下简称 “八月瓜科技”)与纷享销客达成深度战略合作,成功部署并上线CRM数字化管理系统。此次合作是八月瓜科技在数字化转型进程中的重要里程碑,标志着其在科技创新服务领域的数字化变革…...

AI提示词(Prompt)的理解和学习指南

AI提示词(Prompt)的理解和学习指南 一、什么是AI提示词? AI提示词(Prompt)是用户输入给人工智能模型的指令或问题,用于引导模型生成特定类型的回答或内容。它如同与AI沟通的“钥匙”,设计得当…...

记录一些面试遇到的问题

重载和重写的区别 重载是overload,覆盖是override 重载属于编译时多态,覆盖属于运行时多态 运行时多态和编译时多态 运行时多态指的是在运行的时候才知道要调用哪一个函数,编译时多态是指在编译的时候就知道调用哪一个函数。 运行时多态…...

OpenHarmony4.0_Linux环境搭建

查看链接:OpenHarmony4.0_Linux环境搭建https://www.yuque.com/xinzaigeek/jishu/fs9msruqhd5nhw4i...

DeepSeek开源Day5:3FSsmallpond技术详解

2 月 24 日,DeepSeek 启动 “开源周”,第四个开源的代码库为 3FS&smallpond(又是一下发布了两个)。 3FS(Fire-Flyer File System)是 DeepSeek 内部开发的一款高性能分布式文件系统,旨在为 A…...

Java集合面试篇

目录 1.概念 1.1.数组与集合的区别,用过哪些? 1.2.说说Java中的集合? 1.3.Java中的线程安全的集合是什么? 1.4.集合遍历的方法有哪些? 2.List 2.1.list可以一边遍历一边修改元素吗? 2.2.Arraylist和…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...