技术员联盟提供win764位系统下载,win10,win7,xp,装机纯净版,64位旗舰版,绿色软件,免费软件下载基地!

当前位置:主页 > 教程 > 服务器类 >

解析Linux系统中的/proc虚拟文件系统

来源:技术员联盟┆发布时间:2018-01-25 06:20┆点击:

  Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、 改变内核设置的机制。尽管在各种硬件平台上的 Linux 系统的 /proc 文件系统的 基本概念都是相同的,但本文只讨论基于 intel x86 架构的 Linux /proc 文件系 统。

  /proc --- 一个虚拟文件系统

  /proc 文件系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。如果你察看文件 /proc/mounts (和 mount 命令一样列出所有已经加载的文件系统),你会看到其中 一行是这样的:

  代码如下:

  grep proc /proc/mounts

  /proc /proc proc rw 0 0

  /proc 由内核控制,没有承载 /proc 的设备。因为 /proc 主要存放由内核控制 的状态信息,所以大部分这些信息的逻辑位置位于内核控制的内存。对 /proc 进行 一次 'ls -l' 可以看到大部分文件都是 0 字节大的;不过察看这些文件的时候,确 实可以看到一些信息。这怎么可能?这是因为 /proc 文件系统和其他常规的文件系 统一样把自己注册到虚拟文件系统层 (VFS) 了。然而,直到当 VFS 调用它,请求 文件、目录的 i-node 的时候,/proc 文件系统才根据内核中的信息建立相应的文件 和目录。

  加载 proc 文件系统

  如果系统中还没有加载 proc 文件系统,可以通过如下命令加载 proc 文件系统:

  代码如下:

  mount -t proc proc /proc

  上述命令将成功加载你的 proc 文件系统。更多细节请阅读 mount 命令的 man page。

  察看 /proc 的文件

  /proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的 状态等信息。大部分 /proc 中的文件和目录提供系统物理环境最新的信息。尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像'more', 'less'或 'cat'这样的程序来查看。当编辑程序试图打开一个虚拟文件时,这个文件就通过内核 中的信息被凭空地 (on the fly) 创建了。这是一些我从我的系统中得到的一些有趣 结果:

  代码如下:

  $ ls -l /proc/cpuinfo

  -r--r--r-- 1 root root 0 Dec 25 11:01 /proc/cpuinfo

  $ file /proc/cpuinfo

  /proc/cpuinfo: empty

  $ cat /proc/cpuinfo

  processor : 0

  vendor_id : GenuineIntel

  cpu family : 6

  model : 8

  model name : Pentium III (Coppermine)

  stepping : 6

  cpu MHz : 1000.119

  cache size : 256 KB

  fdiv_bug : no

  hlt_bug : no

  sep_bug : no

  f00f_bug : no

  coma_bug : no

  fpu : yes

  fpu_exception : yes

  cpuid level : 2

  wp : yes

  flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca

  cmov pat pse36 mmx fxsr xmm

  bogomips : 1998.85

  processor : 3

  vendor_id : GenuineIntel

  cpu family : 6

  model : 8

  model name : Pentium III (Coppermine)

  stepping : 6

  cpu MHz : 1000.119

  cache size : 256 KB

  fdiv_bug : no

  hlt_bug : no

  sep_bug : no

  f00f_bug : no

  coma_bug : no

  fpu : yes

  fpu_exception : yes

  cpuid level : 2

  wp : yes

  flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca

  cmov pat pse36 mmx fxsr xmm

  bogomips : 1992.29

  这是一个从双 CPU 的系统中得到的结果,上述大部分的信息十分清楚地给出了这个系 统的有用的硬件信息。有些 /proc 的文件是经过编码的,不同的工具可以被用来解释 这些编码过的信息并输出成可读的形式。这样的工具包括:'top', 'ps', 'apm' 等。

  得到有用的系统/内核信息

  proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要 的文件:

  /proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)

  /proc/meminfo - 物理内存、交换空间等的信息

  /proc/mounts - 已加载的文件系统的列表

  /proc/devices - 可用设备的列表

  /proc/filesystems - 被支持的文件系统

  /proc/modules - 已加载的模块

  /proc/version - 内核版本

  /proc/cmdline - 系统启动时输入的内核命令行参数

  proc 中的文件远不止上面列出的这么多。想要进一步了解的读者可以对 /proc 的每一个 文件都'more'一下或读参考文献[1]获取更多的有关 /proc 目录中的文件的信息。我建议 使用'more'而不是'cat',除非你知道这个文件很小,因为有些文件 (比如 kcore) 可能 会非常长。

  有关运行中的进程的信息