当前位置: 首页 > article >正文

Linux系统用户的专属福利:除了lsusb,如何利用usb.ids文件离线查询所有USB设备VID/PID信息?

Linux系统深度实践离线高效查询USB设备VID/PID的完整指南当你身处没有网络连接的机房或是调试嵌入式设备时突然需要确认一个USB设备的厂商信息该怎么办对于Linux系统用户来说答案就藏在系统深处的一个小文件中——usb.ids。这个不起眼的文本文件实际上是Linux系统管理USB设备的秘密武器。1. 理解USB设备标识体系每个USB设备都带有两个关键标识符VIDVendor ID和PIDProduct ID。这两个16位数字组合构成了USB设备的身份证VID由USB-IFUSB Implementers Forum分配给设备制造商PID由制造商自行定义标识具体产品型号在Linux系统中这些标识符的映射关系被存储在一个结构化的文本数据库中。不同于需要联网查询的在线服务本地usb.ids文件提供了随时可用的离线查询能力特别适合以下场景无网络环境的服务器机房嵌入式设备开发调试自动化脚本中的设备识别批量处理多个USB设备信息2. 定位系统中的usb.ids文件不同Linux发行版中usb.ids文件可能存放在以下几个位置文件路径常见发行版备注/usr/share/misc/usb.idsDebian/Ubuntu, Fedora最普遍的位置/var/lib/usbutils/usb.ids较新的系统由usbutils包维护/usr/share/hwdata/usb.ids某些Red Hat系系统替代位置要确认你的系统中是否存在该文件可以执行find /usr /var -name usb.ids 2/dev/null如果系统中没有找到该文件可能需要安装usbutils软件包# Debian/Ubuntu sudo apt install usbutils # RHEL/CentOS sudo yum install usbutils3. 解析usb.ids文件结构usb.ids文件采用层级化的文本格式主要包含三部分内容厂商列表以VID开头后接厂商名称产品列表在厂商条目下以PID开头后接产品名称设备类信息定义USB设备类、子类和协议代码典型条目示例1234 Example Manufacturer 5678 Sample Product A 9abc Sample Product B理解这个结构后我们可以利用各种文本处理工具从中提取所需信息。4. 实战查询技巧4.1 基础查询方法使用grep命令进行简单查询# 查询特定VID对应的厂商 grep -i ^1234 /usr/share/misc/usb.ids # 查询特定VID和PID组合 grep -A1 -i ^1234 /usr/share/misc/usb.ids | grep -i 56784.2 高级查询脚本对于更复杂的查询需求可以创建可重用的脚本#!/bin/bash USBIDS_FILE/usr/share/misc/usb.ids if [ $# -lt 1 ]; then echo Usage: $0 VID [PID] exit 1 fi VID$(echo $1 | tr [:lower:] [:upper:]) PID$2 if [ -z $PID ]; then # 只查询VID grep -m1 -i ^${VID} $USBIDS_FILE else # 查询VID和PID组合 PID$(echo $PID | tr [:lower:] [:upper:]) awk -v vid$VID -v pid$PID BEGIN {found_vid0} $1 vid {found_vid1; print; next} found_vid /^\t/ $1 pid {print; exit} found_vid /^\t/ $1 ! pid {next} found_vid !/^\t/ {exit} $USBIDS_FILE fi将此脚本保存为usbquery并赋予执行权限后可以方便地查询./usbquery 093A ./usbquery 093A 25104.3 批量处理多个设备当需要处理多个USB设备信息时可以结合lsusb和脚本处理lsusb | awk {print $6} | while IFS: read vid pid; do echo Device $vid:$pid: ./usbquery $vid $pid done5. 维护与更新本地数据库虽然离线查询很方便但usb.ids文件需要定期更新以包含最新的设备信息。5.1 手动更新方法# 下载最新usb.ids文件 sudo wget http://www.linux-usb.org/usb.ids -O /usr/share/misc/usb.ids # 或者使用curl sudo curl -o /usr/share/misc/usb.ids http://www.linux-usb.org/usb.ids5.2 自动化更新创建定期更新的cron任务# 每月1号凌晨3点更新 0 3 1 * * root /usr/bin/curl -s -o /usr/share/misc/usb.ids http://www.linux-usb.org/usb.ids5.3 验证文件完整性更新后建议检查文件有效性head -n 10 /usr/share/misc/usb.ids # 应该看到类似内容 # # List of USB IDs # # # # Maintained by Stephen J. Gowdy linux.usb.idsgmail.com # # If you have any new entries, please submit them via # # http://www.linux-usb.org/usb-ids.html6. 系统集成与应用实例6.1 在Python中解析usb.idsdef get_usb_info(vid, pidNone): with open(/usr/share/misc/usb.ids, r, encodingiso-8859-1) as f: current_vid None for line in f: line line.strip() if not line or line.startswith(#): continue if not line.startswith(\t): # VID行 parts line.split(maxsplit1) if len(parts) 2 and parts[0].lower() vid.lower(): current_vid parts[1] if pid is None: return current_vid elif current_vid and pid: # PID行 parts line.strip().split(maxsplit1) if len(parts) 2 and parts[0].lower() pid.lower(): return f{current_vid} - {parts[1]} return None6.2 与udev规则结合创建自定义udev规则自动识别特定设备# /etc/udev/rules.d/99-usb-custom.rules ACTIONadd, SUBSYSTEMusb, ENV{ID_VENDOR_ID}1234, ENV{ID_MODEL_ID}5678, SYMLINKmy_device6.3 嵌入式系统中的应用考虑在资源受限的嵌入式系统中可以只保留需要的VID/PID条目减小文件大小将文件放入只读文件系统节省空间使用压缩版本如usb.ids.gz节省存储# 创建精简版usb.ids grep -e ^1234 -e ^abcd /usr/share/misc/usb.ids minimal.usb.ids7. 性能优化与高级技巧对于频繁查询的应用场景可以考虑以下优化方案7.1 数据库转换将文本文件转换为SQLite数据库提高查询效率#!/bin/bash INPUT/usr/share/misc/usb.ids OUTPUT/var/lib/usb_ids.db # 创建SQLite数据库 sqlite3 $OUTPUT EOF CREATE TABLE vendors (vid TEXT PRIMARY KEY, name TEXT); CREATE TABLE products (vid TEXT, pid TEXT, name TEXT, PRIMARY KEY (vid, pid)); BEGIN; EOF # 解析并导入数据 awk -v DB$OUTPUT /^#/ {next} /^[^\t]/ NF2 { vid $1 name substr($0, index($0,$2)) print INSERT INTO vendors VALUES (\ vid \, \ name \); DB } /^\t/ NF2 { pid $1 name substr($0, index($0,$2)) print INSERT INTO products VALUES (\ vid \, \ pid \, \ name \); DB } $INPUT # 提交事务并创建索引 sqlite3 $OUTPUT EOF COMMIT; CREATE INDEX idx_products_vid ON products (vid); CREATE INDEX idx_products_pid ON products (pid); EOF7.2 内存缓存方案对于需要极低延迟的应用可以将数据加载到内存中import sqlite3 from collections import defaultdict class USBCache: def __init__(self, db_path/var/lib/usb_ids.db): self.conn sqlite3.connect(db_path) self.vendor_cache {} self.product_cache defaultdict(dict) self._load_data() def _load_data(self): # 加载厂商数据 for vid, name in self.conn.execute(SELECT vid, name FROM vendors): self.vendor_cache[vid.lower()] name # 加载产品数据 for vid, pid, name in self.conn.execute(SELECT vid, pid, name FROM products): self.product_cache[vid.lower()][pid.lower()] name def get_vendor(self, vid): return self.vendor_cache.get(vid.lower()) def get_product(self, vid, pid): return self.product_cache.get(vid.lower(), {}).get(pid.lower())7.3 与系统监控工具集成结合lsusb和usb.ids创建增强型监控脚本#!/bin/bash # 增强版lsusb显示完整厂商和设备信息 lsusb | while read -r line; do bus$(echo $line | awk {print $2}) dev$(echo $line | awk {print $4} | tr -d :) vid_pid$(echo $line | awk {print $6}) vid${vid_pid%:*} pid${vid_pid#*:} vendor$(./usbquery $vid) product$(./usbquery $vid $pid) printf Bus %s Device %s: ID %s %s\n $bus $dev $vid_pid $product done

