linux 中/proc里常见文件作用

面试中,可能会遇到关于/proc目录下文件内容及作用的问题,总结一下。

/proc 目录介绍

在 GUN/Linux 操作系统中的/proc是一个位于内存中的伪文件系统(或者叫做虚拟文件系统)。该目录下保存的不是真正的文件和目录,而是一些"运行时"的信息,例如系统内存、磁盘IO、设备挂载信息和硬件配置信息等。proc目录是一个控制中心,用户可以通过更改其中某些文件来改变内核的运行状态proc目录也是内核提供给一个的查询中心,可以通过这些文件查看有关系统硬件及当前正在运行进程的信息。在 Linux 系统中,许多工具的数据来源正是proc目录中的内容,例如:lsmod命令就是cat /proc/modules命令的别名,lspci命令是cat /proc/pci命令的别名

简单一点来讲,/proc目录就是保存在系统中的信息,其包含许多以数字命名的子目录,这些数字代表着当前系统正在运行进程的进程号里面包含对应进程相关的多个信息文件

一般来说,在 /proc目录中会存在以下的文件和目录

/proc/apm

高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用

/proc/buddyinfo

用于诊断内存碎片问题的相关信息文件

/proc/cmdline

在启动时传递至内核的相关参数信息,这些信息通常由lilogrub等启动管理工具进行传递

/proc/cpuinfo

处理器的相关信息的文件,包括频率、类型、功能等

/proc/crypto

系统上已安装的内核使用的密码算法及每个算法的详细信息列表

/proc/devices

记录系统各个主要设备的主要设备代号

/proc/diskstats

每块磁盘设备的磁盘I/O统计信息列表(内核2.5.69以后的版本支持此功能)

/proc/ioports

记录系统上各个设备所配置的I/O地址

/proc/interrupts

查看系统中断信息

/proc/meminfo

统中关于当前内存的利用状况等的信息,常由free命令使用,可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值

/proc/modules

系统已经加载的模块列表

/proc/mounts

系统已经挂载的数据

/proc/partitions

记录硬盘分区的信息

/proc/uptime

机器在线的时间

/proc/version

内核版本

/proc/pid (即进程ID数字组成的文件)

每一个 /proc/pid 目录中还存在一系列目录和文件, 这些文件和目录记录的都是关于 pid 对应进程的信息. 例如在 /proc/pid 的目录下存在一个 task 目录, 在 task 目录下又存在 task/tid 这样的目录, 这个目录就是包含此进程中的每个线程的信息, 其中的 tid 是内核线程的 tid, 通过 GETDENTS 遍历 /proc 就能够看到所有的 /proc/pid 的目录, 当然通过 ls -al /proc 的方式也可以看到所有的信息

/proc/stat

记录节点系统所有CPU的活动信息。该文件中的所有值都是从系统启动开始累积到当前时刻一些系统和内核信息

# cat /proc/stat 
cpu  60382 1 80032 198934063 2349 0 109 0 0 0
cpu0 2405 0 2084 4140924 682 0 6 0 0 0
...  # 此处较多冗余信息,简化之
cpu47 200 0 134 4147222 10 0 0 0 0 0

intr 33622492 64 ... 0 0 0 0 # 此处较多冗余信息,简化之
ctxt 68533835
btime 1528905555
processes 318904
procs_running 1
procs_blocked 0
softirq 16567860 0 3850777 8555 5448802 116727 0 1 3577293 1290 3564415

字段含义分析

name   user  nice   system      idle      iowait  irrq  softirq  steal guest guest_nice 
cpu    60382   1     80032     198934063   2349     0     109      0     0       0
cpu0   2405    0     2084      4140924     682      0     6        0     0       0
cpu1   200     0     134       4147222     10       0     0        0     0       0

 时间单位: jiffies ( 1 jiffies = 0.01s )  

常用计算等式:CPU时间 = user + system + nice + idle + iowait + irq + softirq

intr 33622492 64 ... 0 0 0 0 # 此处较多冗余信息,简化之
# 这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数
# 然后每个数对应一个特定的中断自系统启动以来所发生的次数。

ctxt 68533835       #自系统启动以来CPU发生的上下文交换的次数

btime 1528905555    #系统启动时长(单位:秒),从Epoch(即1970零时)开始到系统启动所经过的时长,每次启动不同,但启动后不会改变

processes 318904    #自系统启动以来所创建的任务的个数目

procs_running 1     #当前运行队列的任务的数目

procs_blocked 0     #当前被阻塞的任务的数目

softirq 16567860 0 3850777 8555 5448802 116727 0 1 3577293 1290 3564415
# 此行显示所有CPU的softirq总数
# 第一列是所有软件和每个软件的总数
# 后面的列是特定softirq的总数

/proc/swaps

显示交换分区的信息 文件名 类型 大小 使用量 优先级

[root@Centos8_test proc]# cat swaps
Filename                                Type            Size    Used    Priority
/dev/nvme0n1p2                          partition       2190332 0       -2

/proc/self

这是一个 link, 当进程访问此 link 时, 就会访问这个进程本身的 /proc/pid 目录, 例如: 

ls -al /proc/self
lrwxrwxrwx 1 root root 0 Nov 15 11:28 /proc/self -> 1297307

/proc/sys 

不仅提供系统的相关信息,还允许用户立即停止或开启内核某些特性及功能。内容较多 另开一贴。

posted @ 2022-07-18 16:57  zed99  阅读(683)  评论(0编辑  收藏  举报