除了反复轮询所有硬件并检查变化之外,还有其他方法可以判断 Linux 中何时发现硬件发生变化吗?
例如,我编写了一个脚本来挂载手机存储并备份我拍摄的所有新照片。我希望当我将手机插入 USB 端口时自动运行该脚本。
有没有什么方法可以让我的操作系统(debian jessie)告诉我硬件何时发生变化?
答案1
这是在检测到 USB 驱动器后运行 bash 脚本的方法。
连接您的设备并运行lsusb
以检索设备的信息。您应该看到类似以下内容:
$ lsusb
Bus 002 Device 039: ID 0bc2:2100 Seagate RSS LLC
本例中,设备的供应商 ID 为0bc2
,产品 ID 为2100
。
现在您可以创建UDEV
规则。
$sudo vi /etc/udev/rules.d/85-my_usb_device_rule.rules
并添加以下内容:
ACTION=="add", SUBSYSTEM=="usb", SYSFS{idVendor}=="0bc2", SYSFS{idProduct}=="2100", RUN+="/home/myhome/my_script"
/home/myhome/my_script
是您的脚本的路径,它可以执行您想要的任何操作。
为了确保检测脚本立即执行,请重新加载规则UDEV
:
$sudo udevadm control --reload-rules
答案2
每个“文件系统”都有一个可用的 UUID。有些还带有“标签”。(请阅读“man mount”)一旦您连接了 USB 驱动器,您的脚本就会运行。然后,该脚本可以查询新连接的文件系统的 UUID 或标签。有了该标识符,将其与要为该驱动器运行的实际工作脚本进行匹配。我建议使用表 {IDENT} {COMMAND} {COMMENT},这样您只需进行编辑即可将新驱动器添加到处理中。