Linux proc文件系统

来源:互联网 发布:阿里云数据库密码修改 编辑:程序博客网 时间:2024/05/17 21:41
    /proc 文件系统是 GNU/Linux 特有的。它是一个虚拟的文件系统,因此在该目录中的所有文件都不会消耗磁盘空间。通过它能够非常简便地了解系统信息,尤其是其中的大部分文件是人类可阅读的(不过还是需要一些帮助)。许多程序实际上只是从/proc 的文件中收集信息,然后按照它们自己的格式组织后显示出来。有一些显示进程信息的程序(topps 等)就是这么作的。/proc 还是了解您系统硬件的好去处。就象那些显示进程信息的程序一样,不少程序只是提供了获取/proc 中信息的接口。

        其中还有一个特殊的子目录:/proc/sys。它让您能够显示内核参数并更改它们,而且这一更改将立即生效。

/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 文件系统才根据内核中的信息建立相应的文件和目录。

        (1) 在浏览 /proc 目录的时候您会发现许多目录的名称是一些数字。这些目录保存了当前系统中运行的所有进程的信息。

        每个目录包含同样的项目。以下简单介绍其中某些项目:

  1. cmdline:该(虚拟)文件包含了启动该进程的整个命令行。它未曾格式化:程序与其参数之间没有空格,行末也没有换行。要查看它,您可以使用:perl -ple 's,\00, ,g' cmdline

  2. cwd:该符号链接指向该进程的当前工作目录。

  3. environ:该文件包含为该进程定义的所有环境变量,格式为 变量=值。与cmdline 文件一样,其内容未曾格式化过:各个变量之间没有分行,文件末尾也没有换行。要查看,可以:perl -pl -e 's,\00,\n,g' environ

  4. exe:这是指向该进程所执行的可执行程序文件的符号链接。

  5. fd:在此子目录中包含了该进程当前打开的所有描述符。参见下文。

  6. maps:当您打印该命名管道内容时(例如使用 cat),您将看到该进程地址空间中当前映射到文件中的那部分。自左至右各列为:与该映射关联的地址空间,与该映射关联的权限,该映射起始位置的偏移量(从文件开始处算起),保存该映射文件设备的主、从序号(十六进制格式),该文件的 inode 序号,以及该文件的文件名。当设备号为 0 且没有 inode 号或文件名时,它就是一个匿名映射。请参阅mmap(2)

  7. root:该符号链接指向该进程使用的根目录。通常为 /,请参阅chroot(2)

  8. status:该文件包含该进程的众多信息:可执行文件名、当前状态、PIDPPID、实际及有效的UIDGID、内存使用情况、以及其他。请注意,statstatm 现已过时。它们包含的信息现存于 status

        (2)除了包括各个进程的信息之外,/proc 也还包含您机器上各种硬件的信息。浏览 /proc 目录,您将看到:

       这些文件的详尽列表将占据大量篇幅,在此我们仅介绍其中一些:

  • cpuinfo:该文件包含(正如它的名称所示)您机器上处理器的信息。

  • modules:该文件包含内核当前使用的模块列表,以及其中每个的使用次数。实际上,这就是 lsmod 命令报告的信息。

  • meminfo:该文件包含您打印该文件内容时的内存使用情况。而 free 命令将以一种易于阅读的格式显示该信息。

  • apm:如果您在使用膝上型计算机,该文件的内容表示电池的当前状态。您可以看到 AC 是否插上,电池的充电状态;如果您的膝上型计算机的 APM BIOS 支持的话(不幸的是,这并非必然),还会显示电池剩余的使用分钟数。该文件本身并不易于阅读,因此您会需要使用 apm 命令将该信息以人类可阅读格式显示出来。

    注意,现代的计算机提供 ACPI 支持以替代 APM。请参阅下文。

  • bus:该子目录包含您机器上的总线能够找到的所有外设信息。这些信息通常是不可阅读的,不过可以使用外部工具(比如lspcidrakelspnp 等)对其中大部分重新格式化。

  • acpi:拥有膝上型计算机的人会对该目录中的某些文件感兴趣。其中他们可以选择某些省电选项。请注意,通过更高级的应用程序(比如包含在acpidkacpi 软件包中的一些程序)来修改这些选项更为容易。

    最令人感兴趣的项目有:

    battery

    显示膝上型计算机包含的电池数量,以及相关的信息(诸如当前剩余容量、最大容量等)。

    button

    让您能够控制“特殊”按钮(比如 power、sleep、lid 等)关联的动作。

    fan

    显示计算机上风扇的状态,它们是否正在运转,以及让您按照某种规则启动/停止它们。对风扇控制的能力数量取决于您的主板。

    processor

    您机器上的每个 CPU 都有一个相应的子目录。不同的处理器有不同的控制选项。移动处理器具有更多可用的特性,包括:

    • 使用多个电源状态的能力,在性能和电源消耗之间平衡的能力。

    • 更改时钟频率的能力以降低 CPU 能源消耗。

    请注意,有一些处理器不提供这些能力。

    thermal_zone

    关于您的系统/处理器如何运行的信息。

(3)/proc/sys 子目录

该子目录的作用是报告各种不同的内核参数,并让您能交互地更改其中的某些。与 /proc 中所有其他文件不同,该目录中的某些文件可以写入,不过这仅针对root

其中的目录以及文件的详细列表将占据过多的篇幅,而且该目录的内容是依赖于系统的,而大部分的文件也仅仅对某些特殊的应用程序有用。然而,以下是该子目录的两个最常见的用途:

  1. 允许路由:即便是 Mandrakelinux 默认的内核也是允许路由的,您必需显式允许它这么做。为此,您只要以root 身份键入以下命令:

    $ echo 1 >/proc/sys/net/ipv4/ip_forward

    如果您要禁用路由,请将上述命令中的 1 改为 0。

  2. 阻止 IP 欺骗:IP 欺骗会让人认为某个来自于外部的某个数据包是来自于它到达的那个接口。这一技术常被骇客(cracker)[27]所使用。您可以让内核阻止这种入侵。请键入:

    $ echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter

    这样,这种攻击就不再可能了。

这些改变仅当系统运行时有效。在系统重新启动之后,它们会改会它们的默认值。要在启动时就改动这些值,您可以将您在 shell 提示符后键入的命令添加到 /etc/rc.d/rc.local 中以免每次都键入它们。另一个方法是修改 /etc/sysctl.conf,参见sysctl.conf(5)



原创粉丝点击