/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
- 作为
init
或grub
的默认输入/输出设备: 在grub
配置文件中可以设置:
这样console=ttyS0,115200n8
/dev/console
就会映射到串口ttyS0
。
5. 典型应用场景
- 服务器无显示器时,远程通过 串口控制台 访问
/dev/console
进行维护。 - 在
initrd
或initramfs
早期启动阶段,系统日志和错误信息会写入/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");
日志级别从高到低依次是:
级别 | 常量 | 值 | 含义 |
---|---|---|---|
0 | KERN_EMERG | 0 | 系统崩溃,所有用户都必须立即关注 |
1 | KERN_ALERT | 1 | 必须立刻采取措施的问题 |
2 | KERN_CRIT | 2 | 严重错误 |
3 | KERN_ERR | 3 | 普通错误 |
4 | KERN_WARNING | 4 | 警告 |
5 | KERN_NOTICE | 5 | 正常但需要注意的事件 |
6 | KERN_INFO | 6 | 信息性消息 |
7 | KERN_DEBUG | 7 | 调试消息 |
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. 总结
printk
只有 日志级别小于等于console_loglevel
时,才会写入/dev/console
。console_loglevel
可通过/proc/sys/kernel/printk
读取和修改。- 默认情况下,
KERN_WARNING
及以上级别 (console_loglevel = 4
) 的消息才会进入/dev/console
。 - 可以通过
echo 7 > /proc/sys/kernel/printk
让所有日志级别都输出到/dev/console
。 /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和…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...