Linux udevadm info 怎样读取设备属性
来源:17golang原创
时间:2026-11-12 10:27:22 348浏览 收藏
Linux udevadm info 怎样读取设备属性
排查 Linux 设备时,真正容易混淆的不是命令本身,而是“我要查哪一层”:设备节点名称、符号链接、sysfs 路径,还是 udev 数据库里的属性。udevadm info 的作用就是查询这些设备信息;它可以接受 /dev/ 设备名、/sys/ 路径、设备 ID 或 systemd 设备单元作为入口。
最实用的选择是:先用 --name 或位置参数定位设备,再用 --query=property 读取属性;需要知道父设备链上哪些 sysfs 字段可用于匹配时,再使用 --attribute-walk。不要把属性查询和修改设备节点混为一谈,本文只讨论读取。
官方地址:https://www.freedesktop.org/software/systemd/man/latest/udevadm.html
先分清 udevadm info 的输入和查询类型
udevadm info 查询的是 udev 数据库中的设备信息。输入可以是设备节点、sysfs 路径或设备单元;--query 决定返回哪一类信息:
| 查询类型 | 适合回答的问题 |
|---|---|
name | 这个设备对应的设备节点名称是什么 |
symlink | 它有哪些 udev 符号链接 |
path | 它在 sysfs 中的路径是什么 |
property | 它有哪些环境属性和设备字段 |
all | 需要一次查看多类信息 |
# 用设备节点作为入口,读取 udev 记录中的全部常用信息 udevadm info --query=all --name=/dev/sda # 用 sysfs 路径作为入口;--path 的值可以省略开头的 /sys/ udevadm info --query=path --path=/class/block/sda # 直接使用以 /dev/ 或 /sys/ 开头的位置参数也可以定位设备 udevadm info --query=name /dev/sda

这里有一个容易忽略的边界:--name 和 --path 是定位设备的两种入口,不是查询结果类型;--query=name 和 --query=path 才是在选择返回什么。把两组参数分别理解,命令就不容易写反。
用 property 读取设备属性
需要查看设备属性时,使用 --query=property。默认会列出已知属性;当你只关心几个字段时,用 --property 传入逗号分隔的名称,输出会更适合复制到排障记录或后续脚本中。
# 只读取设备名、设备路径和子系统,避免无关字段淹没重点 udevadm info --query=property --name=/dev/sda \ --property=DEVNAME,DEVPATH,SUBSYSTEM # 只取指定属性的值;这个选项适合交给脚本继续处理 udevadm info --query=property --name=/dev/sda \ --property=DEVPATH --value
--value 只在属性查询时输出值,不再带上属性名和等号。官方文档注明该选项自 systemd 250 加入,因此跨发行版脚本如果要兼容更老的环境,应先确认本机的 udevadm 支持情况;不确定时保留默认的 NAME=value 形式更稳妥。
字段选择可以按这三个问题来做:
- 想确认当前设备是谁:优先看
DEVNAME、DEVPATH和SUBSYSTEM。 - 想知道稳定访问入口:查看
symlink查询结果,区分设备节点和符号链接。 - 想把结果交给脚本:使用
--property缩小字段,只有在确认版本支持时才加--value。
用 attribute-walk 观察父设备链
有些字段并不直接出现在目标设备上,而是在它的父设备或更上层 sysfs 节点上。此时使用 --attribute-walk,它会沿设备链向上展示可以用于 udev 规则匹配的 sysfs 属性。它回答的是“哪些设备层级拥有可匹配属性”,不是单纯把环境属性再打印一次。
# 从目标设备向父设备链展开可用于匹配的 sysfs 属性 udevadm info --attribute-walk --name=/dev/sda # 也可以从明确的 sysfs 路径开始,避免设备名存在多个链接时产生歧义 udevadm info --attribute-walk --path=/class/block/sda

阅读这类输出时,先把目标设备和父设备分开记录,再挑出真正描述硬件层级的字段,例如 DEVPATH、SUBSYSTEM 或具体的 sysfs 属性。不要看到父设备上的字段就直接当成目标设备自身属性,层级边界正是 attribute-walk 的价值。
按排障目标选择命令
实际使用时可以把命令选择压缩成一张小表:
| 目标 | 建议写法 | 结果重点 |
|---|---|---|
| 确认设备节点 | --query=name | 设备名或节点路径 |
| 确认符号链接 | --query=symlink | 稳定访问别名 |
| 确认 sysfs 位置 | --query=path | 设备在 sysfs 中的路径 |
| 筛选环境属性 | --query=property --property=... | 目标字段及其值 |
| 寻找规则匹配字段 | --attribute-walk | 目标设备与父设备链的 sysfs 属性 |
如果只是想知道“这个 /dev 节点对应什么”,从 --query=all 或 --query=property 开始;如果你正在写规则前寻找匹配条件,先用 --attribute-walk 找到层级,再把真正属于目标设备或父设备的字段分别记下。
常见误区
把 property 和 attribute-walk 当成同一种输出
property 面向 udev 数据库中的设备属性,适合读取当前设备的环境字段;attribute-walk 面向设备及其父设备链中的 sysfs 属性,适合寻找匹配条件。两者都能“看到字段”,但字段来源和使用场景不同。
只会用设备名,不确认输入边界
设备节点适合日常查询,但脚本或文档需要稳定表达时,sysfs 路径往往更能说明设备层级。若同一设备存在多个符号链接,先用 --query=symlink 看清楚各入口,再决定后续使用哪一个。
把读取命令当成修改命令
udevadm info 这里只负责查询。它不会因为你读取了属性就改变设备配置;重新加载规则、触发事件或修改设备节点属于其他命令和另一套操作边界,不应混在这篇查询流程里。
总结
记住一条主线就够了:先用设备节点、sysfs 路径或设备单元定位目标,再用 --query 选择数据类型;需要精确字段就加 --property,需要纯值且环境支持时加 --value;要查父设备链上的匹配属性,则换用 --attribute-walk。这样既能快速回答设备“是谁、在哪里、有哪些属性”,也能避免把目标设备字段和父设备字段混在一起。
相关问题
udevadm info 怎样按字段读取属性?
使用 --query=property --property=字段1,字段2,只保留需要的属性;脚本需要纯值时再根据版本支持情况添加 --value。
udevadm info --path 和直接写 /sys 路径有什么区别?
两者都可以指定 sysfs 设备路径,--path 是显式选项,位置参数则直接传入以 /sys/ 开头的路径。为了让文档更清楚,建议在复杂脚本中使用显式选项。
为什么 property 看不到父设备字段?
因为 property 主要查询当前设备的 udev 属性;需要沿父设备链查看可匹配的 sysfs 属性时,应使用 --attribute-walk。
--value 可以在所有 Linux 发行版上使用吗?
官方文档注明它自 systemd 250 加入。跨发行版脚本应先确认本机工具版本,不能只根据当前机器的行为推断所有环境都支持。
-
392 收藏
-
217 收藏
-
332 收藏
-
395 收藏
-
115 收藏
-
441 收藏
-
157 收藏
-
230 收藏
-
177 收藏
-
405 收藏
-
106 收藏
-
159 收藏
-
254 收藏
-
377 收藏
-
275 收藏
-
245 收藏
-
500 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习