相关文章:

Linux系统用户的专属福利:除了lsusb,如何利用usb.ids文件离线查询所有USB设备VID/PID信息?

Linux系统深度实践:离线高效查询USB设备VID/PID的完整指南 当你身处没有网络连接的机房,或是调试嵌入式设备时,突然需要确认一个USB设备的厂商信息,该怎么办?对于Linux系统用户来说,答案就藏在系统深处的一…...

保姆级教程:在Ubuntu22.04上5分钟跑通YOLOv8的5大任务(目标检测/分割/分类/姿态估计/跟踪)

5分钟玩转YOLOv8:Ubuntu22.04下的全任务实战指南 在计算机视觉领域,YOLOv8以其惊人的速度和精度重新定义了实时目标检测的标准。但对于刚接触这个强大工具的新手来说,如何快速验证其多任务能力往往成为第一道门槛。本文将带你用最简洁的命令行…...

别再手动翻文件夹了!用VBA的Dir函数一键获取所有文件清单(Excel/Word通用)

用VBA的Dir函数实现高效文件管理:从基础到实战 引言 每个月末,财务部门的李华都要面对一项繁琐的任务——收集分散在各个子文件夹中的报表文件。过去她需要逐个打开文件夹,手动复制文件名和路径到Excel中,这项工作往往要花费大半天…...

