udev规则

本文详细描述了如何通过bash脚本从udev环境获取设备名称和UUID,设置挂载点,检查并创建挂载点,最后将设备挂载到指定位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/bash

从udev环境中获取设备名

DEVICE_NAME=$1

获取设备的UUID或其他标识符

DEVICE_UUID= ( b l k i d − s U U I D − o v a l u e / d e v / (blkid -s UUID -o value /dev/ (blkidsUUIDovalue/dev/DEVICE_NAME)

设置挂载点

MOUNT_POINT=“/mnt/$DEVICE_NAME”

检查挂载点是否存在,如果不存在则创建

[ -d “ M O U N T P O I N T " ] ∣ ∣ m k d i r − p " MOUNT_POINT" ] || mkdir -p " MOUNTPOINT"]∣∣mkdirp"MOUNT_POINT”

挂载设备到指定挂载点

mount /dev/ D E V I C E N A M E " DEVICE_NAME " DEVICENAME"MOUNT_POINT"

echo “Device mounted at $MOUNT_POINT”

### 编写和配置 Linux udev 规则 udevLinux 下的一个设备管理器,它负责动态地维护 `/dev` 文件夹中的设备节点以及符号链接。通过编写 udev 规则,可以自定义设备的行为。 #### 1. **基本结构** udev 规则通常存储在 `/etc/udev/rules.d/` 或者 `/lib/udev/rules.d/` 目录下,文件名以 `.rules` 结尾。每条规则由多个键值对组成,这些键值对分为两类: - **匹配条件**:用于识别特定的硬件设备。 - **操作指令**:当满足匹配条件时执行的操作。 例如,以下是一条简单的 udev 规则[^2]: ```plaintext SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="1234", RUN+="/bin/sh /path/to/script.sh $attr{serial}" ``` 这条规则的作用是:当 USB 子系统检测到新增加的设备,并且其厂商 ID (`idVendor`) 为 `1234` 时,运行指定的脚本并将设备序列号作为参数传递给脚本[^1]。 --- #### 2. **常见字段说明** 以下是常用的 udev 键及其含义: | 字段 | 描述 | |--------------|----------------------------------------------------------------------| | SUBSYSTEM | 设备所属子系统 (e.g., `"block"`, `"net"`, `"usb"`). | | ACTION | 动作类型 ("add": 添加, "remove": 移除). | | KERNEL | 匹配内核命名的设备名称 (e.g., `"sda"`, `"ttyUSB0"`). | | ATTR{} | 匹配设备属性 (e.g., `{idProduct}`, `{serial}`). | | SYMLINK | 创建指向设备的新符号链接. | | OWNER/GROUP | 设置设备的所有者或组. | | MODE | 修改设备权限模式 (e.g., `"0666"` 表示 rwxrwxrwx). | | RUN+ | 执行外部程序或脚本. | --- #### 3. **实例教程** 假设我们需要为某个 USB 驱动器设置固定的挂载点并赋予特定权限。 ##### 步骤一:获取设备信息 插上目标设备后,使用以下命令查看设备详情: ```bash udevadm info --query=all --name=/dev/sdX ``` 其中 `/dev/sdX` 替换为目标设备的实际路径。此命令会返回许多有用的信息,比如 `ID_VENDOR` 和 `ID_SERIAL_SHORT`. ##### 步骤二:创建规则文件 编辑一个新的规则文件,例如 `/etc/udev/rules.d/99-my-custom-rule.rules`,内容如下: ```plaintext KERNEL=="sd[b-z]", SUBSYSTEMS=="usb", ATTRS{idVendor}=="abcd", ATTRS{idProduct}=="1234", \ SYMLINK+="my_usb_drive%n", OWNER="root", GROUP="disk", MODE="0660" ``` 解释: - `KERNEL=="sd[b-z]"`: 匹配从 sdb 开始的硬盘设备. - `SUBSYSTEMS=="usb"`: 确认设备属于 USB 子系统. - `ATTRS{idVendor}` 和 `ATTRS{idProduct}`: 使用具体的 Vendor 和 Product ID 进行精确匹配. - `SYMLINK+=...`: 创建新的符号链接名为 `my_usb_drive`. - `OWNER`, `GROUP`, `MODE`: 定义访问权限. ##### 步骤三:重新加载 udev 规则 保存文件后,执行以下命令使新规则生效: ```bash sudo udevadm control --reload-rules && sudo udevadm trigger ``` 或者按照引用提到的方式重启服务[^3]: ```bash sudo systemctl daemon-reload sudo service udev reload sudo service udev restart ``` --- #### 4. **高级功能——调用脚本** 如果希望在设备插入时自动触发某些行为(如发送通知),可以通过 `RUN+` 实现。例如,在上述规则基础上加入以下部分: ```plaintext RUN+="/usr/local/bin/my_script.sh %k %E{DEVNAME}" ``` 这里 `%k` 表示当前设备的内核名称,`%E{DEVNAME}` 则是从环境变量中提取的设备路径。 注意:为了安全起见,建议将脚本放置于受保护的位置,并确保其具有可执行权限。 --- ### 总结 udev 提供了一种灵活的方式来定制设备事件响应逻辑。无论是简单地修改权限还是复杂的数据采集流程,都可以借助 udev 的强大能力实现自动化处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值