udev 规则文件的写法

来源:互联网 发布:centos 安装mysql5.6 编辑:程序博客网 时间:2024/05/16 05:20


配置文件

        udev的配置文件位于 /etc/udev//lib/udev/ ( # 开头的是注释)

        udev 的主配置文件是 /etc/udev/udev.conf。 它包含一套变量,允许用户修改 udev 默认值。可以设置的变量如下:

                udev_root    设备目录,默认是 /dev

                udev_log      日志等级(表示严重程度),跟 syslog 一致,例如: err, info, debug。


规则文件

                udev的规则文件一般位于 /lib/udev/rules.d/ ,也可以位于  /etc/udev/rules.d/

                临时存放规则文件的目录是 /dev/.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。

              

               下面的 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的通配符:   *       ?           [ ]


                      下面的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 函数的格式字符串替换。

                      在所有规则被处理之后,在程序执行之前,RUN 格式字符被应用,从而能让程序访问前面已匹配的规则设置的属性。

                      对于所有其他的 field,当单个规则被处理时,发生字符替换。可用的字符替换如下:

                               $kernel,      %k               该设备的内核名字

                               $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       在真正的设备节点创建之前,创建的一个临时的设备节点的名字,这个临时设备节点供外部程序使用。

                            %%                   '%' 字符自己

                            $$                      '$' 字符自己