“ / sys”目录用于什么?


16

不久前,我注意到该目录以前从未见过/sys。我研究了一下,读到“现代Linux系统”经常有此目录,并且它管理设备。我以为那是/ dev的目的。除了我提到的内容之外,我似乎找不到关于此目录的大量信息,而此内容引用于此页面:

/ sys是一个虚拟文件系统,可以访问它来设置或获取有关系统内核视图的信息。

我已经运行Trusty有一段时间了,以前从没注意到它,这就是为什么我觉得它有点奇怪。有人可以帮我吗?这个和/ dev有什么区别?Ubuntu何时开始使用此目录,为什么?谢谢。


/sys现在已经有十多年了
muru

1
Sidenote可能对其他用户有用:一旦计算机关闭,/ proc和/ sys目录即虚拟文件系统将消失。如果您曾经在其他操作系统上使用Linux安装过硬盘驱动器,则会看到这些目录为空。
Sergiy Kolodyazhnyy

Answers:


28

/sys旧的。它是在Linux内核达到2.6(在进行2.4 / 2.5拆分时返回)之前引入的。自从第一个Ubuntu版本使用2.6内核以来,每个版本的Ubuntu都有一个/sys

/dev包含实际的设备文件。它不提供对内核知道的所有设备的访问(例如,以太网设备)- 为什么网络接口不像其他设备一样在/ dev中为什么以太网设备不显示在“ / dev”中?)。它是设备本身的接口-您写入设备,从设备读取等。

/sys是内核的接口。具体来说,它提供了类似于文件系统的内核提供的信息和配置设置的视图/proc。根据要更改的设置,写入这些文件可能写入也可能不会写入实际设备。尽管这是一个常见的用例,但它不仅用于管理设备。

可以在内核文档中找到更多信息:

Top Level Directory Layout
~~~~~~~~~~~~~~~~~~~~~~~~~~

The sysfs directory arrangement exposes the relationship of kernel
data structures. 

The top level sysfs directory looks like:

block/
bus/
class/
dev/
devices/
firmware/
net/
fs/

devices/ contains a filesystem representation of the device tree. It maps
directly to the internal kernel device tree, which is a hierarchy of
struct device. 

bus/ contains flat directory layout of the various bus types in the
kernel. Each bus's directory contains two subdirectories:

    devices/
    drivers/

devices/ contains symlinks for each device discovered in the system
that point to the device's directory under root/.

drivers/ contains a directory for each device driver that is loaded
for devices on that particular bus (this assumes that drivers do not
span multiple bus types).

fs/ contains a directory for some filesystems.  Currently each
filesystem wanting to export attributes must create its own hierarchy
below fs/ (see ./fuse.txt for an example).

dev/ contains two directories char/ and block/. Inside these two
directories there are symlinks named <major>:<minor>.  These symlinks
point to the sysfs directory for the given device.  /sys/dev provides a
quick way to lookup the sysfs interface for a device from the result of
a stat(2) operation.

例如:

  • 设置笔记本电脑显示器亮度的一种方法是:

    echo N > /sys/class/backlight/acpi_video0/brightness
    
  • 要获取网卡的MAC地址:

    cat /sys/class/net/enp1s0/address
    
  • 要获取当前的CPU缩放调节器:

    cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
    

等等...


@muru:如果要删除其中一个消耗大量内存的文件怎么办?我写了一个有故障的设备驱动程序(可能是),它陷入循环并不断写入/ sys / devices目录中的某个文件。另外,如果我不小心删除了错误的文件,会有什么影响?
Bhavik Shah

2
@BhavikShah您不会从此处删除任何内容-这些文件实际上不存在。您必须删除所涉及的模块。
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.