在本文中,小编将深入研究/proc目录的内容,以更好地了解其功能。值得注意的是,/proc目录是所有Linux发行版的共同功能,无论其风格或体系结构是怎样的。
首先需要了解的一个误区是,/proc目录不是传统意义上的文件系统,它是一个虚拟文件系统,包含有关进程的信息以及procfs中其它与系统相关的数据。该文件系统映射到/proc目录并在系统引导过程中安装。
什么是/proc
/proc文件系统充当内核数据结构和运行时信息的接口,它为用户和应用程序提供了一种访问有关进程、系统配置、硬件等详细信息的方式,方法是通过虚拟文件的层次结构公开这些数据。要查看/proc文件系统中文件和目录的完整列表,可以使用ls命令,如下所示:
$ ls /proc
导航到/proc
当你导航到/proc目录时,会注意到有一些听起来很熟悉的文件,然后是一大堆编号的目录,每个目录对应于系统上正在运行的一个进程:
$ cd /proc $ ls
这些编号的目录代表进程,即进程 ID(PID),并且在其中包含占用它们的命令。这些文件包含系统信息,例如内存(meminfo)、CPU信息(cpuinfo) 和可用文件系统。以下是你将遇到的一些关键文件和目录:
/proc/cpuinfo
– 列出有关系统上CPU的信息,例如型号、速度和内核数量。/proc/meminfo
– 列出有关内存使用情况和统计信息的详细信息,其中包含内存总量、可用内存以及每个进程使用的内存。/proc/filesystems
– 包含内核支持的所有文件系统的列表。/proc/sys
– 列出内核的配置和运行时参数。/proc/loadavg
– 显示不同时间间隔(例如1分钟、5分钟和15分钟)的系统负载平均值。/proc/self
– 指向进程自己的目录的符号链接。/proc/stat
– 包含有关系统的各种统计数据,例如正在运行的进程数、中断数以及每个CPU状态所花费的时间量。/proc/uptime
– 包含系统已运行的时间量。/proc/PID
– 包含有关特定进程的信息,其中PID是进程ID。
提取系统信息
/proc/meminfo用于显示Linux系统的内存使用情况和统计信息,其中包含各种内存相关指标的快照,可用于监控系统性能和资源利用率,命令如下:
$ cat /proc/meminfo
如上所示,/proc/meminfo包含大量有关系统内存的信息,包括可用总量(以kb为单位)和前两行的可用量。对/proc中的任何文件运行cat命令都会输出其内容。通过运行以下命令可以在手册页中获得有关任何文件的信息:
$ man 5 /proc/<filename>
这里将简要介绍一下/proc文件:
- /proc/cmdline – 内核命令行信息。
- /proc/console – 有关当前控制台的信息,包括tty。
- /proc/devices – 当前为正在运行的内核配置的设备驱动程序。
- /proc/dma – 有关当前DMA通道的信息。
- /proc/fb – 帧缓冲设备。
- /proc/filesystem s – 内核支持的当前文件系统。
- /proc/iomem – 设备的当前系统内存映射。
- /proc/ioports – 用于与设备进行输入输出通信的注册端口区域。
- /proc/loadavg – 系统平均负载。
- /proc/locks – 当前被内核锁定的文件。
- /proc/meminfo – 有关系统内存的信息(参见上面的示例)。
- /proc/misc – 为各种主要设备注册的各种驱动程序。
- /proc/modules – 当前加载的内核模块。
- /proc/mounts – 系统使用的所有挂载的列表。
- /proc/partitions – 有关系统可用分区的详细信息。
- /proc/pci – 有关每个PCI设备的信息。
- /proc/stat – 自上次重新启动以来保留的记录或各种统计数据。
- /proc/swap – 有关交换空间的信息。
- /proc/uptime – 正常运行时间信息(以秒为单位)。
- /proc/version – 安装的内核版本、gcc版本和Linux发行版。
提取进程信息
在/proc的编号目录中,你将找到一些文件和链接。请记住,这些目录的编号与在其中运行的命令的PID相关。例如,导航至可/proc/<PID>
提供以下详细信息:
/proc/<PID>/cmdline
– 用于启动进程的命令行参数。/proc/<PID>/status
– 详细的状态信息,包括内存使用情况和进程统计信息。/proc/<PID>/fd
– 进程打开的文件的符号链接。
这里将用一个例子来查看一个名为/proc/12的文件夹。
$ cd /proc/12 $ ls
如果运行:
$ cat /proc/12/status
将得到以下信息:
那么这是什么意思?是的,重要的部分在顶部。从状态文件中可以看出该进程属于rcu_tasks_rude_kthread。显然,它的当前状态是idle,进程ID是12。此外,还可以看到谁在运行这个进程,因为UID和GID都是0,表明这个进程属于root用户。
在任何编号的目录中,你都会有类似的文件结构,最重要的文件结构及其描述如下:
- cmdline – 进程的命令行
- environ – 环境变量
- fd – 文件描述符
- limits – 包含有关过程限制的信息
- mounts – 相关信息
另外,你还会注意到编号目录中的许多链接:
- cwd – 进程当前工作目录的链接
- exe – 链接到进程的可执行文件
- root – 链接到进程的工作目录
总结
当然,通过以上解释说明,你应该可以简单熟悉/proc文件系统。当然,/proc还提供对许多命令来获取其它信息的,例如uptime、lsof、mount和ps,这也仅仅举几例而已。
需要注意的是,/proc文件系统中的文件和目录并不是普通的文件,它们只是内核提供的接口,读取它们并不会真正读取磁盘上的数据。因此,用户可以通过/proc文件系统获取系统和进程实时信息,但不能修改其中内容。