接続されているUSBディスクのデバイス名を取得する

接続されているUSBディスクのデバイス名を取得する

接続されているすべての USB ディスクのデバイス名を取得する必要があります (つまりsdd)。

3 つの USB ディスクと 2 つの SATA ディスクが接続されています。

$ find /sys/devices/ -name block        
/sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block

SATA ディスクを無視したいのですが、すべての USB ディスクをリストする必要があります。

ターミナルで、次のように入力するlsと、次のメッセージが表示されますsdd

$ ls /sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
sdd

しかし、これをスクリプトで使用する必要があります。すべての USB ディスクを反復処理する必要があり、正確なパスが事前にわからないため、ワイルドカード (*または?) を使用する必要があります。

for DISK in $(ls /sys/devices/pci0000:00/0000:00:14.0/usb?/*/*:1.0/host?/target?:0:0/?:0:0:0/block) ; do
echo /dev/$DISK
done

上記は、1 つの USB ディスクが接続されている場合にのみ機能します。2 つ以上のディスクが接続されている場合は、不要なパスも取得されますsdd/sysつまり、次のようになります。

/dev//sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block:
/dev/sdd
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block:
/dev/sde
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block:
/dev/sdc

のみを反復処理するにはどうすればよいですかsdd sde sdc?

udevインフラストラクチャを使わないソリューションを探しています。/dev/disk/by-path/

答え1

コマンドで実行できますlsblk

lsblk -l -o name,tran与える

NAME TRAN
sda  sata
sda1 
sdb  usb
sdc  usb
sr0  sata

-lは「リスト」形式を表すので、解析が簡単になります。そうでない場合は、次のようなツリー形式になります。

NAME   TRAN
sda    sata
└─sda1
sdb    usb
sr0    sata

他のフラグを指定すると、FSTYPE、LABEL、UUID、MOUNTPOINT などの詳細情報が表示されます。実行するとlsblk --helpすべてのオプションが表示されます。

--paths --noheadings --scsiフラグを使用して、次のように出力を印刷することができます。

sata   /dev/sda
usb    /dev/sdb
usb    /dev/sdc
sata   /dev/sr0

次に、grep入力に対して、行の先頭に usb がある行をフィルタリングします。

答え2

を実行するlsusbと、USB バス経由で接続されているデバイスの名前が表示されます。

例えば:

$ lsusb
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0421:0802 Nokia Mobile Phones CA-42 Phone Parent
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

参照男のlsusb

説明

lsusb は、システム内の USB バスとそれに接続されているデバイスに関する情報を表示するためのユーティリティです。

関連情報