proc 文件系统
参考
proc 简介
/proc
文件系统是在GUN/Linux
操作系统中一个位于内存中的虚拟文件系统(in-memory pseudo-file system)
, 以文件系统目录和文件形式, 提供一个指向内核数据结构的接口,
通过它能够查看和改变各种系统属性./proc
目录通常情况下是由系统自动挂载在/proc
目录下,但是我们也可以自行手动挂载./proc
目录下的大部分文件都是只读的,部分文件是可写的,我们通过这些可写的文件来修改内核的一些配置;proc
目录是一个控制中心,用户可以通过更改其中某些文件来改变内核的运行状态。proc
目录也是内核提供给我们的查询中心,我们可以通过这些文件查看有关系统硬件及当前正在运行进程的信息。
proc 目录下存的文件
-
该目录下保存的不是真正的文件和目录,而是一些“运行时”信息,如系统内存、磁盘
io
、设备挂载信息和硬件配置信息等。如果读者使用ls -l
命令查看proc
目录下的文件,会
发现该目录下的绝大部分文件大小为 0。虽然这些文件大小为 0,但是,我们却可以使用cat、more
或less
命令查看其中的内容。 -
关于每一个文件的含义,可以参考附件中的
《Linux下_proc目录简介.html》
,或使用下面的命令查看帮助信息man proc
-
常见文件举例
lsmod
命令读取/proc/modules
中的信息lspci
命令读取cat /proc/pci
中的信息cmdline
保存了操作系统的启动参数/proc/loadavg
保存了系统负载的平均值,其前三列分别表示最近1分钟、5分钟及15分的平均负载。反映了当前系统的繁忙情况。/proc/meminfo
当前内存使用的统计信息,常由free
命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;/proc/diskstats
磁盘设备的磁盘I/O统计信息列表;/proc/net/dev
网络流入流出的统计信息,包括接收包的数量、发送包的数量,发送数据包时的错误和冲突情况等。/proc/filesystem
文件可以查看当前系统中支持的文件系统/proc/cpuinfo
文件可以查看 cpu 的详细信息/proc/cmdline
在启动时传递至内核的启动参数,通常由grub启动管理工具进行传递;/proc/devices
系统已经加载的所有块设备和字符设备的信息;/proc/mounts
系统中当前挂载的所有文件系统;/proc/partitions
块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目;/proc/uptime
系统上次启动以来的运行时间;/proc/version
当前系统运行的内核版本号,在作者的Debian系统中,还会显示系统安装的gcc版本;/proc/vmstat
当前系统虚拟内存的统计数据。- 以及很多以
pid
为目录名的进程目录 – 该文档讨论重点
进程目录下常用文件介绍
proc 目录下有很多名字为数字的目录,目录的名称与进程的 pid一一对应(形如/proc[pid]),我们可以通过这些目录查看进程相关的信息。
显然,目录的名称随着进程的生命周期变化,当进程退出时,相应的目录也就会消失。进程目录下也包含了较多的文件和目录,其中,比
较常用的有:
-
cmdline
cmdline 与 /proc/cmdline 文件类似,保存了当前进程的启动命令; # cat cmdline ./a.out
-
cwd
cwd 是一个符号链接(软连接),指向进程的运行目录;
-
exe
exe 也是一个软链接,指向启动进程的可执行文件,通过 /proc/[pid]/exe 可以启动当前进程的一个拷贝;
-
environ
包含于进程相关联的环境变量,变量名用大写字母表示,其值用小写字母表示; # cat environ XDG_SESSION_ID=215 HOSTNAME=localhost.localdomain TERM=xterm SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=172.18.0.104 46259 22 SSH_TTY=/dev/pts4 USER=root LS_COLORS=rs=0:di=01;34:ln=01;...... MAIL=/var/spool/mail/rootPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin PWD=/rootLANG=en_US.UTF-8 HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root SSH_CONNECTION=172.18.0.104 46259 172.18.0.99 22 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0_=./a.out 注意:以上输出经过美化缩减换行,原输出为一行数据
-
fd
fd 目录包含了进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接; fd 目录下的文件,与文件一一对应,我们可以通过 fd 目录下的文件个数,统计当前进程打开的文件句柄数。此外,也可以直接读取文件的内容,就像读取真实文件一样。
-
limits
保存了进程使用资源的限制信息,包括软限制、硬限制以及取值的单位; [root@localhost 23730]# cat limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 12946 12946 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 12946 12946 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
-
task
该目录下包含了当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中。