在当前的 Linux 发行版(如 Debian/CentOS/Fedora)下,在 USB 设备插件上自动执行自定义脚本的最先进方法是什么?
例如,如果您想根据 UUID(或设备 ID 等)自动挂载/复制某些文件/卸载 USB 大容量存储设备。
Gil*_*il' 30
把这样的一行放在一个文件中/etc/udev/rules.d:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"
Run Code Online (Sandbox Code Playgroud)
添加一个子句,例如NAME="subdir/mydisk%n"如果您想在/dev.
运行udevadm info -a -n sdb以查看您可以匹配哪些属性(attribute=="value"; 替换sdb为自动分配给磁盘的设备名称,对应于/dev插入时创建的新条目)。请注意,您可以使用ATTRS任何一个节中的子句:您可以选择任何一个节,但这些ATTRS子句必须全部来自同一节,您不能混合和匹配。您可以将ATTRS子句与不同节中列出的其他类型的子句混合使用。
max*_*zig 14
我查看/lib/udev/rules.d了磁盘相关规则的示例。在 Ubuntu 系统上,一个规则文件提供了ID_FS_UUID_ENC可以在自己的规则文件中使用的环境变量。
因此,我将自定义规则文件放在/etc/udev/rules.d/foodevice.rules. 由于它没有以数字为前缀,所以它最终由 udev 运行。顺便说一句,udev 守护进程会监视/etc/udev/rules.d更改,因此您无需在文件更改时重新启动它。
内容/etc/udev/rules.d/foodevice.rules为:
ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
RUN+="/usr/bin/sudo -u juser /home/juser/path/script.sh"
Run Code Online (Sandbox Code Playgroud)
(这是一个规则 - 您必须在 ENV 子句之后删除换行符,因为 udev 没有行继续机制)
由 udev 启动的程序会阻塞守护进程 - 因此它不应运行很长时间。我通过at- 即通过从执行实际工作的过程中分离来解决它:
$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104876 次 |
| 最近记录: |