接続されているすべての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/
を探しています
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がある行を除外します。
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
参照 man lsusb
説明
lsusbは、システム内のUSBバスとそれに接続されているデバイスに関する情報を表示するためのユーティリティです。