我有一个 USB 记忆棒,我想从中读取序列号。如果我调用该命令,
lsusb -v
该行的输出iSerial
如下:
iSerial 3
如果我去/proc/scsi/usb-storage
查看该文件,我会得到以下输出:
Host scsi10: usb-storage
Vendor: USB
Product: Disk 2.0
Serial Number: 92071573E1272519149
Protocol: Transparent SCSI
Transport: Bulk
Quirks:
为什么一方面该命令没有串行输出lsusb
,但另一方面我从/proc/scsi/usb-storage
.这两种收集序列的方法有什么区别?
答案1
lsusb
可能会尝试将 USB 设备打开为O_RDWR
(读/写模式),并且您的用户可能无权执行此操作(如果是这样,输出之间应该出现一些错误消息“无法打开设备,某些信息将丢失”)。以 root 身份启动lsusb
还应该能够输出整个 iSerial 值。
答案2
一般来说,有许多不同的 USB 设备(键盘、鼠标、网络摄像头……)。lsusb
处理 USB 协议级别的连接设备。
某些 USB 设备是存储设备(USB 记忆棒、USB 硬盘...)。他们了解 USB 协议之上的不同协议(或多或少的 SCSI)。在此协议中,USB 存储设备具有序列号(ATA 设备也是如此)。这就是您在 中看到的/proc/scsi/usb-storage
。
iSerial
你看到的数字与lsusb
此无关。
这就是为什么您可以使用一种方法看到您感兴趣的序列号,但使用另一种方法却看不到。这就是为什么你不能用来lsusb
获取你感兴趣的序列号
答案3
您可以使用lsusb
verbose 标志,但您需要确保使用sudo
它,否则序列将不正确。
sudo lsusb -v
如果这太冗长,请运行lsusb
以获取设备 ID:
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 012: ID 1ab1:0e11 Rigol Technologies
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
然后lsusb
使用-s
flag 运行以仅显示指定的设备并 grep 获取序列号。
那么对于Rigol设备的序列号:
$ sudo lsusb -s 012 -v|grep -i iserial
iSerial 3 DP8C221100000
有关lsusb
使用该--help
标志的更多信息:
$ lsusb --help
Usage: lsusb [options]...
List USB devices
-v, --verbose
Increase verbosity (show descriptors)
-s [[bus]:][devnum]
Show only devices with specified device and/or
bus numbers (in decimal)
-d vendor:[product]
Show only devices with the specified vendor and
product ID numbers (in hexadecimal)
-D device
Selects which device lsusb will examine
-t, --tree
Dump the physical USB device hierarchy as a tree
-V, --version
Show version of program
-h, --help
Show usage and help