You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于udev规则中ATTRS与ATTR的区别及区分原因的技术问询

关于udev规则中ATTR与ATTRS的区别解答

1. 核心区别:作用的设备对象完全不同

  • ATTR{}:只匹配当前你编写规则针对的那个设备节点本身的属性。比如你给某个USB键盘写规则,ATTR{idVendor}就是直接读取这个键盘设备节点下的idVendor属性,只会在当前节点找,不会往上找。
  • ATTRS{}:会在**当前设备的整个父设备链(从当前节点往上追溯的所有层级父设备)**里查找匹配的属性。还是拿USB键盘举例,它的父设备可能是USB集线器,再往上是主板上的USB控制器,ATTRS{idVendor}会检查这条链上所有设备的idVendor属性,只要其中一个符合就算匹配成功。

2. 为什么要做这样的区分?

这得从Linux设备模型的层级逻辑说起:

  • 很多外设的关键属性并不全存在于自身的设备节点中。比如有些USB设备的部分标识信息可能存储在它的上游集线器或者控制器节点里,这时候用ATTR{}根本拿不到这些属性,必须用ATTRS{}去父链里检索。
  • 另外,这种区分能实现更灵活的设备匹配场景:比如你想给连接到某款特定USB控制器的所有设备统一设置权限,就可以用ATTRS{idVendor}匹配控制器的厂商ID,而不是单个设备的,这样就能批量覆盖符合条件的下游设备。

举两个实际例子帮助理解:

匹配所有连接到某款特定USB集线器的设备,规则会写成:

SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666"

这里的ATTRS就是在父链中定位集线器的属性,而非下游设备自身的属性。

而针对单个设备自身属性的匹配(比如给特定鼠标设置权限):

SUBSYSTEM=="input", ATTR{idVendor}=="abcd", ATTR{idProduct}=="wxyz", MODE="0666"

这里用ATTR就足够,因为我们要匹配的是鼠标自身的标识信息。

内容的提问来源于stack exchange,提问作者RomuloPBenedetti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:12:51