/proc 是内核在内存中动态生成的虚拟文件系统,不占磁盘空间,提供实时运行状态窗口;其文件大小为 0,内容按需生成,支持读取系统信息(如 /proc/cpuinfo、/proc/meminfo)和临时写入调优参数(如 /proc/sys/ 下文件)。

/proc 是内核暴露运行时状态的“透明窗口”,它不占磁盘空间,所有内容由内核在内存中实时生成。查看其中的内核信息,关键不是“读文件”,而是理解每个路径对应哪类内核数据,以及如何准确提取你需要的内容。
看内核版本与编译详情
最常用的是两个等价来源:
-
uname -r:输出精简版版本号,如
5.15.0-91-generic,适合脚本调用 -
cat /proc/version:显示完整字符串,含 GCC 版本、编译主机、时间戳等,例如
Linux version 3.10.0-1160.el7.x86_64 (mockbuild@...) (gcc version 4.8.5...) #1 SMP ...
注意:容器里执行 uname -r 看到的是宿主机内核版本,/proc/version 同理——它们反映的是底层内核,不是“容器自己的内核”(容器没有独立内核)。
查内核启动参数和配置开关
启动参数决定内核行为边界:
-
cat /proc/cmdline:一行显示所有启动时传给内核的参数,比如
ro root=/dev/sda2 splash quiet mitigations=off -
grep CONFIG_NETFILTER /boot/config-$(uname -r):检查某个编译选项是否启用。若提示 No such file,说明配置未保存或被压缩,可尝试
zcat /proc/config.gz | grep CONFIG_NETFILTER(需内核开启 CONFIG_IKCONFIG_PROC)
很多功能看似“版本支持”,实则依赖具体 CONFIG_XXX 是否=y/m,光看 uname -r 不够。
读取内核运行时状态与统计
这些文件每读一次都是新快照,数值随系统运行实时变化:
-
cat /proc/meminfo:重点看
MemTotal、MemAvailable、Buffers、Cached,单位为 KB -
cat /proc/cpuinfo:按 physical id、core id、processor 分组可算出物理 CPU 数、核心数、逻辑线程数;
model name显示 CPU 型号 - cat /proc/loadavg:当前 1/5/15 分钟平均负载,后面两个数字分别是运行队列长度和最近使用的 PID
/proc 下多数文件权限为 444,普通用户可读;少数如 /proc/sys/ 子目录支持写入,用于临时调优(如 echo 1 > /proc/sys/net/ipv4/ip_forward)。
观察内核模块与驱动加载情况
模块是内核功能的动态扩展:
- lsmod:只显示当前已加载进内存的模块,依赖关系和引用计数一目了然
-
cat /proc/modules:lsmod 的原始数据源,每行末尾可能带
T(tainted 标志),闭源驱动常有此标记 -
cat /proc/devices:列出已注册的字符设备和块设备主编号,配合
mknod创建设备节点时要用
模块名在 /proc/modules 中不带 .ko 后缀,大小写敏感;nvidia 和 NVIDIA 是不同名字,实际加载名永远小写。


















