lsusb 是Linux系统中用于显示USB设备信息的命令。它列出系统中所有USB总线、USB控制器以及连接到这些总线的USB设备。通过lsusb,用户可以查看USB设备的厂商ID、产品ID、设备类别、接口信息等,对于USB设备识别、驱动安装和故障排查非常有帮助。
lsusb [选项]
| 选项 | 说明 |
|---|---|
-v, --verbose |
显示详细信息(包括设备描述符、配置描述符等) |
-t, --tree |
以树状图显示USB设备层次结构 |
-s [[bus]:][devnum] |
只显示指定总线编号和/或设备编号的设备 |
-d [vendor]:[product] |
只显示指定厂商ID和产品ID的设备 |
-D 设备文件 |
直接从设备文件读取信息,不扫描/dev/bus/usb |
--device=/dev/bus/usb/BBB/DDD |
显示指定USB设备的详细信息 |
-V, --version |
显示版本信息 |
-h, --help |
显示帮助信息 |
-i 文件 |
使用指定的USB ID数据库文件 |
-p 路径 |
从指定路径读取USB设备信息 |
-P 协议 |
指定USB协议(usbfs或sysfs) |
-u |
显示USB设备的通用接口 |
-c |
显示配置信息 |
-x |
以十六进制显示设备描述符 |
USB设备地址由总线编号和设备编号组成:
总线编号:设备编号
例如:001:003 表示:
- 总线编号: 001
- 设备编号: 003
| 字段 | 说明 | 示例 |
|---|---|---|
| Bus | USB总线编号 | 001 |
| Device | 设备在该总线上的编号 | 003 |
| ID | 厂商ID:产品ID | 8087:0029 |
| Vendor | 厂商ID(十六进制) | 8087 |
| Product | 产品ID(十六进制) | 0029 |
| Class | 设备类别 | Hub(集线器) |
| SubClass | 设备子类 | 00 |
| Protocol | 设备协议 | 01 |
| MaxPower | 最大功率(毫安) | 100mA |
| Speed | 设备速度 | 480M(USB 2.0) |
| Manufacturer | 制造商名称 | Intel Corp. |
| Product | 产品名称 | Integrated Rate Matching Hub |
| SerialNumber | 序列号 | 0000:00:1a.0 |
显示系统中所有USB设备的基本信息:
# 显示所有USB设备
lsusb
# 示例输出:
# Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
# Bus 001 Device 004: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
# Bus 001 Device 003: ID 0bda:818b Realtek Semiconductor Corp. RTL8192EU 802.11b/g/n WLAN Adapter
# Bus 001 Device 002: ID 8087:0029 Intel Corp. Integrated Rate Matching Hub
# Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
显示USB设备的详细信息:
# 显示所有USB设备的详细信息
lsusb -v
# 显示特定设备的详细信息
lsusb -s 001:003 -v
# 显示特定厂商设备的详细信息
lsusb -d 0bda: -v
# 示例输出(部分):
# Bus 001 Device 003: ID 0bda:818b Realtek Semiconductor Corp. RTL8192EU 802.11b/g/n WLAN Adapter
# Device Descriptor:
# bLength 18
# bDescriptorType 1
# bcdUSB 2.10
# bDeviceClass 239 Miscellaneous Device
# bDeviceSubClass 2 ?
# bDeviceProtocol 1 Interface Association
# bMaxPacketSize0 64
# idVendor 0x0bda Realtek Semiconductor Corp.
# idProduct 0x818b RTL8192EU 802.11b/g/n WLAN Adapter
# bcdDevice 2.00
# iManufacturer 1 Realtek
# iProduct 2 802.11n WLAN Adapter
# iSerial 3 00e04c000001
# bNumConfigurations 1
# Configuration Descriptor:
# bLength 9
# bDescriptorType 2
# wTotalLength 125
# bNumInterfaces 2
# bConfigurationValue 1
# iConfiguration 0
# bmAttributes 0x80
# (Bus Powered)
# MaxPower 500mA
以树状图显示USB设备层次结构:
# 以树状图显示USB设备
lsusb -t
# 示例输出:
# /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
# |__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
# /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/10p, 480M
# |__ Port 3: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
# |__ Port 1: Dev 3, If 0, Class=Wireless, Driver=rtl8192eu, 480M
# |__ Port 2: Dev 4, If 0, Class=Mass Storage, Driver=usb-storage, 480M
按总线、设备编号或ID筛选显示:
# 显示特定总线上的所有设备
lsusb -s 001
# 显示特定设备(总线001,设备003)
lsusb -s 001:003
# 显示特定厂商的所有设备
lsusb -d 0bda:
# 显示特定厂商和产品的设备
lsusb -d 0bda:818b
# 显示特定设备类别的设备
lsusb | grep -i "mass storage"
lsusb | grep -i "hub"
lsusb | grep -i "wireless"
lsusb | grep -i "keyboard"
lsusb | grep -i "mouse"
lsusb | grep -i "camera"
lsusb | grep -i "audio"
以十六进制显示USB设备描述符:
# 显示设备描述符(十六进制格式)
lsusb -x
# 显示特定设备的描述符
lsusb -s 001:003 -x
# 示例输出:
# Bus 001 Device 003: ID 0bda:818b Realtek Semiconductor Corp. RTL8192EU 802.11b/g/n WLAN Adapter
# Device Descriptor:
# bLength 18
# bDescriptorType 1
# bcdUSB 0201
# bDeviceClass 00
# bDeviceSubClass 00
# bDeviceProtocol 00
# bMaxPacketSize0 40
# idVendor 0bda
# idProduct 818b
# bcdDevice 0200
# iManufacturer 01
# iProduct 02
# iSerialNumber 03
# bNumConfigurations 01
显示USB设备的配置和接口信息:
# 显示配置信息
lsusb -c
# 显示通用接口信息
lsusb -u
# 显示特定设备的接口信息
lsusb -s 001:003 -u
# 组合多个选项
lsusb -v -t # 详细信息和树状图结合
lsusb -v -x # 详细信息和十六进制描述符结合
使用watch命令监控USB设备的变化:
# 每2秒刷新一次USB设备列表
watch -n 2 lsusb
# 监控并高亮显示变化
watch -n 1 -d lsusb
# 监控特定设备的详细信息
watch -n 1 "lsusb -s 001:003 -v | head -30"
# 结合journalctl监控USB事件
journalctl -f | grep -i usb
# 监控USB内核消息
sudo dmesg -w | grep -i usb
在脚本中提取和处理USB设备信息:
#!/bin/bash
# 脚本1:检测连接的USB设备
echo "=== USB设备检测报告 ==="
echo "检测时间: $(date)"
echo ""
# 统计USB设备数量
TOTAL_DEVICES=$(lsusb | wc -l)
echo "1. USB设备总数: $TOTAL_DEVICES"
# 统计不同类型的设备
echo ""
echo "2. 按设备类型分类:"
HUB_COUNT=$(lsusb | grep -i "hub" | wc -l)
STORAGE_COUNT=$(lsusb | grep -i "mass storage" | wc -l)
WIFI_COUNT=$(lsusb | grep -i "wireless\|wlan\|802.11" | wc -l)
echo " USB集线器: $HUB_COUNT"
echo " 存储设备: $STORAGE_COUNT"
echo " 无线网卡: $WIFI_COUNT"
# 列出所有存储设备
echo ""
echo "3. USB存储设备列表:"
lsusb | grep -i "mass storage" | while read line; do
BUS_DEV=$(echo $line | awk '{print $2":"$4}' | tr -d ':')
echo " $line"
# 获取设备文件路径
DEV_PATH="/dev/bus/usb/${BUS_DEV%:*}/${BUS_DEV#*:}"
if [ -e "$DEV_PATH" ]; then
echo " 设备文件: $DEV_PATH"
fi
done
# 脚本2:检查特定设备是否存在
check_usb_device() {
local vendor=$1
local product=$2
if lsusb -d ${vendor}:${product} > /dev/null 2>&1; then
echo "USB设备 ${vendor}:${product} 已连接"
return 0
else
echo "USB设备 ${vendor}:${product} 未连接"
return 1
fi
}
# 检查特定的USB设备
echo ""
echo "4. 特定设备检查:"
check_usb_device "0bda" "818b" # RTL8192EU无线网卡
check_usb_device "0781" "5583" # SanDisk U盘
check_usb_device "046d" "c52b" # Logitech无线接收器
# 脚本3:获取USB设备详细信息
get_usb_device_info() {
local bus=$1
local dev=$2
echo "设备信息:"
echo "========="
lsusb -s ${bus}:${dev} -v | grep -E "(idVendor|idProduct|iManufacturer|iProduct|iSerial|bMaxPower|bcdUSB|bDeviceClass)" | head -20
}
# 使用示例
# get_usb_device_info 001 003
| 类别代码 | 类别名称 | 说明 |
|---|---|---|
00 |
Device | 设备(在接口级别定义) |
01 |
Audio | 音频设备(耳机、麦克风等) |
02 |
Communications and CDC Control | 通信设备(调制解调器等) |
03 |
HID (Human Interface Device) | 人机接口设备(键盘、鼠标、游戏手柄等) |
05 |
Physical | 物理设备(力反馈设备等) |
06 |
Image | 图像设备(摄像头、扫描仪等) |
07 |
Printer | 打印机 |
08 |
Mass Storage | 大容量存储设备(U盘、移动硬盘等) |
09 |
Hub | USB集线器 |
0a |
CDC Data | CDC数据设备 |
0b |
Smart Card | 智能卡读卡器 |
0d |
Content Security | 内容安全设备 |
0e |
Video | 视频设备(网络摄像头等) |
0f |
Personal Healthcare | 个人医疗设备 |
10 |
Audio/Video Devices | 音视频设备 |
e0 |
Wireless Controller | 无线控制器(蓝牙、Wi-Fi等) |
ef |
Miscellaneous | 杂项设备 |
fe |
Application Specific | 特定应用设备 |
ff |
Vendor Specific | 厂商特定设备 |
| 厂商ID | 厂商名称 | 常见产品 |
|---|---|---|
1d6b |
Linux Foundation | USB根集线器 |
8087 |
Intel Corp. | USB控制器、集线器 |
0bda |
Realtek Semiconductor | 无线网卡、读卡器、声卡 |
046d |
Logitech, Inc. | 鼠标、键盘、摄像头 |
045e |
Microsoft Corp. | 鼠标、键盘、游戏手柄 |
0781 |
SanDisk Corp. | U盘、存储卡 |
0951 |
Kingston Technology | U盘、存储设备 |
04e8 |
Samsung Electronics | 手机、存储设备 |
0483 |
STMicroelectronics | 开发板、调试器 |
0cf3 |
Atheros Communications | 无线网卡、蓝牙适配器 |
04f2 |
Chicony Electronics | 摄像头、键盘 |
05ac |
Apple, Inc. | iPhone、iPad、键盘、鼠标 |
0489 |
Foxconn / Hon Hai | 无线网卡、蓝牙设备 |
0b05 |
ASUSTek Computer | 无线网卡、主板设备 |
04ca |
Lite-On Technology | 摄像头、读卡器 |
#!/bin/bash
# 脚本1:USB设备自动挂载检测
USB_MONITOR_SCRIPT="/tmp/usb_monitor.sh"
cat > $USB_MONITOR_SCRIPT << 'EOF'
#!/bin/bash
# USB设备监控脚本
PREV_COUNT=$(lsusb | wc -l)
echo "开始监控USB设备连接/断开..."
echo "初始USB设备数量: $PREV_COUNT"
while true; do
CURRENT_COUNT=$(lsusb | wc -l)
if [ $CURRENT_COUNT -gt $PREV_COUNT ]; then
echo "$(date): 新USB设备已连接"
echo "新设备信息:"
lsusb | tail -$((CURRENT_COUNT - PREV_COUNT))
# 这里可以添加挂载逻辑
# for device in $(ls /dev/sd* 2>/dev/null | grep -E 'sd[a-z][0-9]*$'); do
# mount_point="/mnt/$(basename $device)"
# mkdir -p $mount_point
# mount $device $mount_point 2>/dev/null && echo "已挂载 $device 到 $mount_point"
# done
elif [ $CURRENT_COUNT -lt $PREV_COUNT ]; then
echo "$(date): USB设备已断开"
# 这里可以添加卸载逻辑
fi
PREV_COUNT=$CURRENT_COUNT
sleep 2
done
EOF
chmod +x $USB_MONITOR_SCRIPT
echo "监控脚本已创建: $USB_MONITOR_SCRIPT"
echo "运行: bash $USB_MONITOR_SCRIPT"
# 脚本2:USB设备信息导出
echo ""
echo "USB设备信息导出到CSV:"
OUTPUT_CSV="/tmp/usb_devices_$(date +%Y%m%d_%H%M%S).csv"
echo "Bus,Device,ID,Vendor,Product,Manufacturer,ProductName" > $OUTPUT_CSV
lsusb | while read line; do
BUS=$(echo $line | awk '{print $2}')
DEVICE=$(echo $line | awk '{print $4}' | tr -d ':')
ID=$(echo $line | awk '{print $6}')
VENDOR_ID=$(echo $ID | cut -d: -f1)
PRODUCT_ID=$(echo $ID | cut -d: -f2)
# 获取详细信息的制造商和产品名
DETAILS=$(lsusb -s ${BUS}:${DEVICE} -v 2>/dev/null)
MANUFACTURER=$(echo "$DETAILS" | grep -i "iManufacturer" | head -1 | cut -d: -f2 | sed 's/^[ \t]*//')
PRODUCT_NAME=$(echo "$DETAILS" | grep -i "iProduct" | head -1 | cut -d: -f2 | sed 's/^[ \t]*//')
echo "$BUS,$DEVICE,$ID,$VENDOR_ID,$PRODUCT_ID,\"$MANUFACTURER\",\"$PRODUCT_NAME\"" >> $OUTPUT_CSV
done
echo "USB设备信息已导出到: $OUTPUT_CSV"
# 脚本3:检查USB端口速度
echo ""
echo "USB端口速度检查:"
lsusb -t | grep -E "Port [0-9]+:" | while read line; do
PORT=$(echo $line | grep -o "Port [0-9]\+:" | head -1)
SPEED=$(echo $line | grep -o "[0-9]\+M")
CLASS=$(echo $line | grep -o "Class=[^,]*" | cut -d= -f2)
DRIVER=$(echo $line | grep -o "Driver=[^,]*" | cut -d= -f2)
echo "$PORT | 速度: $SPEED | 类别: $CLASS | 驱动: $DRIVER"
done
| USB版本 | 最大速度 | 发布日期 | 颜色代码 |
|---|---|---|---|
| USB 1.0 | 1.5 Mbps (低速) | 1996年1月 | 白色 |
| USB 1.1 | 12 Mbps (全速) | 1998年9月 | 白色 |
| USB 2.0 | 480 Mbps (高速) | 2000年4月 | 黑色 |
| USB 3.0 (USB 3.1 Gen1) | 5 Gbps (超速) | 2008年11月 | 蓝色 |
| USB 3.1 (USB 3.1 Gen2) | 10 Gbps | 2013年7月 | 蓝绿色 |
| USB 3.2 | 20 Gbps | 2017年9月 | 红色 |
| USB4 | 40 Gbps | 2019年8月 | 未指定 |
/usr/share/misc/usb.ids数据库文件来解析厂商和设备名称sudo update-usbidslsblk命令查看块设备信息# 1. lsusb命令不存在
# 检查是否安装
which lsusb
# 安装(如果需要)
# Ubuntu/Debian: sudo apt-get install usbutils
# RHEL/CentOS: sudo yum install usbutils
# 2. USB设备未被识别
# 检查内核消息
dmesg | grep -i usb
sudo dmesg -w
# 重新加载USB驱动
sudo modprobe -r usbhid
sudo modprobe usbhid
# 重新扫描USB总线
sudo sh -c 'echo 1 > /sys/bus/usb/devices/usb1/rescan'
sudo sh -c 'echo 1 > /sys/bus/usb/devices/usb2/rescan'
# 3. 设备权限问题
# 查看USB设备文件权限
ls -la /dev/bus/usb/*/*
# 临时设置权限
sudo chmod 666 /dev/bus/usb/*/*
# 永久解决方案:添加用户到dialout组
sudo usermod -a -G dialout $USER
# 4. 更新USB ID数据库
sudo update-usbids
# 手动下载最新数据库
wget http://www.linux-usb.org/usb.ids
sudo cp usb.ids /usr/share/misc/usb.ids
# 5. 检查USB端口电源管理
# 禁用USB自动挂起
for i in /sys/bus/usb/devices/*/power/control; do
echo on > "$i"
done
# 6. 查看USB内核模块
lsmod | grep -i usb
lsmod | grep -i hid
# 7. 检查USB控制器
lspci | grep -i usb
lspci -v | grep -i xhci\|ehci\|ohci -A 5
# 8. 重置USB设备
# 查找设备路径
lsusb -t
# 卸载设备驱动
sudo sh -c "echo '0bda:818b' > /sys/bus/usb/drivers/usb/unbind"
sudo sh -c "echo '0bda:818b' > /sys/bus/usb/drivers/usb/bind"
# 9. 查看USB设备文件描述符
sudo lsusb -D /dev/bus/usb/001/003
# USB设备描述符字段说明:
# bLength: 描述符长度(18字节)
# bDescriptorType: 描述符类型(1表示设备描述符)
# bcdUSB: USB规范版本号(如0201表示USB 2.1)
# bDeviceClass: 设备类别
# bDeviceSubClass: 设备子类
# bDeviceProtocol: 设备协议
# bMaxPacketSize0: 端点0的最大包大小
# idVendor: 厂商ID
# idProduct: 产品ID
# bcdDevice: 设备版本号
# iManufacturer: 制造商字符串索引
# iProduct: 产品字符串索引
# iSerialNumber: 序列号字符串索引
# bNumConfigurations: 配置数量
# 查看完整的USB描述符树
sudo lsusb -v 2>/dev/null | less
# 查看特定设备的配置描述符
sudo lsusb -s 001:003 -v 2>/dev/null | grep -A 20 "Configuration Descriptor"