udev $kernel 或 %k 替换没有正确扩展
udev $kernel or %k substitution not expanding correctly
我遇到了很多麻烦。预先感谢您的帮助。
我正在尝试将 $kernel
或 %k
传递给 USB 录音机输入上的 bash 脚本。我有两个问题和 1 个挑战。
%k
或 $kernel
都不会扩展为 "sdd" 或 "sdc",等等。相反,我得到了一堆数字。
- udev 运行s 相同的脚本在连接时两次,所以我唯一能想到的是因为脚本 运行s 一次用于主内核,例如sdd 并再次用于分区 sdd1。但这只是一个猜测。
我必须应对的挑战是,有许多这样的设备物理插入时彼此相隔大约几秒钟。他们都匹配。我在插入设备后使用 usbmount 自动挂载设备,但即使在 bash 脚本中使用 "sleep" 时也是如此。所以.. 我知道如果我将确切的设备内核传递给 bash 脚本,我可以自己安装它们。但是,由于 %k 没有扩展到 sdd 或其他任何东西。我无法 运行 bash 脚本中的 mount 命令。下面是我想出的规则。我错过了什么吗?
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0271", RUN+="/home/user/recorder.sh %k"
如果我 运行 blkid
它会显示所有插入设备的列表及其内核路径但是我无法区分哪个属于哪个 udev 规则运行.
如果没有人知道可能是什么问题,我可以让某人在插入所有设备后手动 运行 一个脚本,运行 是命令 blkid
,然后解析该信息以开始单独安装它们,但我更愿意找出第一种方法。
此外,如果第二种方法是可行的方法,有人可以帮我解析以在 运行ning blkid
时获取此信息。 fyi 第一个冒号之后的所有内容都可以按照不同的顺序排列,如下所示,所以如果您一直认为 %2 等于 LABEL="WS_400S" .. 它不会。
示例:
/dev/sdd1: SEC_TYPE="msdos" LABEL="WS_400S" TYPE="vfat"
/dev/sde1: SEC_TYPE="msdos" TYPE="vfat" LABEL="WS_400S"
/dev/sdf1: LABEL="WS_400S" SEC_TYPE="msdos" TYPE="vfat"
只是对与 LABEL 匹配的任何东西感兴趣并且只输出 /dev/sd??进入一个变量。
这里的问题是规则匹配。当插入单个 USB 驱动器时,会生成一系列 udev
事件,对应于创建的所有设备节点(USB 树)。叶是分区(块设备),顶层父是 PCI 总线。
因此规则匹配两个节点,其中一个节点不是具有内核名称 sdxY
的叶节点,也不是其直接父节点(磁盘)sdx
.
要查看整棵树并检查您的规则何时被触发,运行:
udevadm info --attribute-walk --name=/dev/sdb1
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0/block/sdb/sdb1':
KERNEL=="sdb1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="7892024"
ATTR{stat}==" 174 606 1347 360 0 0 0 0 0 356 356"
ATTR{partition}=="1"
ATTR{start}=="63"
ATTR{discard_alignment}=="0"
ATTR{alignment_offset}=="0"
ATTR{inflight}==" 0 0"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0/block/sdb':
KERNELS=="sdb"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{ro}=="0"
ATTRS{size}=="7892087"
ATTRS{stat}==" 189 655 1411 2208 0 0 0 0 0 600 2204"
ATTRS{range}=="16"
ATTRS{discard_alignment}=="0"
ATTRS{events}=="media_change"
ATTRS{ext_range}=="256"
ATTRS{events_poll_msecs}=="2000"
ATTRS{alignment_offset}=="0"
ATTRS{inflight}==" 0 0"
ATTRS{removable}=="1"
ATTRS{capability}=="51"
ATTRS{events_async}==""
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0':
KERNELS=="7:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{rev}=="0.00"
ATTRS{type}=="0"
ATTRS{scsi_level}=="3"
ATTRS{model}=="USB Flash Drive "
ATTRS{state}=="running"
ATTRS{queue_type}=="none"
ATTRS{iodone_cnt}=="0xe7"
ATTRS{iorequest_cnt}=="0xe7"
ATTRS{device_busy}=="0"
ATTRS{evt_capacity_change_reported}=="0"
ATTRS{timeout}=="30"
ATTRS{evt_media_change}=="0"
ATTRS{max_sectors}=="240"
ATTRS{ioerr_cnt}=="0x1"
ATTRS{queue_depth}=="1"
ATTRS{vendor}=="ADATA "
ATTRS{evt_soft_threshold_reached}=="0"
ATTRS{device_blocked}=="0"
ATTRS{evt_mode_parameter_change_reported}=="0"
ATTRS{evt_lun_change_reported}=="0"
ATTRS{evt_inquiry_change_reported}=="0"
ATTRS{iocounterbits}=="32"
ATTRS{eh_timeout}=="10"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0':
KERNELS=="target7:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7':
KERNELS=="host7"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0':
KERNELS=="2-1.2:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usb-storage"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bInterfaceProtocol}=="50"
ATTRS{bNumEndpoints}=="02"
ATTRS{supports_autosuspend}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceNumber}=="00"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2':
KERNELS=="2-1.2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{devpath}=="1.2"
ATTRS{idVendor}=="125f"
ATTRS{speed}=="480"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{busnum}=="2"
ATTRS{devnum}=="13"
ATTRS{configuration}==""
ATTRS{bMaxPower}=="98mA"
ATTRS{authorized}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bNumConfigurations}=="1"
ATTRS{maxchild}=="0"
ATTRS{bcdDevice}=="0100"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{quirks}=="0x0"
ATTRS{serial}=="a01782d293d17d"
ATTRS{version}==" 2.00"
ATTRS{urbnum}=="689"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="ADATA"
ATTRS{removable}=="removable"
ATTRS{idProduct}=="c96a"
ATTRS{bDeviceClass}=="00"
ATTRS{product}=="ADATA USB Flash Drive"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1':
KERNELS=="2-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{devpath}=="1"
ATTRS{idVendor}=="8087"
ATTRS{speed}=="480"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{busnum}=="2"
ATTRS{devnum}=="2"
ATTRS{configuration}==""
ATTRS{bMaxPower}=="0mA"
ATTRS{authorized}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bNumConfigurations}=="1"
ATTRS{maxchild}=="8"
ATTRS{bcdDevice}=="0000"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{quirks}=="0x0"
ATTRS{version}==" 2.00"
ATTRS{urbnum}=="258"
ATTRS{ltm_capable}=="no"
ATTRS{removable}=="unknown"
ATTRS{idProduct}=="0020"
ATTRS{bDeviceClass}=="09"
looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2':
KERNELS=="usb2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{devpath}=="0"
ATTRS{idVendor}=="1d6b"
ATTRS{speed}=="480"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{authorized_default}=="1"
ATTRS{busnum}=="2"
ATTRS{devnum}=="1"
ATTRS{configuration}==""
ATTRS{bMaxPower}=="0mA"
ATTRS{authorized}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bNumConfigurations}=="1"
ATTRS{maxchild}=="3"
ATTRS{bcdDevice}=="0313"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{quirks}=="0x0"
ATTRS{serial}=="0000:00:1d.0"
ATTRS{version}==" 2.00"
ATTRS{urbnum}=="26"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Linux 3.13.0-49-generic ehci_hcd"
ATTRS{removable}=="unknown"
ATTRS{idProduct}=="0002"
ATTRS{bDeviceClass}=="09"
ATTRS{product}=="EHCI Host Controller"
looking at parent device '/devices/pci0000:00/0000:00:1d.0':
KERNELS=="0000:00:1d.0"
SUBSYSTEMS=="pci"
DRIVERS=="ehci-pci"
ATTRS{irq}=="17"
ATTRS{subsystem_vendor}=="0x1028"
ATTRS{broken_parity_status}=="0"
ATTRS{class}=="0x0c0320"
ATTRS{companion}==""
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{dma_mask_bits}=="32"
ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
ATTRS{device}=="0x3b34"
ATTRS{uframe_periodic_max}=="100"
ATTRS{enable}=="1"
ATTRS{msi_bus}==""
ATTRS{local_cpulist}=="0-3"
ATTRS{vendor}=="0x8086"
ATTRS{subsystem_device}=="0x040a"
ATTRS{numa_node}=="-1"
ATTRS{d3cold_allowed}=="1"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
SUBSYSTEM=="usb"
匹配:usb2
、2-1
、2-1.2
、2-1.2:1.0
ATTRS{idVendor}=="125f"
匹配:2-1.2
、2-1.2:1.0
、host7
、target7:0:0
、7:0:0:0
、sdb
、sdb1
ATTRS{idProduct}=="c96a"
匹配:2-1.2
、2-1.2:1.0
、host7
、target7:0:0
、7:0:0:0
、sdb
、sdb1
(与ATTRS{idVendor}=="07b4"
相同)
要触发规则,所有条件都必须匹配。所以只有 2-1.2
& 2-1.2:1.0
个节点会触发这个规则。
一种确认写入新规则的方式:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="125f", ATTRS{idProduct}=="c96a", RUN+="/bin/sh -c 'echo `date` %k %p >> /tmp/usb-key-nodes.log' "
重新加载规则并重新插入密钥后:
tail /tmp/usb-key-nodes.log
Mon Jul 6 17:08:38 CET 2015 1-2 /devices/pci0000:00/0000:00:14.0/usb1/1-2
Mon Jul 6 17:08:38 CET 2015 1-2:1.0 /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0
我遇到了很多麻烦。预先感谢您的帮助。
我正在尝试将 $kernel
或 %k
传递给 USB 录音机输入上的 bash 脚本。我有两个问题和 1 个挑战。
%k
或$kernel
都不会扩展为 "sdd" 或 "sdc",等等。相反,我得到了一堆数字。- udev 运行s 相同的脚本在连接时两次,所以我唯一能想到的是因为脚本 运行s 一次用于主内核,例如sdd 并再次用于分区 sdd1。但这只是一个猜测。
我必须应对的挑战是,有许多这样的设备物理插入时彼此相隔大约几秒钟。他们都匹配。我在插入设备后使用 usbmount 自动挂载设备,但即使在 bash 脚本中使用 "sleep" 时也是如此。所以.. 我知道如果我将确切的设备内核传递给 bash 脚本,我可以自己安装它们。但是,由于 %k 没有扩展到 sdd 或其他任何东西。我无法 运行 bash 脚本中的 mount 命令。下面是我想出的规则。我错过了什么吗?
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="07b4", ATTRS{idProduct}=="0271", RUN+="/home/user/recorder.sh %k"
如果我 运行 blkid
它会显示所有插入设备的列表及其内核路径但是我无法区分哪个属于哪个 udev 规则运行.
如果没有人知道可能是什么问题,我可以让某人在插入所有设备后手动 运行 一个脚本,运行 是命令 blkid
,然后解析该信息以开始单独安装它们,但我更愿意找出第一种方法。
此外,如果第二种方法是可行的方法,有人可以帮我解析以在 运行ning blkid
时获取此信息。 fyi 第一个冒号之后的所有内容都可以按照不同的顺序排列,如下所示,所以如果您一直认为 %2 等于 LABEL="WS_400S" .. 它不会。
示例:
/dev/sdd1: SEC_TYPE="msdos" LABEL="WS_400S" TYPE="vfat"
/dev/sde1: SEC_TYPE="msdos" TYPE="vfat" LABEL="WS_400S"
/dev/sdf1: LABEL="WS_400S" SEC_TYPE="msdos" TYPE="vfat"
只是对与 LABEL 匹配的任何东西感兴趣并且只输出 /dev/sd??进入一个变量。
这里的问题是规则匹配。当插入单个 USB 驱动器时,会生成一系列
udev
事件,对应于创建的所有设备节点(USB 树)。叶是分区(块设备),顶层父是 PCI 总线。因此规则匹配两个节点,其中一个节点不是具有内核名称
sdxY
的叶节点,也不是其直接父节点(磁盘)sdx
.要查看整棵树并检查您的规则何时被触发,运行:
udevadm info --attribute-walk --name=/dev/sdb1
Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0/block/sdb/sdb1': KERNEL=="sdb1" SUBSYSTEM=="block" DRIVER=="" ATTR{ro}=="0" ATTR{size}=="7892024" ATTR{stat}==" 174 606 1347 360 0 0 0 0 0 356 356" ATTR{partition}=="1" ATTR{start}=="63" ATTR{discard_alignment}=="0" ATTR{alignment_offset}=="0" ATTR{inflight}==" 0 0" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0/block/sdb': KERNELS=="sdb" SUBSYSTEMS=="block" DRIVERS=="" ATTRS{ro}=="0" ATTRS{size}=="7892087" ATTRS{stat}==" 189 655 1411 2208 0 0 0 0 0 600 2204" ATTRS{range}=="16" ATTRS{discard_alignment}=="0" ATTRS{events}=="media_change" ATTRS{ext_range}=="256" ATTRS{events_poll_msecs}=="2000" ATTRS{alignment_offset}=="0" ATTRS{inflight}==" 0 0" ATTRS{removable}=="1" ATTRS{capability}=="51" ATTRS{events_async}=="" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0/7:0:0:0': KERNELS=="7:0:0:0" SUBSYSTEMS=="scsi" DRIVERS=="sd" ATTRS{rev}=="0.00" ATTRS{type}=="0" ATTRS{scsi_level}=="3" ATTRS{model}=="USB Flash Drive " ATTRS{state}=="running" ATTRS{queue_type}=="none" ATTRS{iodone_cnt}=="0xe7" ATTRS{iorequest_cnt}=="0xe7" ATTRS{device_busy}=="0" ATTRS{evt_capacity_change_reported}=="0" ATTRS{timeout}=="30" ATTRS{evt_media_change}=="0" ATTRS{max_sectors}=="240" ATTRS{ioerr_cnt}=="0x1" ATTRS{queue_depth}=="1" ATTRS{vendor}=="ADATA " ATTRS{evt_soft_threshold_reached}=="0" ATTRS{device_blocked}=="0" ATTRS{evt_mode_parameter_change_reported}=="0" ATTRS{evt_lun_change_reported}=="0" ATTRS{evt_inquiry_change_reported}=="0" ATTRS{iocounterbits}=="32" ATTRS{eh_timeout}=="10" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7/target7:0:0': KERNELS=="target7:0:0" SUBSYSTEMS=="scsi" DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host7': KERNELS=="host7" SUBSYSTEMS=="scsi" DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0': KERNELS=="2-1.2:1.0" SUBSYSTEMS=="usb" DRIVERS=="usb-storage" ATTRS{bInterfaceClass}=="08" ATTRS{bInterfaceSubClass}=="06" ATTRS{bInterfaceProtocol}=="50" ATTRS{bNumEndpoints}=="02" ATTRS{supports_autosuspend}=="1" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceNumber}=="00" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2': KERNELS=="2-1.2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{devpath}=="1.2" ATTRS{idVendor}=="125f" ATTRS{speed}=="480" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{busnum}=="2" ATTRS{devnum}=="13" ATTRS{configuration}=="" ATTRS{bMaxPower}=="98mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="80" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="0" ATTRS{bcdDevice}=="0100" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{serial}=="a01782d293d17d" ATTRS{version}==" 2.00" ATTRS{urbnum}=="689" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="ADATA" ATTRS{removable}=="removable" ATTRS{idProduct}=="c96a" ATTRS{bDeviceClass}=="00" ATTRS{product}=="ADATA USB Flash Drive" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1': KERNELS=="2-1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="01" ATTRS{devpath}=="1" ATTRS{idVendor}=="8087" ATTRS{speed}=="480" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{busnum}=="2" ATTRS{devnum}=="2" ATTRS{configuration}=="" ATTRS{bMaxPower}=="0mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="e0" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="8" ATTRS{bcdDevice}=="0000" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{version}==" 2.00" ATTRS{urbnum}=="258" ATTRS{ltm_capable}=="no" ATTRS{removable}=="unknown" ATTRS{idProduct}=="0020" ATTRS{bDeviceClass}=="09" looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2': KERNELS=="usb2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{devpath}=="0" ATTRS{idVendor}=="1d6b" ATTRS{speed}=="480" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{authorized_default}=="1" ATTRS{busnum}=="2" ATTRS{devnum}=="1" ATTRS{configuration}=="" ATTRS{bMaxPower}=="0mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="e0" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="3" ATTRS{bcdDevice}=="0313" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{serial}=="0000:00:1d.0" ATTRS{version}==" 2.00" ATTRS{urbnum}=="26" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="Linux 3.13.0-49-generic ehci_hcd" ATTRS{removable}=="unknown" ATTRS{idProduct}=="0002" ATTRS{bDeviceClass}=="09" ATTRS{product}=="EHCI Host Controller" looking at parent device '/devices/pci0000:00/0000:00:1d.0': KERNELS=="0000:00:1d.0" SUBSYSTEMS=="pci" DRIVERS=="ehci-pci" ATTRS{irq}=="17" ATTRS{subsystem_vendor}=="0x1028" ATTRS{broken_parity_status}=="0" ATTRS{class}=="0x0c0320" ATTRS{companion}=="" ATTRS{consistent_dma_mask_bits}=="32" ATTRS{dma_mask_bits}=="32" ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f" ATTRS{device}=="0x3b34" ATTRS{uframe_periodic_max}=="100" ATTRS{enable}=="1" ATTRS{msi_bus}=="" ATTRS{local_cpulist}=="0-3" ATTRS{vendor}=="0x8086" ATTRS{subsystem_device}=="0x040a" ATTRS{numa_node}=="-1" ATTRS{d3cold_allowed}=="1" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""
SUBSYSTEM=="usb"
匹配:usb2
、2-1
、2-1.2
、2-1.2:1.0
ATTRS{idVendor}=="125f"
匹配:2-1.2
、2-1.2:1.0
、host7
、target7:0:0
、7:0:0:0
、sdb
、sdb1
ATTRS{idProduct}=="c96a"
匹配:2-1.2
、2-1.2:1.0
、host7
、target7:0:0
、7:0:0:0
、sdb
、sdb1
(与ATTRS{idVendor}=="07b4"
相同)
要触发规则,所有条件都必须匹配。所以只有
2-1.2
&2-1.2:1.0
个节点会触发这个规则。一种确认写入新规则的方式:
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="125f", ATTRS{idProduct}=="c96a", RUN+="/bin/sh -c 'echo `date` %k %p >> /tmp/usb-key-nodes.log' "
重新加载规则并重新插入密钥后:
tail /tmp/usb-key-nodes.log
Mon Jul 6 17:08:38 CET 2015 1-2 /devices/pci0000:00/0000:00:14.0/usb1/1-2 Mon Jul 6 17:08:38 CET 2015 1-2:1.0 /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0