Linux系统目录之/proc
proc是一个伪文件系统,为用户提供读写内核数据的接口,一般由系统自动挂载到/proc目录,内部的文件和目录记录内核和进程的相关信息。
内部文件和目录并非传统的文件和目录,其size通常是0
/proc下大部分文件是只读的,很多系统工具通过/proc获取信息,比如:
lsmod
等同于cat /proc/modules
lspci
等同于cat /proc/pci
部分文件可写,对于这些文件的修改,等同于使用sysctl
命令重设内核参数。
/proc下一部分文件记录内核相关的信息,比如:
-
/proc/cpuinfo CPU统计信息(型号、规格、指令集等)
-
/proc/meminfo 内存统计信息
-
/proc/stat 内核统计信息(CPU负载、磁盘IO、进程等相关数据)
-
/proc/vmstat 虚拟内存统计信息
-
/proc/version 内核版本信息
对于一个运行中的进程,/proc下存在对应进程ID的目录,内部记录了该进程相关的数据,比如:
-
/proc/$pid 进程子目录
-
/proc/$pid/comm 进程命令名称
-
/proc/$pid/cmdline 完整的命令行字符串
命令行参数使用null字节’\0’分隔,查看命令
cat /proc/$pid/cmdline | tr '\0' ' '
-
/proc/$pid/cwd 指向当前工作目录(current working directory)的软链接
-
/proc/$pid/environ 进程启动所使用的环境变量
记录使用null字节’\0’分隔,查看命令
cat /proc/$pid/environ | tr '\0' '\n'
-
/proc/$pid/exe 指向所执行程序的软链接
可以利用exe软链接恢复误删的执行程序,使用命令
cp /proc/$pid/exe /home/caosiyang/myprogram
-
/proc/$pid/fd 文件描述符子目录,内部条目(软链接)对应于该进程打开的各个文件
可以利用fd子目录下的软链接恢复误删的文件, 使用命令
cp /proc/$pid/fd/1 /home/caosiyang/myfile
-
/proc/$pid/stat 进程状态信息,
ps
命令也从此处获取进程信息 -
/proc/$pid/statm 进程内存使用统计,以page为单位
-
/proc/$pid/status 格式化后更易理解的进程和内存统计信息,数据来自上面的stat和statm
-
/proc/$pid/task 线程子目录,内部目录对应于该进程的各个线程
线程可以修改comm(/proc/$pid/task/$tid/comm),所以可能与进程comm(/proc/$pid/comm)不一致
本文只是抛砖引玉,关于/proc内部各个文件及其字段的详细解释,可以参考 https://man7.org/linux/man-pages/man5/proc.5.html
参考资料