当前位置:首页 > 文章列表 > 文章 > linux > Linux udevadm info 怎样读取设备属性

Linux udevadm info 怎样读取设备属性

来源:17golang原创 2026-11-12 10:27:22 0浏览 收藏

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
udevadm info 从设备入口读取 name symlink path property 的结构说明图
图1:udevadm info 输入入口与查询类型的静态关系说明图,不是运行截图。

这里有一个容易忽略的边界:--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
udevadm attribute-walk 展示目标设备与父设备 sysfs 属性链的关系图
图2:目标设备沿父设备链读取 sysfs 属性的静态结构说明图,不是运行截图。

阅读这类输出时,先把目标设备和父设备分开记录,再挑出真正描述硬件层级的字段,例如 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 加入。跨发行版脚本应先确认本机工具版本,不能只根据当前机器的行为推断所有环境都支持。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Linux ldd 怎样找出缺失的共享库依赖Linux ldd 怎样找出缺失的共享库依赖
上一篇
Linux ldd 怎样找出缺失的共享库依赖
Linux procfs 怎样查看进程内存映射
下一篇
Linux procfs 怎样查看进程内存映射
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    992次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    995次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1117次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1091次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    932次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码