先执行不带参数的lsusb确认设备是否被内核枚举识别,有Bus X Device Y行即表示已识别;若无新行但dmesg显示“new USB device”,说明通信成功但ID未收录;用lsusb -t查物理连接与真实速率,Driver=xxx表明驱动已绑定,Driver=(none)则需检查模块加载。

设备没被识别?先别急着换线或重启,lsusb 能立刻告诉你系统“看没看见”——而且比 dmesg | grep usb 更快定位到具体设备。
怎么一眼确认USB设备是否被内核识别
最简操作就是执行不带参数的 lsusb。它输出的是内核已枚举完成、分配了总线号和设备号的设备快照,不是“插上就立刻出现”,而是“枚举完成才显示”。如果刚插上没反应,等 2–3 秒再跑一次。
- 输出里有类似
Bus 001 Device 005: ID 0951:1665 Kingston Technology Digital DataTraveler SE9 64GB这样的行,说明设备已被识别,ID 和描述都对得上 - 如果完全没新行,但
dmesg | tail -10显示usb 1-1: new high-speed USB device,说明硬件通信成功,但厂商/产品ID未被/usr/share/hwdata/usb.ids收录,此时描述会是空或显示为 “Unknown” - CentOS/RHEL 7 默认不装
usbutils,直接运行lsusb会报command not found,需先yum install usbutils
怎么查清设备插在哪个物理口、走的是USB几.0
用 lsusb -t 看树状结构,这才是判断物理连接和速率的关键。每条分支末尾的 12M、480M、5000M 是真实协商速率,不是标称规格。
-
12M:对应 USB 1.1,常见于老键盘、鼠标;若新设备只跑出 12M,大概率是插在了 USB 1.1 Hub 下游或接触不良 -
480M:USB 2.0,多数 U 盘、摄像头在此档位;如果设备标称 USB 3.0 却只显示 480M,检查是否插进了蓝色接口(USB 3.0)还是黑色接口(常为 USB 2.0) -
5000M:USB 3.0(即 USB 3.1 Gen1),注意不是所有标“USB 3.0”的线缆都支持全速,劣质线可能降速到 480M - 树中
Driver=usb-storage或Driver=usbhid表示驱动已绑定;若显示Driver=(none),说明没有匹配的内核驱动,需查模块是否加载(如modprobe uas)或设备是否需要专有固件
怎么快速定位某个特定U盘或摄像头
靠肉眼扫列表太慢,用 -d 或 -s 直接过滤。厂商ID和产品ID(如 0951:1665)可以从 lsusb 首行直接抄,不需要查文档。
- 查 Kingston U 盘:
lsusb -d 0951:1665,匹配成功就只输出一行,失败则无输出(返回值为 1) - 查总线 002 上的所有设备:
lsusb -s 002:(注意冒号不能省) - 查总线 001 设备 003:
lsusb -s 001:003,这个组合可用于后续lsusb -D抓原始描述符 - 多个设备 ID 同时查?
lsusb不支持 OR 逻辑,只能写脚本循环或用grep -E,例如:lsusb | grep -E '0951:1665|046d:c52b'
为什么 lsusb -v 有时卡住或权限拒绝
lsusb -v 尝试读取设备全部描述符,包括配置、接口、端点等,但某些设备(尤其是带安全芯片或自定义固件的)会拒绝非特权访问,或响应超时导致卡顿。
- 权限问题:普通用户运行
lsusb -v可能部分字段为空或报错libusb:error [udev_hotplug_event] ignoring udev event for unknown device;加sudo一般可解决,但不是必须——日常排查只需基础信息 - 卡在某设备:用
lsusb -v 2>&1 | head -n 50截断查看前 50 行,确认是否卡在某个设备上;若确定是某设备导致,可用-s跳过它再试 - 真正需要详细描述符时(比如调试驱动兼容性),优先用
lsusb -D /dev/bus/usb/BBB/DDD(BBB=总线号,DDD=设备号),它绕过 libusb 层直读设备文件,更稳定,但必须 root 权限
真正容易被忽略的是:设备插入后,lsusb 显示正常 ≠ 设备功能正常。比如 U 盘显示 Mass Storage,但 fdisk -l 看不到分区,问题可能出在存储协议(BOT vs UAS)或内核模块(uas 模块未启用)。lsusb 只管“连上了没”,不管“能不能用”。


















