Если это будет частью программы, используемой широкой публикой, имейте в виду, что:
- Может быть несколько устройств с одинаковой парой VID: PID;
- Один диск (даже флешка) может иметь несколько разделов;
- В Linux один и тот же раздел (файловая система) можно монтировать сразу в нескольких местах
Это говорит:
Сначала используйте udev для вывода списка всех блочных устройств, чей родитель имеет необходимый VID: PID, либо на основе свойств ID_ *, либо фактических sysfs. idVendor, idModel
атрибуты:
$ udevadm trigger -v -n -s block -p ID_VENDOR_ID=3538 -p ID_MODEL_ID=0051
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb/sdb1
я считать довольно безопасно предположить, что последняя часть имени всегда будет соответствовать /dev
название...
использование findmnt
перечислить точки монтирования:
$ findmnt -n -o TARGET /dev/sdb1
/run/media/grawity/A0D8-7268
В комбинации:
devs=$(udevadm trigger -v -n -s block -p ID_VENDOR_ID=… -p ID_MODEL_ID=…)
for dev in $devs; do
findmnt -n -o TARGET /dev/${dev##*/}
done
# alternative, based on the device's major:minor
for dev in $devs; do
findmnt -n -o TARGET $(<"$dev/dev")
done
udevadm
Кажется, я не могу найти устройство, используя его vidpid, когда оно подключено через концентратор, но, возможно, мне не хватает параметра или чего-то еще.