5个真实场景:KeymouseGo如何帮你告别重复性电脑操作

5个真实场景:KeymouseGo如何帮你告别重复性电脑操作 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 你是否厌倦…...

Umi-OCR:如何通过开源OCR工具实现高效批量文字识别与自动化处理?

Umi-OCR:如何通过开源OCR工具实现高效批量文字识别与自动化处理? 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生…...

终极指南:5分钟为Jellyfin打造专业中文动漫库的完整方案

终极指南:5分钟为Jellyfin打造专业中文动漫库的完整方案 【免费下载链接】jellyfin-plugin-bangumi bgm.tv plugin for jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-bangumi 还在为Jellyfin动漫库信息不全而烦恼吗?Je…...

Docker 27沙箱隔离增强:金融级容器上线前必做的7项合规审计项(等保2.0+GDPR双标覆盖)

更多请点击: https://intelliparadigm.com 第一章:Docker 27沙箱隔离增强的合规性演进与金融场景适配 Docker 27 引入了基于 Linux user_namespaces、seccomp-bpf v2 和 eBPF-based cgroup v2 策略引擎的深度沙箱强化机制,显著提升容器运行时…...

为什么你需要novel-downloader:打造个人数字图书馆的终极解决方案

为什么你需要novel-downloader:打造个人数字图书馆的终极解决方案 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否曾经遇到过这样的情况?深夜追更的小说…...

为 Hermes Agent 配置 Taotoken 作为自定义模型提供商

为 Hermes Agent 配置 Taotoken 作为自定义模型提供商 1. 准备工作 在开始配置前,请确保已安装 Hermes Agent 并获取有效的 Taotoken API Key。登录 Taotoken 控制台,在「API 密钥」页面创建新密钥或使用现有密钥。同时,在「模型广场」页面…...

从游戏数据到数字记忆:YaeAchievement如何重构你的原神成就体验

