
我有一個 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