【linux】/proc和/sys文件系统

/proc

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。其实例如ps、top等很多命令正是从proc系统中读取信息。

基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。

为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N/中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。

大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm、free、lspci或top查看时却可以有着不错的表现。

常见文件

以数字命名的子目录

/proc目录中包含许多以数字命名的子目录,这些数字表示系统当前正在运行进程的进程号,里面包含对应进程相关的多个信息文件。

dr-xr-xr-x.  9 root    root                  0 Jul 17 01:47 1
dr-xr-xr-x.  9 root    root                  0 Jul 17 01:47 10
dr-xr-xr-x.  9 root    root                  0 Jul 17 03:21 1003
dr-xr-xr-x.  9 root    root                  0 Jul 17 01:47 1082
dr-xr-xr-x.  9 root    root                  0 Jul 17 01:47 1085
dr-xr-xr-x.  9 root    root                  0 Jul 17 01:47 1086
dr-xr-xr-x.  9 root    root                  0 Jul 17 01:47 11
dr-xr-xr-x.  9 root    root                  0 Jul 17 01:47 117
dr-xr-xr-x.  9 root    root                  0 Jul 17 01:47 12
...

每个子文件中又包含了该进程的相关信息:

ls /proc/2977/
attr    # 提供安全相关属性
autogroup
auxv
cgroup # 所属cgroup
clear_refs
cmdline # 命令行参数
comm
coredump_filter
cpuset
cwd -> / # 当前工作目录的软连接
environ # 环境变量值
exe -> /usr/sbin/sshd # 指向该进程的执行命令文件
fd # 一个包含所有文件描述符的目录
fdinfo
gid_map
io
limits
loginuid
map_files
maps # 内存映射信息
mem # 进程的内存被利用的情况
mountinfo
mounts
mountstats
net
ns
numa_maps
oom_adj
oom_score
oom_score_adj
pagemap
patch_state
personality
projid_map
root -> / # 链接到此进程的root目录
sched
schedstat
sessionid
setgroups
smaps
stack
stat # 进程状态
statm # 进程内存使用信息
status # 进程当前状态,以可读的方式显示
syscall
task
timers
uid_map
wchan

常用系统信息文件

/proc/cpuinfo # CPU的信息(型号、家族、缓存大小)
/proc/meminfo # 物理内存、交换空间等信息
/proc/mounts # 已加载的文件系统列表
/proc/filesystems # 被支持的文件系统
/proc/modules # 已加载的模块
/proc/version # 内核版本
/proc/cmdline # 系统启动时输入的内核命令行参数
/proc/interrupts # 中断使用情况
/proc/kmsg # 内核日志信息
/proc/devices # 可用的设备,如字符设备和块设备
/proc/uptime # 系统正常运行时间

/sys

它可以产生一个包含所有系统硬件层次视图,通过把连接在系统上的设备和总线组织称为一个分级的文件,它们可以由用户空间获取,向用户空间导出内核的数据结构以及它们的属性。sysfs的一个目的就是展示设备驱动模型中各组件的层次关系。

未完

因此,系统中整体信息可通过procfs来获取,设备模型相关信息可通过sysfs来获取。