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
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

其中

  1. cmdline: 包含最初启动该过程的命令。
  2. cwd: 指向该进程当前工作目录的符号链接
  3. environ: 此文件包含与进程相关的可变信息
  4. exe: 指向原始可执行文件的符号链接
  5. fd: 是一个目录,其中包含每个打开的文件描述符的符号链接**:
  6. fdinfo: 包含与/fd中找到的每个打开的文件描述符相关的文件的目录。
  7. maps: 包含有关映射文件和块的信息的文件
  8. mem: 表示进程虚拟内存的二进制文件
  9. root: 进程所看到的到根路径的符号链接
  10. status: 包含有关进程当前运行状态和内存使用情况的信息的文件
  11. 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版本号

/sys目录简介

/sys/block:包含已知的块设备

/sys/bus:包含所有注册的总线。

/sys/class:包含设备

/sys/device:内核知道的所有设备,由它们连接的总线组织

/sys/firmware:包含一些设备的固件文件

/sys/fs:包含用于控制文件系统的文件

/sys/kernel:各种内核相关文件

/sys/module:加载内核模块。每个模块由同名目录表示。

/sys/power:处理系统电源状态的各种文件

日期:2019-04-29 03:17:32 来源:oir作者:oir