从游戏数据到数字记忆:YaeAchievement如何重构你的原神成就体验 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 想象一下,你在提瓦特大陆冒险了数百小时&#xff0c…...

揭秘低查重AI教材编写方法,借助工具轻松搞定教材创作

许多教材创作者常常感到遗憾:即使经过细致打磨的教材内容,因缺少必要的配套资源,整体的教学效果仍然受限。课后的练习题需要有梯度的设计,但往往缺乏新颖的创意;教学课件希望能更加直观,却因缺乏技术能力难…...

Vin象棋:当深度学习遇见千年棋道,智能连线如何重塑中国象棋体验

Vin象棋:当深度学习遇见千年棋道,智能连线如何重塑中国象棋体验 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 想象一下&#xff…...

如何用3800+专业术语翻译解决团队协作中的设计语言障碍?

如何用3800专业术语翻译解决团队协作中的设计语言障碍? 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 在全球化设计协作的时代,技术团队面临的不仅是代码层面的…...

ROSA:基于大语言模型的ROS自然语言交互智能体实践指南

1. 项目概述:当大语言模型遇见机器人操作系统 如果你是一名机器人开发者,或者正在学习ROS(机器人操作系统),那么下面这个场景你一定不陌生:为了搞清楚当前系统里有哪些话题(Topic)在…...

CodeCombat终极指南:在游戏冒险中掌握编程核心技能

CodeCombat终极指南:在游戏冒险中掌握编程核心技能 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 你是否曾想过,学习编程可以像玩游戏一样有趣?想象一下&…...

真心劝大家转行AI产品经理,这么赚钱,年薪80W!! 2026年转行/秋招必看!AI产品经理高薪风口岗位

近期有很多社招的小伙伴都在看转行的机会,同时马上要到了秋招的季节,校招生们都在积极选择第一份工作。所有人想要进入一个有前景、高薪高潜力的黄金赛道。 2026年如果大家看新机会,重点给大家推荐AI领域的岗位。先看一组数据: …...

初创公司如何借助 Taotoken 统一 API 快速原型验证多个大模型能力

初创公司如何借助 Taotoken 统一 API 快速原型验证多个大模型能力 1. 统一接入降低技术门槛 对于资源有限的初创团队而言,直接对接多个大模型厂商的 API 存在显著的技术与管理成本。不同厂商的接口规范、认证方式和返回格式各异,团队需要为每个供应商编…...

你的相关性分析结果可靠吗?深入浅出聊聊Pearson检验的三大前提与常见误区

你的相关性分析结果可靠吗&#xff1f;深入浅出聊聊Pearson检验的三大前提与常见误区 在数据分析领域&#xff0c;Pearson相关系数无疑是最常用的统计指标之一。从科研论文到商业报告&#xff0c;我们经常看到类似"变量A与变量B显著相关(r0.65,p<0.01)"的结论。但…...

从零到一:Jenkins Pipeline实战,手把手教你搭建企业级CICD流水线(含完整脚本)

从零到一&#xff1a;Jenkins Pipeline实战&#xff0c;手把手教你搭建企业级CICD流水线&#xff08;含完整脚本&#xff09; 当团队规模扩张到10人以上时&#xff0c;每天手动部署5次以上的频率会让技术负责人开始思考&#xff1a;如何让代码从提交到上线的时间从2小时缩短到1…...

别再为PTPX功耗分析发愁了!手把手教你用Verdi把FSDB转成通用VCD波形

芯片功耗分析实战&#xff1a;Verdi高效转换FSDB至VCD全攻略 在芯片设计流程中&#xff0c;功耗分析是确保产品竞争力的关键环节。想象一下这样的场景&#xff1a;当你熬夜完成设计仿真&#xff0c;准备用PrimeTime PX进行功耗验证时&#xff0c;工具却弹出版本不兼容的报错——…...

别再被手册坑了!实测IL3895墨水屏驱动芯片的8种扫描模式(附效果图与代码)

