Linux内核提供了一种通过/proc文件系统,在运行时访问内核数据结构、改变内核设置的机制。
/proc文件系统是一种内核和内核模块用来向进程发送消息的机制。这个伪文件系统让你可以和内核内部数据结构进行交互,获取有关进程的有用信息,在运行中改变设置(通过改变内核参数)。与其他文件系统不同,/proc运行在内存之中而不是硬盘之中。
/proc由内核控制,没有承载/proc的设备。因为/proc主要存放内核控制的信息,所以大部分这些信息的逻辑位置位于内核控制的内存。对于/proc进行'ls -l'查看时,大部分文件是0字节大小的;不过观察这些文件的时候,确实可以看到一些信息。这是为什么?这是因为/proc文件系统和其他常规的文件系统一样把自己注册到虚拟文件系统层(VFS)了。然而直到当VFS调用它时,请求文件、目录的i-node时候,/proc文件系统才根据内核中的信息建立相应的文件和目录。
得到有用的系统/内核信息
proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:
- /proc/cpuinfo - CPU 的信息(型号, 家族, 缓存大小等)
- /proc/meminfo - 物理内存、交换空间等的信息
- /proc/mounts - 已加载的文件系统的列表
- /proc/devices - 可用设备的列表
- /proc/filesystems - 被支持的文件系统
- /proc/modules - 已加载的模块
- /proc/version - 内核版本
- /proc/cmdline - 系统启动时输入的内核命令行参数
- /proc/XXX – XXX 是指以数字编号的目录,有不少这样的目录,每一个目录表示一个进程(即线程组)
- /proc/sys – 可以修改的系统信息
- /proc/swaps - 要获知swap 空间的使用情况
- /proc/uptime - 获取系统的正常运行时间
- /proc/fs/nfsd/exports - 列出由NFS 共享的文件系统
- /proc/kmsg – 该文件被作为内核日志信息源,它可以被作为一个系统信息调用的接口使用。
- /proc/kcore – 该文件提供了以内核文件格式形式访问系统物理内存,并且可以被gdb 用于检查任意内核数据结构的当前状态。如果装了源码,那么可以通过查看/usr/src/linux/Documentation/filesystems/proc.txt 文件来获取更多的信息。
有关运行中的进程的信息
/proc 文件系统可以用于获取运行中的进程的信息。在/proc 中有一些文件名为数字的子目录。每个目录对应一个进程id (PID)。这样,每一个运行中的进程/proc 中都有一个用它的PID 命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。下面是一些文件(实在太多,只列一部分):
- "cmdline" 包含启动进程时调用的命令行。
- "envir" 进程的环境变两。
- "status" 是进程的状态信息,包括启动进程的用户的用户ID (UID) 和组ID(GID) ..父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"。
- "cwd"是指向进程当前工作目录的符号链接
- "exe"指向运行的进程的可执行程序
- "root"指向被这个进程看作是根目录的目录(通常是"/")。
- "fd"包含指向进程使用的文件描述符的链接。
- "cpu"仅在运行SMP 内核时出现,里面是按CPU 划分的进程时间。
- /proc/self 是一个有趣的子目录,它使得程序可以方便地使用/proc 查找本进程地信息。/proc/self 是一个链接到/proc 中访问/proc 的进程所对应的PID 的目录的符号链接。
通过/proc 与内核交互
上面讨论的大部分/proc 的文件是只读的。而实际上/proc 文件系统通过/proc 中可读写的文件提供了对内核的交互机制。写这些文件可以改变内核的状态,因而要慎重改动这些文件。/proc/sys 目录存放所有可读写的文件的目录,可以被用于改变内核行为.
- /proc/sys/kernel:
- 这个目录包含反通用内核行为的信息.可修改已改变配置.
- /proc/sys/kernel/{domainname, hostname}:
- 存放着机器/网络的域名和主机名。这些文件可以用于修改这些名字。通过修改/proc 文件系统中的文件,我们可以修改主机名.
- /proc/sys/net:
- 这个目录中的文件可以用于修改机器/网络的网络属性。比如,简单修改一个文件,你可以在网络上瘾藏匿的计算机。
- $ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- 这将在网络上瘾藏你的机器,因为它不响应icmp_echo。主机将不会响应其
- 他主机发出的ping 查询。
- 要改回缺省设置,只要
- $ echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
阅读(270) | 评论(0) | 转发(0) |