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
在启动时传递至内核的相关参数信息,这些信息通常由lilo
或grub
等启动管理工具进行传递
/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
不仅提供系统的相关信息,还允许用户立即停止或开启内核某些特性及功能。内容较多 另开一贴。