IL3895墨水屏驱动芯片的8种扫描模式实战解析 墨水屏作为一种低功耗显示技术&#xff0c;在嵌入式设备中应用广泛。然而&#xff0c;许多开发者在实际驱动IL3895芯片时&#xff0c;常常遇到显示方向异常、起始位置不符预期等问题。本文将深入剖析IL3895的8种扫描模式&#xff0c…...

RV1126开发板实战:从零搞定LVGL图形库移植(附完整配置与常见问题排查)

RV1126开发板实战&#xff1a;从零搞定LVGL图形库移植&#xff08;附完整配置与常见问题排查&#xff09; 在嵌入式开发领域&#xff0c;图形用户界面(GUI)的实现一直是开发者面临的挑战之一。LVGL作为一款轻量级、高性能的嵌入式图形库&#xff0c;凭借其丰富的控件和跨平台特…...

Echo:AI应用开发者如何零成本实现用户付费API调用

1. 项目概述&#xff1a;Echo&#xff0c;一个让用户为AI使用付费的开发者工具 如果你正在或者打算开发一个AI应用&#xff0c;那么有一个问题你肯定绕不开&#xff1a; 谁来为API调用买单&#xff1f; 这个问题看似简单&#xff0c;却直接关系到你的应用能否持续运营、用户…...

科罗拉多州撤销维修保护法案未通过,多方倡导助力维修权保障

颇具争议法案&#xff1a;撤销维修保护措施的尝试 科罗拉多州一项颇具争议的法案未能通过&#xff0c;该法案原本旨在撤销该州的一些维修保护措施。这项法案一直是维修权倡导者的针对目标&#xff0c;他们将其视为科技公司试图在美国更广泛地推翻维修立法的一个风向标。 2024年…...

稳定的淘宝商品详情API应该返回哪些基本数据字段?

item_get_pro-获得淘宝商品详情高级版 taobao.item_get_pro公共参数名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,…...

C++(标签派发 Tag Dispatching)

一、什么是标签派发&#xff1f;&#x1f3af; 核心概念标签派发&#xff08;Tag Dispatching&#xff09; 是C中一种编译期多态技术&#xff0c;它利用空结构体标签和函数重载&#xff0c;在编译时根据类型特征选择最优的实现路径。&#x1f4ca; 为什么需要标签派发&#xff…...

Ramp的Sheets AI现数据泄露漏洞,PromptArmor披露后问题已解决

解决方案包括行业、[合作伙伴](../partner-program)、资源、[预约演示](../enterprise-demo)。威胁情报涵盖[Ramp的Sheets AI泄露财务数据](./ramps-sheets-ai-exfiltrates-financials)、[Snowflake Cortex AI突破沙盒并执行恶意软件](./snowflake-ai-escapes-sandbox-and-exec…...

Illustrator脚本自动化:高效智能设计工作流优化最佳实践

Illustrator脚本自动化&#xff1a;高效智能设计工作流优化最佳实践 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在当今数字设计领域&#xff0c;Adobe Illustrator作为矢量图形…...

网络防御基准:安全运营中LLM的智能体威胁狩猎评估

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01;摘要。我们提出了网络防御基准&#xff08;Cyber Defense Benchmark&#xff09;&#xff0c;这是一个衡量大语言模型&#xff08;LLM&#xff09;智能体在执行安全运营中心&#xff08;SOC&#xff09;分…...

基于STM32L4XX 、HAL库的SBD63006MUV-E2三相无刷直流电机(BLDC)驱动应用C语言程序设计

一、简介: SBD63006MUV-E2是一款高度集成的三相无刷电机驱动 器,额定电源电压33V,额定输出电流1.5A。使用外 部霍尔传感器换向,通过输入PWM控制信号产生 PWM驱动信号。电源可以使用12V或24V,内部集成 各种控制和保护功能,使其适用于各种用途。由于采 用了小型封装,因此可…...