udev 规则文件介绍

2023-05-16

1. 配置文件
udev的配置文件位于 /etc/udev/ 和 /lib/udev/ ( # 开头的是注释)
udev 的主配置文件是 /etc/udev/udev.conf。 它包含一套变量,允许用户修改 udev 默认值。可以设置的变量如下:
    udev_root    设备目录,默认是 /dev
    udev_log      日志等级(表示严重程度),跟 syslog 一致,例如: err, info, debug。

2. 规则文件
udev的规则文件一般位于 /lib/udev/rules.d/,也可以位于  /etc/udev/rules.d/
规则文件是按照字母顺序处理的,不管放在哪个目录。对于相同名字的规则文件, /etc/udev/rules.d 比  /lib/udev/rules.d 优先。
规则文件必须以 .rules 作为扩展名,否则不被当作规则文件。
规则文件的每一行都是 key=value 格式。 key 有两个类型:1)匹配型 key   2)赋值型 key
当所有匹配型 key 都匹配时,该规则即被采用,赋值型 key 就会获得相应的值。
当规则匹配时,可以重命名网络接口, 创建到设备节点的符号链或运行一个指定程序来处理该事件。
一条规则由多个key=value 组成,以英文逗号隔开。 每个 key 有一个操作,取决于操作符,有效的操作符如下:
           ==      比较是否相等
           !=       比较是否不相等
           =        给一个key 赋值。 表示一个列表的key会被重置,并且把这个唯一的值传给它
           +=     将一个值增加到key中
           :=      将一个值传给一个key,并且不允许再修改这个key。

3. 匹配型KEY

下面的 key 可以匹配设备属性,部分 key 也可用于匹配 sysfs 中的父设备属性,不仅仅是产生事件的那个设备。
如果在一个规则中,有多个key匹配了一个父设备,则这些 key 必须匹配同一个父设备:
ACTION        匹配事件的动作名
DEVPATH    匹配事件的设备devpath
KERNEL      匹配事件的设备名
NAME           匹配网络接口或者设备节点的名字。NAME 只有在前面的规则赋值之后才可以使用。
SYMLINK    匹配设备节点符号链的名字。SYMLINK 只有在前面的规则赋值之后才可以使用。可以有多个 symlinks,只需要匹配一个。
SUBSYSTEM    匹配设备子系统
DRIVER            匹配设备的驱动名。只对绑定到一个驱动的设备有用。
ATTR { filename }    匹配事件设备的 sysfs 属性。
KERNELS         向上搜索devpath,直到找到一个匹配的设备名
SUBSYSTEMS    向上搜索devpath,直到找到一个匹配的子系统名
DRIVERS             向上搜索devpath,直到找到一个匹配的驱动名
ATTRS{ filename }    向上搜索devpath,直到找到一个含匹配 sysfs 属性的设备
ENV{ key }
TAG
          设备的 tag
TEST{octal mode mask}   测试一个文件是否存在,可以指定一个8进制的模式掩码。
PROGRAM         执行一个程序。如果程序成功返回, key 为 true。设备的属性被放在被执行进程的环境变量中,该程序的输出为 stdout, 可以从 RESULT 这个 key 读取。
RESULT      匹配最近一次 PROGRAM 调用的返回字符串。它应该在 PROGRAM 之后使用

支持一些shell的通配符:   * (代表[ 0 个到无穷多个 ]任意字符     
                                                ? (代表[一定有一个]任意字符)    
                                                [ ] (代表[一定有一个在括号内]的字符(非任意字符))

4. 赋值型KEY

下面的key 是赋值型 key:
NAME
SYMLINK
OWNER, GROUP, MODE
ATTR { key }
ENV { key }
TAG
 RUN                  
LABEL
               GOTO 可以跳到的地方
GOTO                跳到下一个带有匹配名字的 LABEL 处。
IMPORT { type }
WAIT_FOR
OPTIONS

NAME,  SYMLINK,   PROGRAM,   OWNER,  GROUP、MODE 和 RUN 这些 field 支持一个简单的、类似于 printf 函数的格式字符串替换。可用的字符替换如下:
$kernel,  %k : 该设备的内核名字( %k 替换 $kernel)
$number,  %n:该设备的内核号码。例如 sda3 的内核号码是 3。
$devpath, %p: 该设备的 devpath
$id,   %b:当向上搜索devpath,寻找 SUBSYSTEMS, KERNELS, DRIVERS 和 ATTRS 时,被匹配的设备名字
$driver: 当向上搜索devpath,寻找 SUBSYSTEMS, KERNELS, DRIVERS 和 ATTRS 时,被匹配的驱动名字
$attr { file }, %s { file }: 一个被发现的设备的 sysfs 属性的值。如果该设备没有该属性,且前面的 KERNELS,   SUBSYSTEMS,  DRIVERS或 ATTRS 测试选择的是一个父设备,那么就用父设备的属性。如果属性是一个符号链,符号链的最后一个元素作为返回值。
$env { key }, %E { key }: 一个设备属性值
$major, %M: 该设备的内核主号码
$minor, %m: 该设备的内核次号码
$result, %c: 由 PROGRAM 调用的外部程序返回的字符串。如果这个字符串包含空格,可以用 %c{N} 选中第N个字段。如果这个数字N,后面有一个 + 字符, 则表示选中从这个字段开始的所有后面的字符串 %c { N + }
$parent, %p:父设备的节点名字
$name:设备节点的名字,用一个空格作为分隔符。该值只有在前面的规则赋值之后才存在,或者是remove事件。
$links:当前符号链的列表,用空格隔开。该值只有在前面的规则赋值之后才存在,或者是remove事件。
$root, %r:udev_root 的值
$sys, %S:sysfs 挂载点
$tempnode, %N:在真正的设备节点创建之前,创建的一个临时的设备节点的名字,这个临时设备节点供外部程序使用。
$$:                      '$'字符自己
%%:                   '%' 字符自己
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

udev 规则文件介绍 的相关文章

随机推荐