
シリアル番号を読み取りたい 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
。シリアルを収集する 2 つの方法の違いはどこにあるのでしょうか。
答え1
lsusb
USBデバイスをO_RDWR
(読み取り/書くモード) であり、ユーザーにはこれを行う権限がない可能性があります (その場合、出力の間に「デバイスを開けませんでした。一部の情報が不足しています」というエラー メッセージが表示されます)。root として起動すると、lsusb
iSerial 値全体を出力できるはずです。
答え2
一般的に、さまざまな USB デバイス (キーボード、マウス、Web カメラなど) が存在します。USBlsusb
プロトコル レベルで接続されたデバイスを処理します。
一部の USB デバイスはストレージ デバイス (USB スティック、USB ハードディスクなど) です。これらは、USB プロトコルに加えて、別のプロトコル (多かれ少なかれ SCSI) を理解します。このプロトコルでは、USB ストレージ デバイスにはシリアル番号があります (ATA デバイスも同様)。これは、 に表示されます/proc/scsi/usb-storage
。
iSerial
表示される数字はそれlsusb
とは何の関係もありません。
そのため、一方の方法では興味のあるシリアル番号が表示されますが、もう一方の方法では表示されません。そのため、lsusb
興味のある種類のシリアル番号を取得するために使用することはできません。
答え3
詳細フラグと一緒に使用できますlsusb
が、必ず一緒に使用する必要があります。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
、シリアル番号を 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