procfs和sysfs文件系统
什么是Procfs?
Procfs或/proc
是Linux下的特殊文件系统,用于显示进程信息和内核进程。尽管/proc
仍被广泛使用,但是在运行内核级别2.6及更高版本的系统上找到的许多信息已移至另一个称为sysfs
的伪文件系统,该文件系统通常安装在/sys
下。与其他文件系统不同,/proc
存储在内存中,而其他文件系统则存储在磁盘上。如果列出/proc
文件系统,则会注意到大多数文件的字节长度为0
。但是,如果查看文件的内容,将会看到其中包含大量信息。
john@john-desktop:~$ file /proc/uptime /proc/uptime: empty john@john-desktop:~$ cat /proc/uptime 5151.72 2053.73
在Ubuntu 12.04系统上的/proc
示例。后面的反斜杠/
表示目录:
john@john-desktop:/proc$ ls -F 1/ 1800/ 2016/ 2290/ 2857/ 45/ cpuinfo mounts@ 10/ 1818/ 2029/ 2297/ 2861/ 584/ crypto mtrr 1003/ 1855/ 2033/ 23/ 2862/ 6/ devices net@ 1042/ 1866/ 2083/ 2320/ 2932/ 613/ device-tree/ pagetypeinfo 11/ 19/ 21/ 2322/ 298/ 619/ diskstats partitions 1105/ 1906/ 2111/ 2324/ 299/ 64/ dma sched_debug 1116/ 1909/ 2120/ 2326/ 3/ 668/ dri/ schedstat 1129/ 1910/ 2122/ 233/ 3039/ 669/ driver/ scsi/ 1153/ 1914/ 2136/ 234/ 3046/ 670/ execdomains self@ 1154/ 1916/ 2138/ 2370/ 3141/ 691/ fb slabinfo
数字代表一个进程(PID-进程ID)。这些数字中的每一个都是一个目录。这些编号目录中的每个目录中都有其他文件,这些文件包含有关正在运行的进程的信息。
查看PID 2862的目录:
john@john-desktop:/proc/2862$ ls -F attr/ coredump_filter io mounts pagemap stack autogroup cpuset latency mountstats personality stat auxv cwd@ limits net/ root@ statm cgroup environ loginuid ns/ sched status clear_refs exe@ maps oom_adj schedstat syscall cmdline fd/ mem oom_score sessionid task/ comm fdinfo/ mountinfo oom_score_adj smaps wchan
其中
- cmdline: 包含最初启动该过程的命令。
- cwd: 指向该进程当前工作目录的符号链接
- environ: 此文件包含与进程相关的可变信息
- exe: 指向原始可执行文件的符号链接
- fd: 是一个目录,其中包含每个打开的文件描述符的符号链接**:
- fdinfo: 包含与
/fd
中找到的每个打开的文件描述符相关的文件的目录。 - maps: 包含有关映射文件和块的信息的文件
- mem: 表示进程虚拟内存的二进制文件
- root: 进程所看到的到根路径的符号链接
- status: 包含有关进程当前运行状态和内存使用情况的信息的文件
- task: 此目录包含指向此进程已启动的任何任务的链接
重要目录
有时了解在哪里快速找到有关系统的信息很有用。您可能希望找到内存信息或有关系统中存在的CPU的信息。该信息可以在/proc
下找到。许多实用程序和程序将读取其中许多目录结构中包含的信息,并将其报告回屏幕。
下面列出了一些最有用的目录:
/proc/fb:可用帧缓冲区的列表
/proc/cpuinfo:列出有关系统CPU的信息-系列,供应商信息,型号,核心速度和CPU标志信息。
/proc/devices:包含字符和块设备的列表
/proc/diskstats:列出与逻辑磁盘设备有关的信息
/proc/filesystems:内核支持的文件系统的列表
/proc/interrupts:可以在此处找到中断信息
/proc/iomem:包含每个物理设备的系统内存的映射图
/proc/ioports:包含用于与设备进行输入或输出通信的当前注册端口区域的列表。
/proc/irq:此目录包含与系统上存在的IRQ对应的目录。SMP亲和力信息可以在这里修改。
/proc/meminfo:包含内核内存信息
/proc/modules:包含内核中当前加载的模块。lsmod
命令从此处获取其信息
/proc/mounts:包含有关安装的信息。还列出了正在使用的文件系统以及正在使用的挂载选项
/proc/net:网络堆栈信息
/proc/partitions:内核已将其标识为分区的设备编号,它们的大小和/dev名称的列表
/proc/slabinfo:包含内核slab统计信息**/proc/swaps
/proc/swaps:活动交换分区及其大小的列表
/proc/sys:可在此处找到可动态配置的内核选项
/proc/uptime:自启动以来,内核在空闲模式下运行所花费的时间(以秒为单位)。
/proc/version:包含内核信息,版本号,用于构建内核的gcc版本号
sysfs是什么?
许多较新的Linux发行版使用安装在/sys上的sysfs
作为从内核向各种应用程序导出信息的一种方式。sysfs
一般包含9个顶级目录:
john@john-desktop:/sys$ ls -l total 0 drwxr-xr-x 2 root root 0 May 18 20:16 block drwxr-xr-x 23 root root 0 May 18 20:16 bus drwxr-xr-x 46 root root 0 May 18 20:16 class drwxr-xr-x 4 root root 0 May 18 20:16 dev drwxr-xr-x 15 root root 0 May 18 20:16 devices drwxr-xr-x 4 root root 0 May 18 20:16 firmware drwxr-xr-x 7 root root 0 May 18 20:16 fs drwxr-xr-x 6 root root 0 May 18 20:16 kernel drwxr-xr-x 121 root root 0 May 18 20:16 module drwxr-xr-x 2 root root 0 May 18 20:16 power
/sys
目录简介
/sys/block:包含已知的块设备
/sys/bus:包含所有注册的总线。
/sys/class:包含设备
/sys/device:内核知道的所有设备,由它们连接的总线组织
/sys/firmware:包含一些设备的固件文件
/sys/fs:包含用于控制文件系统的文件
/sys/kernel:各种内核相关文件
/sys/module:加载内核模块。每个模块由同名目录表示。
/sys/power:处理系统电源状态的各种文件