这是本文档旧的修订版!
UDEV 规则配置
KERNEL / SUBSYSTEM / DRIVER / ATTR
只匹配本设备不匹配父设备. 加个S
, 就可以在本设备以及父设备整条链上搜索匹配。KERNELS / SUBSYSTEMS / DRIVERS / ATTRS
- 字符匹配:
* - match any character, zero or more times ? - match any character exactly once [] - match any single character specified in the brackets, ranges are also permitted
- 替换符
$kernel, %k: 设备的内核设备名称,例如:sda、cdrom。 $number, %n: 设备的内核号码,例如:sda3 的内核号码是 3。 $devpath, %p: 设备的 devpath路径。 $id, %b: 设备在 devpath里的 ID 号。 $sysfs{file}, %s{file}: 设备的 sysfs里 file 的内容。其实就是设备的属性值。 $env{key}, %E{key}: 一个环境变量的值。 $major, %M: 设备的 major 号。 $minor %m: 设备的 minor 号。 $result, %c: PROGRAM 返回的结果。 $parent, %P: 父设备的设备文件名。 $root, %r: udev_root的值,默认是 /dev/。 $tempnode, %N: 临时设备名。 %%: 符号 % 本身。 $$: 符号 $ 本身。
- 获取设备信息:
udevadm info
指令 取代udevinfo
udevadm info -a -p /sys/block/sda
获取设备ATTRS各项属性
last_rule
- 到本条规则为止,后续规则不起作用OPTIONS+="last_rule"
udevadm test /sys/block/sda
测试规则udevadm control --reload-rules
修改规则后重新加载生效- 或者
udevadm control -R
NAME=
只对网路设备起作用NAME The name to use for a network interface. See systemd.link(5) for a higher-level mechanism for setting the interface name. The name of a device node cannot be changed by udev, only additional symlinks can be created.
示例
- ubuntu默认的usb storage mount 规则
/etc/udev/rules.d/10-usb-storage.rules
:KERNEL!="sd[a-z][0-9]",GOTO="automount_exit" ACTION=="add", SUBSYSTEM=="block", RUN+="/bin/mkdir -p /media/%k", RUN+="/usr/bin/mount $devnode /media/%k" ACTION=="remove", RUN+="/usr/bin/umount /media/%k",RUN+="/bin/rmdir /media/%k" LABEL="automount_exit"
- 指定类型
ACTION=="add", KERNEL=="sd*[0-9]", SUBSYSTEMS=="block", SYMLINK+="sd-myself", ATTRS{model}=="Your_Harddisk_Model"`