Получить имя устройства подключенного 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

Вышеуказанное работает только в том случае, если подключен один USB-диск. Если подключено два или более дисков, я получаю 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

Do 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 в системе и подключенных к ним устройствах.

Связанный контент