存储 频道

proc文件系统功能总览

  【IT168 技术】在Linux里,你可以使用proc虚拟文件系统来访问各种文件信息,包括当前正在运行的进程和电池状态。Proc文件系统是虚拟的,因为它由内存创建,并于系统更改的时候动态地更新。要获取系统信息的访问权,你应该使用标准文件API,例如fopen,fread,在proc文件系统里读取适当的文件。

  开始认真考虑Proc文件系统的一大特点是测试不需要任何的代码。

  举个例子来说,要获得系统的CPU信息,你只需要这样做:

  cat /proc/cpuinfo

  得到的输出是这样的:

  processor : 0

  vendor_id : GenuineIntel

  cpu family : 6

  model : 5

  model name : Pentium II (Deschutes)

  stepping : 2

  cpu MHz : 300.010

  cache size : 512 KB

  fdiv_bug : no

  hlt_bug : no

  f00f_bug : no

  coma_bug : no

  fpu : yes

  fpu_exception : yes

  cpuid level : 2

  wp : yes

  flags : fpuvme de psetscmsrpaemce cx8 sep mtrrpgemcacmov pat pse36 mmxfxsr

  bogomips : 598.01

  输出结果是易读的,而且很容易在代码中分析。不幸地,不是每种proc文件系统功能都一样,因为数据的指令不同,不过它们都是大同小异的。

  如果你仔细观察输出,就会发现分析这些字段异常简单。不过,写一个普通proc文件并不是一件容易的事,因为某些字段隔离器可能是另一个proc文件数据的一部分。因此,你需要为每个你需要访问的proc文件专门写一段代码。

  虽然输出中的标记行看起来是被空格分隔的,但是实际上它们是被nul字符分隔的。我使用cat命令来显示CPU的信息,cat自动处理内含的nul。不幸地,所有的C库字符串命令不能正确处理,你需要使用memchr这样的命令来处理这些字符串。

  下面是你能利用proc文件系统实现的5点非常酷的文件系统功能:

  ◆ 进程信息:对于系统中的任何一个进程来说,在proc的子目录里都有一个同名的进程ID。在这个目录下,你将可以找到以下的条目:cmdline, cwd, environ, exe, fd, maps, mem, root, stat, statm, 以及status。某些信息仅对超级用户账号可见,例如进程根目录。你同样需要超级用户的全县来获取当前的工作目录。到每一个单独的含有现有进程信息的进程有一些可用的专门链接。对于系统里的任何一个进程来说,都有一个单独的自链接指向进程信息。这个的用处之一就是从进程中获取命令行信息。要实现这一目的,使用cmdline文件更加可靠。

  ◆高级电源管理(APM)信息:如果你需要了解电池状态,你也可以从/proc/apm中获得。它包含了一个确定系统在使用AC还是电池、电池的充电程度以及电池的剩余时间的标记。不过,剩余时间的标记看起来不那么准确。

  ◆CPU信息:利用cpuinfo文件,你可以获得CPU当前的准确信息。

  ◆ 负载信息:loadavg文件包含了负载信息。负载是系统被使用的程度。它由3个从0到1变化的数字来行量。其中一个是最高利用率,一个是平均利用率,一个是最低利用率。平均值是最有用的。

  ◆系统内存信息:meminfo文件包含了系统内存的详细信息。它显示了物理内存的数量,可用交换空间的数量,空闲内存的数量等等。

  你需要注意的一点是,所有cat命令显示的空格分割符都是nul分隔符。那么,举个例子,apm文件包含一条单独的空行,它一定是由nul字符组成的。

  从proc文件系统中,你能得到许多系统或进程的信息。正因为如此,你必须为相应的信息配置恰当的权限例如,根和cwd目录应该仅有超级用户能够访问。

0
相关文章