为什么我的 udev 规则执行了 3 次

Mat*_*ieu 7 udev

我制定了一个小 udev 规则来启动一个脚本,该脚本可以对我的~/Documents目录进行归档。这样就可以了,但是当我读取日志文件时,似乎在我插入密钥时存档脚本执行了 3 次。

这是我的规则:

ACTION=="add", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1642", RUN+="/bin/sh /root/auto-archive" 
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

ACTION=="add", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{idVendor}=="0951", ATTRS{idProduct}=="1642", RUN+="/bin/sh /root/auto-archive" 
Run Code Online (Sandbox Code Playgroud)

任何的想法?谢谢。

---在 Sparhawk 评论后编辑---

udevadm用我的钥匙运行:

udevadm info -a -p $(udevadm info -q path -n /dev/sbd)
Run Code Online (Sandbox Code Playgroud)

这给了:

looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0/host4/target4:0:0/4:0:0:0/block/sdb':
  KERNEL=="sdb"
  SUBSYSTEM=="block"
  DRIVER==""

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0/host4/target4:0:0/4:0:0:0':
  KERNELS=="4:0:0:0"
  SUBSYSTEMS=="scsi"
  DRIVERS=="sd"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0/host4/target4:0:0':
  KERNELS=="target4:0:0"
  SUBSYSTEMS=="scsi"
  DRIVERS==""

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0/host4':
  KERNELS=="host4"
  SUBSYSTEMS=="scsi"
  DRIVERS==""

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1/1-1:1.0':
  KERNELS=="1-1:1.0"
  SUBSYSTEMS=="usb"
  DRIVERS=="usb-storage"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-1':
  KERNELS=="1-1"
  SUBSYSTEMS=="usb"
  DRIVERS=="usb"
  ATTRS{idVendor}=="0951"
  ATTRS{idProduct}=="1642"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
  KERNELS=="usb1"
  SUBSYSTEMS=="usb"
  DRIVERS=="usb"
  ATTRS{idVendor}=="1d6b"
  ATTRS{idProduct}=="0002"

looking at parent device '/devices/pci0000:00/0000:00:1d.7':
  KERNELS=="0000:00:1d.7"
  SUBSYSTEMS=="pci"
  DRIVERS=="ehci-pci"
  ATTRS{irq}=="23"

looking at parent device '/devices/pci0000:00':
  KERNELS=="pci0000:00"
  SUBSYSTEMS==""
  DRIVERS==""
Run Code Online (Sandbox Code Playgroud)

我试图仅基于以下内容编写规则:

  KERNELS=="1-1"
  SUBSYSTEMS=="usb"
  DRIVERS=="usb"
  ATTRS{idVendor}=="0951"
  ATTRS{idProduct}=="1642"
Run Code Online (Sandbox Code Playgroud)

  KERNELS=="usb1"
  SUBSYSTEMS=="usb"
  DRIVERS=="usb"
  ATTRS{idVendor}=="1d6b"
  ATTRS{idProduct}=="0002"
Run Code Online (Sandbox Code Playgroud)

结果是一样的:脚本被多次调用......

Mat*_*ieu 6

问题来自您的规则:您只尝试匹配设备的父设备,而不是设备本身……有关详细信息,请参阅http://reactivated.net/writing_udev_rules.html#sysfstree

  • 您必须匹配设备 ( KERNEL=, SUBSYSTEM=, ATTR=...),
  • 及其父级之一 ( KERNELS=, SUBSYSTEMS=, ATTRS=...) (注意字段末尾的“S”)。

更正后的规则是:

ACTION=="add", KERNEL=="sdb1", SUBSYSTEM=="block", ATTRS{vendor}=="Kingston", ATTRS{model}=="DT 101 G2", RUN+="/bin/sh /root/auto-archive"
Run Code Online (Sandbox Code Playgroud)