1.11 udev规则介绍

udev规则是Linux系统中用于管理设备节点的一套规则集,它们定义了udev守护进程如何处理特定的硬件设备。udev规则文件通常以.rules为扩展名,并存放在/etc/udev/rules.d/目录下。这些规则文件按文件名的ASCII字母顺序进行处理,一旦找到匹配的规则,udev就会根据规则定义的措施对设备进行配置。

udev规则文件的语法相对简单,每条规则由一系列的键值对组成,键值对之间用逗号分隔。规则中的键值对可以分为两类:匹配键(Match)和赋值键(Assign)。

匹配键(Match)

匹配键用于确定规则是否适用于当前处理的设备。它们基于设备的属性来定义,例如设备的内核名称、子系统、总线类型等。只有当所有匹配键都与设备属性匹配时,相应的赋值键才会被应用。

例如:

  • KERNEL=="sda":匹配内核设备名称为sda的设备。
  • SUBSYSTEM=="block":匹配属于block子系统的设备。
  • DRIVER=="sd":匹配由sd驱动程序控制的设备。

赋值键(Assign)

赋值键用于定义udev如何处理匹配的设备。它们可以设置设备节点的名称、权限、所有者等。

例如:

  • NAME="mydevice":为设备创建一个名为mydevice的节点。
  • SYMLINK+="special%n":为设备创建一个符号链接,名称基于设备的内核编号。
  • OWNER="root":将设备节点的所有者设置为root
  • GROUP="disk":将设备节点的所属组设置为disk
  • MODE="0660":设置设备节点的权限为0660

示例规则文件

以下是一个udev规则的示例:

# 规则文件示例
SUBSYSTEM=="block", KERNEL=="sda", MODE="0660", OWNER="root", GROUP="disk"

这条规则表示,对于内核名称为sda的块设备,设置其权限为0660,所有者为root,所属组为disk

规则文件的执行顺序

udev规则文件按照文件名的字母顺序执行。如果有多个规则匹配同一个设备,那么文件名字母顺序靠前的规则将先被应用。如果需要,可以通过在文件名前添加数字前缀来调整规则的执行顺序,例如10-my-custom-rule.rules

注意事项

  • 规则文件中的注释以#开始。
  • 规则文件不应该包含空行。
  • 一旦规则匹配并应用,udev不会继续读取后续的规则文件。
  • 规则文件中的路径和文件名应该使用%进行转义,例如SYMLINK+="special%n"

通过自定义udev规则,用户可以精细地控制设备节点的创建和管理,从而更好地适应特定的系统需求和使用场景。