linux虚拟文件系统 - /proc
简介
Linux 内核提供了一种 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统(即虚拟文件系统),它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过 /proc 得到系统的信息,并可以改变内核的某些参数。
我们查看内核版本号、加载的模块、CPU和内存使用等信息,甚至修改路由转发都是通过 /proc 文件系统进行的,下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
/proc 下常用文件列表
| 路径 | 描述 |
|---|---|
| /proc/version | 系统内核版本号 |
| /proc/modules | 系统当前加载的模块 |
| /proc/cpuinfo | 系统 CPU 的信息 |
| /proc/meminfo | 物理内存、交换空间等的信息 |
| /proc/mounts | 已挂载的文件系统的列表 |
| /proc/cmdline | 系统启动时内核命令行参数 |
| /proc/net/sockstat | socket状态 |
| /proc/net/arp | arp表 |
| /proc/partitions | 分区信息 |
以下是一些其他文件列表
| 路径 | 描述 |
|---|---|
| /proc/buddyinfo | 每个内存区中的每个order有多少块可用,和内存碎片问题有关 |
| /proc/cmdline | 启动时传递给kernel的参数信息 |
| /proc/cpuinfo | cpu的信息 |
| /proc/crypto | 内核使用的所有已安装的加密密码及细节 |
| /proc/devices | 已经加载的设备并分类 |
| /proc/dma | 已注册使用的ISA DMA频道列表 |
| /proc/execdomains | Linux内核当前支持的execution domains |
| /proc/fb | 帧缓冲设备列表,包括数量和控制它的驱动 |
| /proc/filesystems | 内核当前支持的文件系统类型 |
| /proc/interrupts | x86架构中的每个IRQ中断数 |
| /proc/iomem | 每个物理设备当前在系统内存中的映射 |
| /proc/ioports | 一个设备的输入输出所使用的注册端口范围 |
| /proc/kcore | 代表系统的物理内存,存储为核心文件格式,里边显示的是字节数,等于RAM大小加上4kb |
| /proc/kmsg | 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理 |
| /proc/loadavg | 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关 |
| /proc/locks | 内核锁住的文件列表 |
| /proc/mdstat | 多硬盘,RAID配置信息(md=multiple disks) |
| /proc/meminfo | RAM使用的相关信息 |
| /proc/misc | 其他的主要设备(设备号为10)上注册的驱动 |
| /proc/modules | 所有加载到内核的模块列表 |
| /proc/mounts | 系统中使用的所有挂载 |
| /proc/mtrr | 系统使用的Memory Type Range Registers (MTRRs) |
| /proc/partitions | 分区中的块分配信息 |
| /proc/pci | 系统中的PCI设备列表 |
| /proc/slabinfo | 系统中所有活动的 slab 缓存信息 |
| /proc/stat | 所有的CPU活动信息 |
| /proc/sysrq-trigger | 使用echo命令来写这个文件的时候,远程root用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把/proc/sys/kernel/sysrq不能设置为0。这个文件对root也是不可读的 |
| /proc/uptime | 系统已经运行了多久 |
| /proc/swaps | 交换空间的使用情况 |
| /proc/version | Linux内核版本和gcc版本 |
| /proc/bus | 系统总线(Bus)信息,例如pci/usb等 |
| /proc/driver | 驱动信息 |
| /proc/fs | 文件系统信息 |
| /proc/ide | ide设备信息 |
| /proc/irq | 中断请求设备信息 |
| /proc/net | 网卡设备信息 |
| /proc/scsi | scsi设备信息 |
| /proc/tty | tty设备信息 |
| /proc/net/dev | 显示网络适配器及统计信息 |
| /proc/vmstat | 虚拟内存统计信息 |
| /proc/vmcore | 内核panic时的内存映像 |
| /proc/diskstats | 取得磁盘信息 |
| /proc/schedstat | kernel调度器的统计信息 |
| /proc/zoneinfo | 显示内存空间的统计信息,对分析虚拟内存行为很有用 |
/proc 目录中进程N(N表示进程PID)的信息
| 路径 | 描述 |
|---|---|
| /proc/N | pid为N的进程信息 |
| /proc/N/cmdline | 进程启动命令 |
| /proc/N/cwd | 链接到进程当前工作目录 |
| /proc/N/environ | 进程环境变量列表 |
| /proc/N/exe | 链接到进程的执行命令文件 |
| /proc/N/fd | 包含进程相关的所有的文件描述符 |
| /proc/N/maps | 与进程相关的内存映射信息 |
| /proc/N/mem | 指代进程持有的内存,不可读 |
| /proc/N/root | 链接到进程的根目录 |
| /proc/N/stat | 进程的状态 |
| /proc/N/statm | 进程使用的内存的状态 |
| /proc/N/status | 进程状态信息,比stat/statm更具可读性 |
| /proc/self | 链接到当前正在运行的进程 |
/proc 下进程目录的子文件或子文件夹
| 文件或目录名 | 描述 |
|---|---|
| cmdline | 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息 |
| cwd | 指向当前进程运行目录的一个符号链接 |
| environ | 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示 |
| exe | 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝 |
| fd | 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接 |
| limits | 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取;(2.6.24以后的内核版本支持此) |
| maps | 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表 |
| mem | 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取 |
| root | 指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录 |
| stat | 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用 |
| statm | 当前进程占用内存的状态信息,通常以“页面”(page)表示 |
| status | 与stat所提供信息类似,但可读性较好,如下所示,每行表示一个属性信息;其详细介绍请参见 proc的man手册页 |
| task | 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;(内核2.6版本以后支持此功能) |
参考链接
linux虚拟文件系统 - /proc
https://blog.wty.cool/2023/08/05/proc-linux-virtual-file-system/


