proc 是伪文件系统,不在磁盘中,只存在于内存中。
挂载在 /proc 目录下,内核运行时动态生成里面的内容,为用户空间程序提供了一个动态查看和修改内核运行时信息的窗口。
如何使用 proc
手动浏览:使用
ls和cat是最直接的方式。编程读取:应用程序可以像打开普通文件一样
open()、read()/proc下的文件来获取信息,这使得编写系统监控工具变得非常简单。脚本自动化:在 Shell 脚本中使用
cat、grep、awk等工具来解析/proc文件,进行自动化监控和告警。动态调整:使用
echo命令或脚本向/proc/sys/下的文件写入新值来调整系统。
进程信息查看
最主要、最原始的功能,proc 文件系统最初就是为了提供进程相关信息而设计的。
每个正在运行的进程都会在 /proc下有一个以其 PID(进程ID) 命名的目录。
系统信息查看
cat /proc/cpuinfo
cat /proc/meminfo内核参数调整与配置
可以在不重新编译内核、不重启系统的情况下改变内核的行为。
大多数可写文件集中在 /proc/sys/目录下,这个目录被单独称为 sysctl 接口。
硬件信息查询
可用于驱动开发的调试,但更推荐使用 sysfs 文件系统。
/proc/devices:内核已知的字符设备和块设备列
bus/:包含各种总线(如PCI、USB)的子目录,可以查看连接到总线上的设备信息。
dma:已注册的DMA通道列表
ls /proc/bus/pci/ # 查看PCI设备
虽然 proc文件系统非常重要且历史悠久,但随着 Linux 的发展,一些新的虚拟文件系统被引入来分担它的职责,使其更加规范化:
sysfs(/sys):用于内核设备模型。它比proc更结构化,主要用于表示设备、驱动、总线之间的关系和属性。电源管理、设备热插拔等信息现在更推荐放在/sys下。proc中关于单个进程的信息和部分非设备信息则保留了下来。debugfs(/sys/kernel/debug):专门用于内核调试。开发人员可以将调试信息放在这个文件系统中,它提供了更大的灵活性,但对生产环境不安全。configfs:用于在线配置复杂的、用户可创建的内核对象。