Linux 内核把内部状态以“文件、目录或日志”的形式开放给用户空间。多数文件并不存储在磁盘上,而是访问时由内核动态生成。
| 接口 | 主要用途 | 常见示例 |
|---|---|---|
/proc |
查看进程信息和系统运行状态,也包含部分内核参数 | /proc/1234/status、/proc/meminfo、/proc/cpuinfo |
/sys |
展示和控制设备、驱动及内核对象 | /sys/class/net/eth0/、/sys/block/sda/ |
debugfs |
面向内核开发者的调试入口,接口通常不保证稳定 | /sys/kernel/debug/ |
tracefs |
收集内核事件、函数调用和性能跟踪数据 | /sys/kernel/tracing/ |
dmesg |
读取内核环形日志缓冲区,并非文件系统 | 启动日志、驱动报错、硬件异常 |
/proc:运行状态和进程视图
/proc 是 procfs 虚拟文件系统。它最初主要用于暴露进程信息,后来也加入了大量系统级信息。
每个进程通常对应一个数字目录:
1 | /proc/1234/ |
系统级文件包括:
1 | cat /proc/meminfo |
/proc/sys/ 比较特殊,它允许查看或修改部分内核参数:
1 | cat /proc/sys/net/ipv4/ip_forward |
通常应优先使用 sysctl,而不是直接写 /proc/sys。
/sys:内核对象和设备模型
/sys 挂载的是 sysfs,它把内核中的设备、驱动、总线、模块等对象组织成层次结构。
例如:
1 | /sys/ |
一些文件不仅能读取,还能控制设备:
1 | cat /sys/class/net/eth0/operstate |
粗略来说,/proc 偏向“系统现在运行得怎样”,/sys 偏向“系统里有哪些内核对象,它们如何组织”。
debugfs:灵活但不稳定的调试接口
debugfs 专门供内核和驱动开发者暴露调试信息,常见挂载位置是:
1 | /sys/kernel/debug |
检查和挂载:
1 | mount | grep debugfs |
驱动可以在这里提供内部寄存器、统计计数器、状态快照或测试控制项。
需要注意:
- 不属于稳定的用户空间 ABI;
- 文件名、格式和行为可能随内核版本改变;
- 部分节点读取也可能产生副作用;
- 通常只允许
root或具备相应权限的进程访问。
因此,生产程序不应长期依赖未经稳定性承诺的 debugfs 接口。
tracefs:专门用于内核跟踪
tracefs 是从 debugfs 中拆分出来的跟踪文件系统,主要承载 ftrace、tracepoints 和部分 eBPF 跟踪基础设施。
现代系统通常挂载在:
1 | /sys/kernel/tracing |
某些旧系统或兼容布局中也可能出现在:
1 | /sys/kernel/debug/tracing |
关键文件包括:
1 | available_tracers # 可用跟踪器 |
例如跟踪进程执行事件:
1 | cd /sys/kernel/tracing |
trace 更像当前缓冲区的快照;trace_pipe 会持续输出并消费数据,更适合实时跟踪。
dmesg:读取内核日志
dmesg 不是一种文件系统,而是读取内核日志环形缓冲区的命令。内核和驱动通过 printk() 等机制向这个缓冲区写日志。
常见用法:
1 | dmesg |
它常用于排查:
- 驱动加载失败;
- 磁盘 I/O 错误;
- OOM Killer;
- USB 或 PCI 设备识别问题;
- 文件系统损坏;
- 内核崩溃和硬件异常。
在使用 systemd 的系统上,也可以通过日志系统查看内核消息:
1 | journalctl -k |
因为环形缓冲区容量有限,旧消息会被新消息覆盖;journalctl 如果启用了持久化日志,则可能保留更长时间。
它们之间的关系
可以用一句话概括:
/proc:进程与系统运行视图;/sys:设备和内核对象模型;debugfs:自由形式的开发调试入口;tracefs:结构化、实时的内核跟踪入口;dmesg:内核主动输出的日志记录。
读取普通节点通常安全,但写入 /proc/sys、/sys、debugfs 或 tracefs 可能立即改变内核及硬件行为,需要确认节点语义并使用适当权限。
本文作者:jujimeizuo
本文地址: https://blog.jujimeizuo.cn/2026/09/21/Linux-Kernel-Info/
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0 协议。转载请注明出处!