Если это будет частью программы, используемой широкой публикой, имейте в виду, что:
- Может быть несколько устройств с одинаковой парой 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