linux系统之proc文件系统详解及代码实现

        今天是在读<<nginx的运维与实战>>这本书的时候,发现了一个概念,Linux系统是通过proc文件系统实现访问内核内部数据结构及改变内核参数的,这个时候我就在想,我从事云平台开发运维行业也有些日子,不能说太厉害吧,但至少也算是中级运维工程师.

        但是第一反应,我不知道这个文件系统是干嘛用的,总得来说,就是突然发现自己对于linux的内核系统,以及一卸基础知识不是那么的牢固,除了常用的一些知识点和命令,真的很少有仔细的研究过.

         Linux /proc这个特殊的目录包含有关Linux系统的所有详细信息,包括其内核、进程和配置参数。通过研究/proc目录,可以了解Linux命令的工作原理,甚至可以执行一些管理任务。

        我们将学习/proc目录并熟悉它。/proc目录存在于所有Linux系统上,无论其风格或体系结构如何。

        /proc中的文件不是真正的文件,它们充当内核数据结构和进程信息的接口。由于它们不是真正的文件,文件大小等属性不适用于它们。

当我查看这个文件的时候,出现了一个很好奇的问题,为什么我的这个文件目录下面这么多以数字命名的目录, 同样几乎所有的目录的字节大小都是0,这样印证了我们上面说的(由于它们不是真正的文件,文件大小等属性不适用于它们。)

最有趣的地方来了 ,/proc文件系统中几乎所有文件的大小都是0字节。让许多用户困惑的是,尽管它们的大小为0,但在查看时仍然包含数据。这怎么可能?

但是随便进入一个0字节的目录下面ls一下,可以发现 每一个目录里面都有许多数据文件 

这是为什么呢?

        Linux能够处理许多不同类型的文件系统,因为它被称为VFS(虚拟文件系统)。/proc文件系统也由内核使用VFS访问。因此,当用户试图访问/proc文件系统中的文件时,proc文件系统会借助内核中的信息创建该文件的内容。这就是为什么在列出/proc目录时,大多数目录的大小显示为0字节,但在访问时会动态填充。 

这里我们可以检查一下

        linux中的“file”命令用于通过检查文件的内容来确定文件的类型。如果文件为空,它将给出“文件为空”的输出。让我们尝试使用file命令检查任何/proc文件的文件类型。

输出表明文件为空。但是,让我们尝试使用vim、cat或更少的编辑器访问该文件,发现每一个文件里都是有值的

因此,当您访问内容时,当前值将从内核填充。这就是为什么您可以从/proc中的文件获得系统的最新和准确状态的原因。

我们之前看到proc手册页将proc定义为“进程信息伪文件系统”。这是因为它包含所有当前正在运行的进程的详细信息。再回到上面的问题/proc的目录列表,就是很多以数字,编号命名的目录是什么意思呢

这些是目录,当进程开始和停止时,它们会动态地出现和消失。以各自PID命名的每个目录都包含进程当前状态的详细信息,我们随便进入一个PID看看里面的信息。

那这里我们就随便以一个进程目录下的文件进行讲解

auxv

包含传递给进程的 ELF 解释器信息,格式是每一项都是一个 unsigned long长度的 ID 加上一个 unsigned long 长度的值。

cmdline

该文件保存了进程的完整命令行. 如果该进程已经 被交换出内存, 或者该进程已经僵死, 那么就没有 任何东西在该文件里,这时候对该文件的读操作将返回零 个字符. 该文件以空字符 null 而不是换行符作为结 束标志.

comm

comm 包含进程的命令名。

cwd

一个符号连接, 指向进程当前的工作目录. 例如, 要找出进程 20 的 cwd, 你可以:cd /proc/20/cwd; /bin/pwd

exe

也是一个符号连接, 指向被执行的二进制代码 

这里我也只是简单的列举几个 ,更多的大家可以查阅资料了解一下

总结

proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

系统中当前运行的每一个进程都有对应的一个目录在 proc 下,以进程的 PID 号为目录名,它们是读取进程信息的接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值