使用Python打造监控工具
/proc目录介绍
在GUN/Linux操作系统中,/proc是一个位于内存中的伪文件系统(in-memory pseudo-filesystem)。该目录下保存的不是真正的文件和目录,而是一些“运行时”信息,如系统内存、磁盘io、设备挂载信息和硬件配置信息等。proc目录是一个控制中心,用户可以通过更改其中某些文件来改变内核的运行状态。/proc也是内核提供给我们的查询中心,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息。在Linux系统中,许多工具的数据来源正是proc目录中的内容,例如,lsmod命令是cat /proc/modules命令的别名,lspci命令是cat /proc/pci命令的别名。
名字是数字的目录保存的是进程的信息。目录的名字是进程的id,因此,我们可以通过读取proc目录下有多少以数字命名的目录来判断当前系统中有多少进程。
代码示例:

/proc目录下常用文件
- /proc/loadavg:保存了系统负载的平均值,其前三列分别表示最近1分钟、5分钟及15分钟的平均负载。反映了当前系统的繁忙情况;
- /proc/meminfo:一般由free命令统计当前内存使用信息,可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;
- /proc/diskstats:磁盘设备的磁盘I/O统计信息列表;
- /proc/net/dev:网络流入流出的统计信息,包括接收包的数量、发送包的数量,发送数据包时的错误和冲突情况等;
- /proc/filesystem:查看当前系统中支持的文件系统;
- /proc/cpuinfo:查看cpu的详细信息;
- /proc/uptime:系统上次启动以来的运行时间;
- /proc/version:当前系统运行的内核版本号
/proc目录下的进程目录常用文件
进程目录下也包含了较多的文件和目录,其中,比较常用的有:
- cmdline:与/proc/cmdline文件类似,保存了当前进程的启动命令;
- cwd:cwd是一个符号链接,指向进程的运行目录;
- exe:exe是一个软链接,指向启动进程的可执行文件,通过/proc/[pid]/exe可以启动当前进程的一个拷贝;
- environ:包含与进程相关联的环境变量,变量名用大写字母表示,其值用小写字母表示;
- fd:fd目录包含了进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接;
- limits:保存了进程使用资源的限制信息,包括软限制、硬限制以及取值的单位;
- task:task目录下包含了当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中。
利用/proc目录找到被删除的文件
Linux下,如果我们删除了较大的文件,但是使用df命令查看发现磁盘可用空间并没有增大,那么很有可能是因为你删除的这个文件正在被某一个进程使用,当我们从外部执行删除命令时文件并没有被真正的删除。只有当进程关闭该文件的文件句柄时,文件才会被真正删除。
因为在/proc目录下保存了所有进程打开的文件,于是我们根据进程id通过在/proc目录下查找进程id的目录,找到该进程打开的文件句柄,并直接将其拷贝回原来的位置,既可恢复被删除的文件。
但是这样做要有个前提就是打开文件句柄的进程还没有释放该文件句柄。
网友评论