linux /proc 详解
本文整理了一下 linux /proc
下的几个常用的目录和文件,可供查阅,之后在学习工作中有别的用到的话会再补充。
/proc 简介
Linux系统上的/proc
目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc
是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
另外,/proc
是存储在内存(RAM)中,而非硬盘中的,不占用外部存储空间。
基于/proc
文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。
为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi
目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N
中存储的则是系统当前正在运行的进程的相关信息,其中N
为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。
大多数虚拟文件可以使用文件查看命令如cat
、more
或者less
进行查看,注意\proc
中文件通常比较长,直接使用cat
命令来查看全部信息可读性不佳。可以用more
和cat
命令,关于Linux中查看文件内容的命令,可参考博客:Linux查看文件内容命令:cat, tail, head, more, less。
\proc
中有些文件信息表述的内容可以一目了然,但大部分文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm
、free
、lspci
或top
查看时却可以有着不错的表现。
/proc的目录结构
/proc的目录结构大致如下:
/proc
├── 1
│ ├── arch_status
│ ├── attr [error opening dir]
│ ├── autogroup
│ ├── auxv
...
├── 2
│ ├── arch_status
│ ├── attr [error opening dir]
│ ├── autogroup
...
...
├── execdomains
├── fb
├── filesystems
├── sys
...
- 有些以数字为名称的目录,对应着当前运行的各个进程,目录中时该进程的相关信息,将在下一小节介绍。
- 直接在
/proc
目录下的文件,则存储了本机相关的一些信息,如/proc/cpuinfo
存储cpu的相关信息等,将在下下小节较少。 - 不同于
/proc
的其他文件或目录都是只读的,在/proc/sys
目录下,有一些可以修改的文件,将在下下下小节介绍。
/proc/[PID] 进程目录中的常见文件介绍
/proc
目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。即下表中的文件或目录均在/proc/[PID]/
之下。
文件 | 内容 |
---|---|
cmdline | 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息 |
cwd | 指向当前进程运行目录的一个符号链接 |
environ | 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示 |
exe | 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝 |
fd | 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接 |
limits | 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取 |
maps | 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表 |
mem | 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取 |
root | 指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录 |
stat | 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用 |
statm | 当前进程占用内存的状态信息,通常以“页面”(page)表示 |
status | 与stat所提供信息类似,但可读性较好,其详细介绍请参见 proc的man手册页 |
task | 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容 |
/proc 目录下常见的文件介绍
/proc
目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。即下表中的文件或目录均直接在/proc
之下。
信息文件 | 内容 |
---|---|
/proc/apm | 高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用 |
/proc/buddyinfo | 用于诊断内存碎片问题的相关信息文件 |
/proc/cmdline | 在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递 |
/proc/cpuinfo | 处理器的相关信息的文件 |
/proc/crypto | 系统上已安装的内核使用的密码算法及每个算法的详细信息列表 |
/proc/devices | 系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的设备类型)名 |
/proc/diskstats | 每块磁盘设备的磁盘I/O统计信息列表 |
/proc/dma | 每个正在使用且注册的ISA DMA通道的信息列表 |
/proc/execdomains | 内核当前支持的执行域(每种操作系统独特“个性”)信息列表 |
/proc/fb | 帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息 |
/proc/filesystems | 当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型 |
/proc/interrupts | X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个I/O设备均有自己的中断号 |
/proc/iomem | 每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息 |
/proc/ioports | 当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,第一列表示注册的I/O端口范围,其后表示相关的设备 |
/proc/kallsyms | 模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;通常这个文件中的信息量相当大 |
/proc/kcore | 系统使用的物理内存,以ELF核心文件(core file)格式存储,其文件大小为已使用的物理内存(RAM)加上4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由GBD通常调试工具使用,但不能使用文件查看命令打开此文件 |
/proc/kmsg | 此文件用来保存由内核输出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要试图使用查看命令打开此文件 |
/proc/loadavg | 保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟、每5秒钟及每15秒的负载平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的PID |
/proc/locks | 保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX表示目前较新类型的文件锁,由lockf系统调用产生,FLOCK是传统的UNIX文件锁,由flock系统调用产生;第三列也通常由两种类型,ADVISORY表示不允许其他用户锁定此文件,但允许读取,MANDATORY表示此文件锁定期间不允许其他用户任何形式的访问 |
/proc/mdstat | 保存RAID相关的多块磁盘的当前状态信息 |
/proc/meminfo | 系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值 |
/proc/mounts | 在内核2.4.29版本以前,此文件的内容为系统当前挂载的所有文件系统,在2.4.19以后的内核中引进了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向/proc/self/mounts(每个进程自身挂载名称空间中的所有挂载点列表)文件的符号链接;/proc/self是一个独特的目录,后文中会对此目录进行介绍; |
/proc/modules | 当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看 |
/proc/partitions | 块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目 |
/proc/pci | 内核初始化时发现的所有PCI设备及其配置信息列表,其配置信息多为某PCI设备相关IRQ信息,可读性不高,可以用“/sbin/lspci –vb”命令获得较易理解的相关信息 |
/proc/slabinfo | 在内核中频繁使用的对象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了这些对象相关slap的信息;详情可以参见内核文档中slapinfo的手册页 |
/proc/stat | 实时追踪自系统上次启动以来的多种统计信息 |
/proc/swaps | 当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的信息分别存储于/proc/swap目录中的单独文件中,而其优先级数字越低,被使用到的可能性越大 |
/proc/uptime | 系统上次启动以来的运行时间,如下所示,其第一个数字表示系统运行时间,第二个数字表示系统空闲时间,单位是秒 |
/proc/version | 当前系统运行的内核版本号,在作者的RHEL5.3上还会显示系统安装的gcc版本 |
/proc/vmstat | 当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较好 |
/proc/zoneinfo | 内存区域(zone)的详细信息列表,信息量较大,下面列出的是一个输出片段 |
/proc/sys目录详解
与/proc
下其它文件的“只读”属性不同的是,管理员可对/proc/sys
子目录中的许多文件内容进行修改以更改内核的运行特性,事先可以使用ls -l
命令查看某文件是否“可写入”。写入操作通常使用类似于echo DATA > /path/to/your/filename
的格式进行。
需要注意的是,即使文件可写,其一般也不可以使用编辑器进行编辑。
/proc/sys/net
所有的TCP/IP调优参数都位于/proc/sys/net
目录。例如, 下面是最重要的一些调优参数。
文件名 | 内容 |
---|---|
/proc/sys/net/core/rmem_max | 最大的TCP数据接收缓冲 |
/proc/sys/net/core/wmem_max | 最大的TCP数据发送缓冲 |
/proc/sys/net/ipv4/tcp_timestamps | 时间戳在TCP的包头增加12个字节 |
/proc/sys/net/ipv4/tcp_sack | 有选择的应答 |
/proc/sys/net/ipv4/tcp_window_scaling | 支持更大的TCP窗口. 如果TCP窗口最大超过64K, 必须设置该数值为1 |
/proc/sys/dev
为系统上特殊设备提供参数信息文件的目录,其不同设备的信息文件分别存储于不同的子目录中,如大多数系统上都会具有的/proc/sys/dev/cdrom
和/proc/sys/dev/raid
(如果内核编译时开启了支持raid的功能) 目录,其内存储的通常是系统上cdrom和raid的相关参数信息文件。
/proc/sys/kernel
文件名 | 内容 |
---|---|
/proc/sys/kernel/ctrl-alt-del | 该文件有一个二进制值,该值控制系统在接收到ctrl+alt+delete按键组合时如何反应。 |
proc/sys/kernel/msgmax | 该文件指定了从一个进程发送到另一个进程的消息的最大长度(bytes)。进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。 |
/proc/sys/kernel/msgmnb | 该文件指定一个消息队列的最大长度(bytes) |
/proc/sys/kernel/msgmni | 该文件指定消息队列标识的最大数目,即系统范围内最大多少个消息队列 |
/proc/sys/kernel/panic | 该文件表示如果发生“内核严重错误(kernel panic),则内核在重新引导之前等待的时间(秒) |
proc/sys/kernel/shmall | 该文件表示在任何给定时刻,系统上可以使用的共享内存的总量(bytes) |
/proc/sys/kernel/shmmax | 该文件表示内核所允许的最大共享内存段的大小(bytes)(建议:物理内存*0.5) |
/proc/sys/kernel/shmmni | 该文件表示用于整个系统的共享内存段的最大数目(个) |
/proc/sys/kernel/sem | 该文件用于控制内核信号量,信号量是System VIPC用于进程间通讯的方法 |
/proc/sys/kernel/threads-max | 该文件表示内核所能使用的线程的最大数目 |
/proc/sys/fs
文件名 | 含义 |
---|---|
/proc/sys/fs/file-max | 该文件指定了可以分配的文件句柄的最大数目。 |
/proc/sys/fs/file-nr | 该文件与 file-max 相关,它有三个值:已分配文件句柄的数目、已使用文件句柄的数目、文件句柄的最大数目。该文件是只读的,仅用于显示信息。 |
Ref:
https://www.cnblogs.com/liushui-sky/p/9354536.html
http://blog.chinaunix.net/uid-22159621-id-1789315.html
https://www.cnblogs.com/machangwei-8/p/10354636.html