如何使用 /proc 文件系统来监视你的 Linux 系统
今天,我们将深入研究/proc目录的内容,以更好地了解其功能。值得注意的是,/proc目录是所有 Linux 发行版的共同功能,无论其风格或架构如何。
我们必须立即澄清的一个误解是,/proc目录不是传统意义上的传统文件系统。
它是一个虚拟文件系统,包含有关 procfs 中的进程和其他系统相关数据的信息。此文件系统映射到/proc目录,并在系统启动过程中挂载。
Linux 中的 /proc 是什么
/proc文件系统作为内核数据结构和运行时信息的接口,通过虚拟文件层次结构公开这些数据,为用户和应用程序提供了一种访问有关进程、系统配置、硬件等详细信息的方法。
要查看/proc文件系统中文件和目录的完整列表,可以使用ls 命令,如图所示。
$ ls /proc
在 Linux 中导航 /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 – 包含有关流程限制的信息
- 坐骑– 相关信息
您还会注意到编号目录中有许多链接:
- cwd – 指向进程当前工作目录的链接
- exe – 链接到进程的可执行文件
- root – 链接到进程的工作目录
这应该能让你开始熟悉/proc目录。它还应该让你了解许多命令如何获取其信息,例如uptime、lsof、mount和ps,仅举几例。