如何在USB设备插件上运行自定义脚本?

如何在USB设备插件上运行自定义脚本?

在当前的 Linux 发行版(如 Debian/CentOS/Fedora)下,通过 USB 设备插件自动执行自定义脚本的最先进方法是什么?

例如,如果您想根据 UUID(或设备 ID 等)自动挂载/复制某些文件/卸载 USB 大容量存储设备。

答案1

将这样的行放入以下文件中/etc/udev/rules.d

KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"

添加一个子句,例如NAME="subdir/mydisk%n"如果您想在 下使用自定义条目路径/dev

运行udevadm info -a -n sdb以查看可以匹配哪些属性(attribute=="value";替换sdb为自动分配给磁盘的设备名称,对应于/dev插入磁盘时创建的新条目)。请注意,您可以使用ATTRS任意子句stanza:您可以选择任何节,但ATTRS子句必须全部来自同一节,不能混合搭配。您可以将ATTRS子句与不同节中列出的其他类型的子句混合使用。

答案2

我查找了/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"

(这是一条规则 - 您必须删除 ENV 子句后的换行符,因为 udev 没有行继续机制)

由 udev 启动的程序会阻塞守护进程 - 因此它不会运行很长时间。我通过以下方式解决了这个问题at- 即通过脱离实际工作的流程:

$ cat /home/juser/path/script.sh
#!/bin/sh
echo /path/to/mountcopystuff.sh | at now

相关内容