Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
简单来讲,/proc
目录即保存在系统内存中的信息,大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。
/proc 目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号(PID),里面包含对应进程相关的多个信息文件:
ls -al /proc
每一个进程对应许多相关文件
ls -al /proc/1289
一些常见的进程文件:
cmdlinecmdline 文件存储着启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息。可以通过查看cmdline目录获取启动指定进程的完整命令:
cat /proc/2889/cmdline
cwd
cwd 文件是一个指向当前进程运行目录的符号链接。可以通过查看cwd文件获取目标指定进程环境的运行目录:
ls -al /proc/1289/cwd
之后我们可以使用ls查看该运行目录下的文件
ls /proc/1289/cwd
exe
exe 是一个指向启动当前进程的可执行文件(完整路径)的符号链接。通过exe文件我们可以获得指定进程的可执行文件的完整路径:
ls -al /proc/1289/exe
environ
environ 文件存储着当前进程的环境变量列表,彼此间用空字符(NULL)隔开。变量用大写字母表示,其值用小写字母表示。可以通过查看environ目录来获取指定进程的环境变量信息:
cat /proc/2889/environ
常用以读取环境变量中的SECRET_KEY或FLAG
fdfd 是一个目录,里面包含着当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接,即每个通过这个进程打开的文件都会显示在这里。所以我们可以通过fd目录里的文件获得指定进程打开的每个文件的路径以及文件内容。
查看指定进程打开的某个文件的路径:
ls -al /proc/1289/fd
查看指定进程打开的某个文件的内容:
ls -al /proc/1289/fd/4
在 linux 系统中,如果一个程序用open()打开了一个文件但最终没有关闭他,即便从外部(如os.remove(SECRET_FILE))删除这个文件之后,在 /proc 这个进程的 pid 目录下的 fd 文件描述符目录下还是会有这个文件的文件描述符,通过这个文件描述符我们即可得到被删除文件的内容。
self/proc/self
表示当前进程目录。我们可以通过/proc/$pid/
来获取指定进程的信息,这个方法需要知道进程pid。为了更方便的获取本进程的信息,linux提供了/proc/self
目录,等价于/proc/本进程pid
。
-
获取当前启动进程的完整命令:
cat /proc/self/cmdline
-
获取目标当前进程环境的运行目录与目录里的文件:
ls -al /proc/self/cwd ls /proc/self/cwd
-
获取当前进程的可执行文件的完整路径:
ls -al /proc/self/exe
-
获取当前进程的环境变量
cat /proc/self/environ
-
获取当前进程打开的文件内容
cat /proc/self/fd/{id}
如何通过require_once来多次包含同一个文件:
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?