UDEV规则文件的结构是怎样的?
时间: 2024-10-18 22:04:20 浏览: 20
UDEV规则文件通常采用XML格式,其基本结构包含以下几个部分:
1. **ACTION**: 定义事件触发类型,比如"add", "remove", "change"等,表示设备何时被添加、移除或属性改变。
2. **DEVPATH**: 特定设备路径,用于匹配具体的设备,通常是`usb*`、`mmcblk*`这样的通用模式,也可以是确切的设备路径。
3. **KERNEL**: 设备的内核名字,如`sd*`, `hd*`等,或者`sysfs`下的属性。
4. **SUBSYSTEM**: 设备所属的子系统,比如`block`代表块设备,`net`代表网络设备。
5. **ATTRIBUTES**: 关键字-值对,用于更细致地描述设备属性,如`ID_MODEL`、`ID_BUS`等。
6. **RUN**: 这里可以放置shell脚本,命令或Python表达式,定义设备被操作后的响应动作,如执行启动服务、挂载文件系统或更改权限等。
7. **TAGS**: 可选标签,用于进一步筛选或分类设备。
一个典型的规则例子如下:
```xml
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda?", RUN+="/bin/mount /mnt/external sda"
```
这个规则会在新的磁盘sda被添加时,自动将其挂载到/mnt/external。
相关问题
Ubuntu如何通过udev规则文件调整设备命名?
在Ubuntu中,udev规则文件是一种机制,用于自动化管理和更新系统中的设备命名。这些规则文件位于`/etc/udev/rules.d`目录下,每个文件都包含一组针对特定设备类型的规则,当新设备插入系统时,udev会读取这些规则来确定其合适的设备节点路径。
如果你想通过udev规则文件调整设备命名,你可以创建一个新的规则文件或者编辑现有的文件。基本步骤如下:
1. **打开编辑器**:
打开终端,输入 `sudo nano /etc/udev/rules.d/99-custom.rules` 或者其他相应的位置,这里假设你想添加新的规则。如果没有相应的文件,系统会提示创建新的。
2. **编写规则**:
举例来说,如果你想要将所有新插入的USB设备命名为`/dev/mysdX`(其中X代表数字),可以添加类似下面的行:
```
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="your_vendor_id", ATTR{idProduct}=="your_product_id", SYMLINK+="mysdX"
```
将`your_vendor_id`和`your_product_id`替换为你想指定的USB设备制造商和产品的ID。
3. **保存并刷新规则**:
保存文件后,使用 `sudo udevadm control --reload-rules` 刷新规则,然后 `sudo udevadm trigger` 触发规则的生效。
4. **检查效果**:
使用 `lsblk` 或 `df -hT` 等命令确认新规则是否生效。
注意:修改udev规则需要谨慎,错误的规则可能导致设备无法正常工作。在编写规则前最好了解所涉及的属性和关键字含义。
UDEV规则语言是什么样子的?
UDEV规则语言是一种简单易读的文本格式,用于描述设备插入系统时应采取的操作。基本的规则结构包括以下几个部分:
1. **ACTION**:定义设备插入或删除时应该执行的动作,例如`SUBSYSTEM=="block"`, `ACTION=="add"`表示当块设备增加时应用规则。
2. **ATTRIBUTES**:基于设备属性进行匹配,如`ATTRS{idVendor}=="0x1d6b"`, 这里是以USB vendor ID为例。
3. **ENVIRONMENT**:通过环境变量进行匹配,例如`KERNEL=="sd[a-z]*"`,这里匹配的是Linux的磁盘设备名称。
4. **RUN命令**:规则满足后执行的命令,可能是安装设备驱动、创建目录、修改权限等,如`RUN+="/bin/mount /dev/$NAME $DEST"`。
5. **EXECUTABLE**:指定执行某个程序,如`EXEC=+/sbin/modprobe -r $ACTION`,用于卸载模块。
规则通常以`.rules`文件形式存在,并使用注释进行解释。多个规则可以组合在一起,通过逻辑运算符(如`OR`、`AND`)控制动作执行条件。
举个例子:
```bash
# 当检测到新的USB大容量存储设备(ACTION=add)
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0厂家id", ATTR{idProduct}=="0产品id", RUN+="/bin/mount -t vfat /dev/sdb1 /mnt/usb"
```
在实际操作中,开发者会编写针对特定设备类型的规则,以便在系统上实现设备的自动配置和管理。
阅读全文