USB设备连接后系统是否成功识别?无需急于更换线缆或重启设备,借助lsusb指令可快速获知内核识别状态,其响应速度甚至优于通过dmesg | grep usb查阅日志,能更精准定位具体硬件。
设备没被识别?先别急着换线或重启,lsusb 能立刻告诉你系统“看没看见”——而且比 dmesg | grep 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”。usbutils,直接运行 lsusb 会报错 command not found,需先执行 yum install usbutils。利用 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)或设备是否需要专有固件。依靠肉眼逐一扫描列表效率较低,建议使用 -d 或 -s 进行直接过滤。厂商ID与产品ID(例如 0951:1665)可从 lsusb 的首行内容直接获取,无需查阅文档。
lsusb -d 0951:1665,匹配成功仅输出一行;失败则无输出(返回值显示为1)。lsusb -s 002:(注意冒号不可省略)。lsusb -s 001:003,此组合可用于后续 lsusb -D 获取原始描述符。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与UAS差异)或内核模块(uas模块未启用)。lsusb仅能反映设备是否已连接,无法判断其是否可用。