Linux内核具有两个主要功能:控制对计算机上物理设备的访问,并计划进程与这些设备进行交互的时间和方式。 / proc /目录(也称为proc文件系统 )包含特殊文件的层次结构,这些文件代表内核的当前状态-允许应用程序和用户查看内核在系统中的视图。
在/ proc /目录中,您可以找到大量信息,详细说明系统硬件和当前正在运行的任何进程。 另外,用户和应用程序可以操纵/ proc /目录树中的某些文件,以将配置更改传达给内核。
在Linux下,所有数据都存储为文件。 大多数用户都熟悉两种主要文件类型:文本文件和二进制文件。 但是/ proc /目录包含另一种类型的文件,称为虚拟文件 。 因此, / proc /通常被称为虚拟文件系统 。 这些虚拟文件具有独特的品质。 它们中的大多数被列为零字节,但是当查看一个字节时,它可能包含大量信息。 此外,虚拟文件上的大多数时间和日期设置都会反映当前时间和日期,表明它们会不断更新。
我列举了其中一些例子:
1.
此文件用于显示计算机具有的CPU类型以及其他与处理器相关的参数:
- 处理器 —为每个处理器提供一个标识号。 在具有一个处理器的系统上,仅存在0。
- cpu系列 —权威地标识系统中处理器的类型。 对于基于Intel的系统,将数字放在“ 86”前面以确定该值。 这对于尝试识别较旧的系统(例如586、486或386)的体系结构特别有用。由于为这些特定体系结构中的每种体系结构编译了一些RPM软件包,因此该值还可以帮助用户确定要安装的软件包。
- 型号名称 -显示处理器的通用名称,包括其项目名称。
- cpu MHz —以兆赫为单位显示处理器的精确速度,精确到小数点后千位。
- 缓存大小 -显示处理器可用的2级内存缓存量。
- 兄弟姐妹 —显示使用超线程的体系结构在同一物理CPU上的兄弟姐妹CPU的数量。
- 标志 -定义有关处理器的许多不同质量,例如浮点单元(FPU)的存在以及处理MMX指令的能力。
2.
该文件主要用于诊断内存碎片问题。 使用伙伴算法,每一列表示在任何给定时间可用的特定顺序(特定大小)的页面数。 例如,对于区域DMA(直接内存访问),在2 ^(0 * PAGE_SIZE)个内存块中有90个。 类似地,有2个(1 * PAGE_SIZE)块中的6个和2 ^(2 * PAGE_SIZE)个内存块中的2个可用。
DMA行引用系统上的前16 MB,HighMem行引用系统上大于4 GB的所有内存,而Normal行引用之间的所有内存。
3.
该文件列出了Linux内核使用的所有已安装的加密密码,包括每个密码的其他详细信息。 一个示例/ proc / crypto文件如下所示:
4.
该文件显示当前配置的各种字符和块设备(不包括未加载模块的设备)。 以下是此文件的示例输出:
/ proc / devices的输出包括设备的主要编号和名称,并分为两个主要部分:字符设备和块设备。
5.
该文件显示内核当前支持的文件系统类型的列表。 通用/ proc / filesystems文件的示例输出看起来类似于以下内容:
第一列表示文件系统是否已安装在块设备上。 那些以nodev开头的文件未安装在设备上。 第二列列出了支持的文件系统的名称。
如果未将其中一个指定为参数,那么mount命令会在此处列出的文件系统中循环。
6.
该文件提供了有关一段时间内CPU和IO的平均负载以及正常运行时间和其他命令使用的其他数据的信息。 一个示例/ proc / loadavg文件看起来类似于以下内容:
前三列衡量最后一分钟,五分钟和十分钟的CPU和IO利用率。 第四列显示当前正在运行的进程数和进程总数。 最后一列显示最后使用的进程ID。
7.
该文件显示了装入内核的所有模块的列表。 它的内容根据您系统的配置和使用而有所不同,但应以与以下示例/ proc / modules文件输出类似的方式进行组织:
- 第一列包含模块的名称。
- 第二列是指模块的内存大小(以字节为单位)。
- 第三列列出了当前加载了多少个模块实例。 零值表示已卸载的模块。
- 第四列指出该模块是否要依赖另一个模块才能运行,并列出这些其他模块。
- 第五列列出了模块所处的负载状态:“活动”,“正在加载”或“正在卸载”是唯一可能的值。
- 第六列列出了已加载模块的当前内核内存偏移量。 该信息可用于调试目的或用于分析工具(例如oprofile)。
8.
该文件提供了系统正在使用的所有安装的列表:
在此找到的输出与/ etc / mtab的内容类似,不同的是/ proc / mounts是最新的。
第一列指定要挂载的设备,第二列显示挂载点,第三列指示文件系统类型,第四列指示以只读(ro)或读写(rw)挂载该设备)。 第五和第六列是伪值,旨在匹配/ etc / mtab中使用的格式。
9.
该文件包含分区块分配信息。 从基本系统中对该文件的采样类似于以下内容:
除以下各列外,此处的大多数信息对用户而言意义不大:
- major —带有该分区的设备的主号码。 / proc / partitions(3)中的主要数字对应于/ proc / devices中的块设备ide0。
- minor-带有该分区的设备的次编号。 这用于将分区分为不同的物理设备,并与分区名称末尾的数字相关。
- #blocks —列出特定分区中包含的物理磁盘块数。
- name —分区的名称。
在/ proc /文件系统中查看不同的虚拟文件时,某些信息很容易理解,而有些则难以理解。 这就是为什么存在lspci,apm,free,top等实用程序从虚拟文件中提取数据并以有用的方式显示它们的原因。
翻译自: https://www.javacodegeeks.com/2014/02/the-power-of-proc-file-system-in-linux.html