
proc 文件系统是一个虚拟文件系统,它以文件系统的形式为应用层提供访问系统内核数据的接口。用户和应用程序可以通过 proc 文件系统获取系统信息和进程相关信息,对 proc 文件系统的读写相当于与内核进行通信。然而,与普通文件不同,proc 文件系统是动态创建的,文件本身并不存在于磁盘中,只存在于内存中。因此,它被称为虚拟文件系统,类似于 devfs。
proc 文件系统特点如下:
proc 文件系统通常挂载在系统的 /proc 目录下。对于内核开发者(如驱动开发工程师)来说,proc 文件系统提供了一种调试内核的方法:通过查看 /proc/xxx 文件,可以获取内核特定数据结构的值,对比添加新功能前后的数据变化,从而判断该功能的影响是否合理。
在 /proc 目录下包含了一些重要的目录和虚拟文件如下所示:

在 /proc 目录下,可以看到许多以数字命名的文件夹,例如 100038、2299、98560 等。这些数字对应的是各个进程的 PID(进程标识符)。每个进程在内核中都有一个唯一的编号,即 PID,用来区分不同的进程。这些以数字命名的文件夹中记录了各个进程的相关信息。不同的信息通过不同的虚拟文件呈现。
以下是对 /proc 目录下各个文件和子目录的详细说明:
进程相关信息
系统相关信息
其他有用的虚拟文件
cat 命令读取 /proc 文件系统cat 命令是一个简单且常用的方式来读取 /proc 目录下的虚拟文件。
查看内核版本:
cat /proc/version输出类似于:
Linux version 5.4.0-42-generic (buildd@lgw01-amd64-040) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020查看系统负载:
cat /proc/loadavg输出类似于:
0.00 0.01 0.05 1/103 1234open() 和 read() 函数读取 /proc 文件系统在编程中,可以使用标准的文件操作函数来读取 /proc 文件系统中的内容。以下是一个简单的 C 程序示例:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
void read_proc_file(const char *filepath) {
int fd = open(filepath, O_RDONLY);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
char buffer[BUFFER_SIZE];
ssize_t bytesRead;
while ((bytesRead = read(fd, buffer, sizeof(buffer) - 1)) > 0) {
buffer[bytesRead] = '\0';
printf("%s", buffer);
}
if (bytesRead == -1) {
perror("read");
close(fd);
exit(EXIT_FAILURE);
}
close(fd);
}
int main() {
read_proc_file("/proc/version");
return 0;
}输出类似于:
Linux version 5.4.0-42-generic (buildd@lgw01-amd64-040) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020通过 cat 命令和编程接口,用户和开发者可以方便地访问和读取 /proc 文件系统中的实时信息。这些信息对于系统监控、调试和优化非常有用。
作者:不脱发的程序猿。来源:CSDN 原文(CC BY-SA 4.0)。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。