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

$$:                      '$'字符自己 

%%:                   '%' 字符自己