网站搜索

/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/filesystems – 内核支持的当前文件系统。
  • /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/ 可提供以下详细信息:

  • /proc//cmdline – 用于启动进程的命令行参数。
  • /proc//status – 详细的状态信息,包括内存使用情况和进程统计信息。
  • /proc//fd – 进程打开的文件的符号链接。

我们以查看名为 /proc/12 的文件夹为例。

cd /proc/12
ls

如果我运行:

cat /proc/12/status

我得到以下信息:

那么这是什么意思?嗯,重要的部分在顶部。从状态文件中我们可以看出,该进程属于rcu_tasks_rude_kthread。显然,它的当前状态是idle,它的进程ID12

我们还可以看到谁在运行这个进程,因为UIDGID都是0,表明这个进程属于root用户。

在任何编号的目录中,您都会有类似的文件结构,最重要的文件结构及其描述如下:

  • cmdline – 进程的命令行
  • environ – 环境变量
  • fd – 文件描述符
  • 限制 – 包含有关流程限制的信息
  • 坐骑 – 相关信息

您还会注意到编号目录中的几个链接:

  • cwd – 指向进程当前工作目录的链接
  • exe – 链接到进程的可执行文件
  • root – 链接到进程的工作目录

这应该可以帮助您开始熟悉 /proc 目录。它还应该提供对许多命令如何获取其信息的深入了解,例如 uptime、lsof、mount 和 ps,仅举几例。