udev 使用总结
简介
udev是linux系统中提供设备事件的子系统,如:当一个U盘插入电脑时触发脚本,来实现自动化操作。
配置
udev的配置文件一般位于/etc/udev/rules.d/
目录下,rule文件名最前面的数字字段代表这条rule的优先级,数字越大优先级越低。例如:
1 |
|
各字段说明及其信息的获取
udev的配置文件中各字段含义如下:
各属性key的说明
以下是常用属性字段的简单说明,详细信息可查看man udev
说明文档
SUBSYSTEM
: 匹配事件设备的系统设备类型,例如,若是磁盘则为block
ACTION
: 指对应设备(如U盘)的插入或移除KERNEL
: 匹配事件设备的名字ATTR{filename}
: 匹配事件设备的属性值,如可以指定设备的序列号ENV{key}
: 匹配设备的特性值RUN{type}
: 指定要运行的程序,针对匹配的事件,用空格分割程序参数,用单引号来指定带空格的参数
type
有以下两种类型
program
: 运行外部程序,建议使用绝对路径
builtin
: 使用built-in程序
相关信息获取
以上属性值可用过下列命令获取
lsblk
命令用来列出块设备信息, 如uuid,label,type等等1
2
3
4tao@z20:~$ lsblk -la -o NAME,LABEL,UUID,TYPE,MOUNTPOINTS /dev/sdb1 /dev/sda1
NAME LABEL UUID TYPE MOUNTPOINTS
sda1 d5cad8b3-b682-4204-a4d2-5bc9a1e5ebf4 part /project
sdb1 RTC_LE 7478-FC48 partudevadm info
可以用来列出设备所有相关信息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27tao@z20:~$ udevadm info /dev/sdb1
P: /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/host12/target12:0:0/12:0:0:0/block/sdb/sdb1
N: sdb1
L: 0
E: DEVNAME=/dev/sdb1
E: DEVTYPE=partition
E: DISKSEQ=68
E: PARTN=1
E: MAJOR=8
E: MINOR=17
E: SUBSYSTEM=block
E: ID_SERIAL=Taorfvnj_dsacdarwgree5uy76-0:0
E: ID_SERIAL_SHORT=davfvfsb4grwgt43
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_USB_DRIVER=usb-storage
E: ID_PART_TABLE_UUID=23727e29
E: ID_PART_TABLE_TYPE=dos
E: ID_FS_LABEL=OTA_LE
E: ID_FS_LABEL_ENC=OTA_LE
E: ID_FS_UUID=7478-FC48
E: ID_FS_UUID_ENC=7478-FC48
E: ID_FS_VERSION=FAT32
E: ID_FS_TYPE=vfat
...udevadm monitor
常用来实时输出设备事件信息
常用操作符说明
==
: 比较key是否等于给定的值或匹配模式!=
: 判断不等于+=
: 将一个值添加到一个key,即一个key的值可能是列表,如上面run+=
=
: 将值赋给key,列表会被覆盖
常用匹配模式说明
*
: 匹配零个或多个字符?
: 匹配任意单个字符[]
: 匹配位于中括号中的单个的字符,如”tty[SR]”|
: 可用来指定多个匹配模式,如,”abc|x*”将匹配”abc”或是”x*”
加载配置文件
经过以上信息查找,当指定的label的U盘插入电脑时触发自动化操作的rule如下;其中会将device的label当作参数传给脚本,在脚本运行前%E{ID_FS_LABEL}
会进行变量替换,变量含义请参考上面属性字段说明
1 |
|
配置确认无误后通过udevadm control --reload
命令重新加载配置文件
ubuntu22 利用udev修改网卡名字
临时修改网卡名字可以通过以下命令:
1 |
|
通过udev修改重启不失效, 字段ATTR{address}
用来匹配指定网卡的mac地址
1 |
|
refer to
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.
也可以通过在/etc/systemd/network/
目录创建.link
配置文件(ini语法)来实现修改网卡的名字, 请参考man systemd.link
手册
udev 使用总结
https://www.tao-wt.fun/linux/udev/