![如何使脚本在安装 USB 驱动器时对其起作用](https://linux22.com/image/125857/%E5%A6%82%E4%BD%95%E4%BD%BF%E8%84%9A%E6%9C%AC%E5%9C%A8%E5%AE%89%E8%A3%85%20USB%20%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%97%B6%E5%AF%B9%E5%85%B6%E8%B5%B7%E4%BD%9C%E7%94%A8%20.png)
好吧,这就是我想要实现的目标,
我想配置多个系统以随时启动脚本任何安装 USB 记忆棒,然后如果 USB 记忆棒上有特定文件夹,则将其内容复制到系统上的文件夹中。
我已经做了研究并找到了在安装特定 USB 时运行脚本的方法,但没有找到任何方法。其次,因为我希望脚本自动作用于新安装的 USB 记忆棒,所以我需要将其安装点或 root 路径传递给脚本或其他一些解决方法。
实际上,我已经编写了一个脚本来查找目录,然后复制我想要完成的目录,但我不知道如何在安装的任何 USB 上使用它
本质上,这样做的实际原因是我希望能够将任意棒插入多个系统并自动将文件复制到每个系统上。我有 2 个 ubuntu 安装和另外 2 个基于树莓派的 libreelec,所以没有太多安装额外软件包的选项,我希望主要是基本的 systemd 和 bash 脚本
我想要一个跨 Linux 的解决方案,因为它将与 ubuntu 和 libreelec 一起使用。我更喜欢使用 system d 但 udev 可能最终是一个更好的解决方案。
答案1
udev 规则是实现此目的的最简单方法。 udev 规则存储在/etc/udev/rules.d
并通常遵循以下格式:NN-filename.rule
whereNN
决定首先加载哪个规则文件。
例如,/etc/udev/rules.d/10-local.rules
添加以下内容将在每次连接可移动块设备时触发一个事件,其内核名称格式为sdX
:
KERNEL=="sd?", SUBSYSTEM=="block", ATTR{removable}=="1", RUN+="/path/to/script.sh"
请注意,这可能会在安装设备之前启动您的脚本,这意味着您可能必须手动安装设备。
如果您想匹配不同的规则,您可以找出您正在使用的设备引起的所有事件的属性udevadm info -a /dev/devname
。