Как получить имя файла устройства из вывода lsusb или по пути устройства

Связанный вопрос: уведомление о подключении / отключении USB

Когда устройство подключено / отключено, я получаю мгновенное уведомление, это здорово. Но чтобы сделать это (почти) идеальным, я также хочу получить имя файла устройства, например /dev/ttyUSB0 , и, еще лучше, все символические ссылки на него.

Но я не могу найти, как получить эту информацию от udev , или от lsusb , или как-то еще. Единственный идентификатор устройства, который у меня есть, – это путь к устройству, например /devices/pci0000:00/0000:00:1d.0/usb5/5-1 . Как получить имя файла устройства?

2 Solutions collect form web for “Как получить имя файла устройства из вывода lsusb или по пути устройства”

Предположим, что я пытаюсь найти устройство для своей UVC-камеры, lsusb дает мне:

 Bus 001 Device 004: ID 1e4e:0102 Cubeternet GL-UPC822 UVC WebCam 

Имя файла устройства – это /dev/bus/usb/001/004 (первым компонентом является идентификатор шины, далее – идентификатор устройства).

Я только что построил для этого скрипт, это не очень, но работает для меня.

Я протестировал этот скрипт на Arch Linux с такими конфигурациями:

 $ uname -a Linux 4.4.13-1-lts #1 SMP Wed Jun 8 16:44:31 CEST 2016 x86_64 GNU/Linux 

И мое имя устройства /dev/sdb которое сильно отличается от вашего, я надеюсь, что это сработает и для вас.

Также обратите внимание, что этот скрипт зависит от пакета usbutils для программы usb-devices , я полагаю, что он установлен по умолчанию во всех Linux, но я могу ошибаться.

Script usbname :

 #!/usr/bin/bash # Input should be a single line from lsusb output: DATA=$1 # Read the bus number: BUS=`echo $DATA | grep -Po 'Bus 0*\K[1-9]+'` # Read the device number: DEV=`echo $DATA | grep -Po 'Device 0*\K[1-9]+'` FOUND=false USB_Serial="" # Search for the serial number of the PenDrive: while read line do if [ $FOUND == true ]; then USB_Serial=`echo "$line" | grep -Po 'SerialNumber=\K.*'` if [ "$USB_Serial" != "" ]; then break; fi fi if [ "`echo "$line" | grep -e "Bus=0*$BUS.*Dev#= *$DEV"`" != "" ]; then FOUND=true fi done <<< "$(usb-devices)" # Get the base name of the block device, eg: "sdx" BASENAME=`file /dev/disk/by-id/* | grep -v 'part' | grep -Po "$USB_Serial.*/\K[^/]+$"` # Build the full address, eg: "/dev/sdx" NAME="/dev/$BASENAME" # Output the address: echo $NAME 

Применение:

 $ ./usbname "$(lsusb | grep '<my_usb_label_or_id>')" /dev/sdb 

Я надеюсь, что это помогает.

  • Как мне форматировать USB до написания ISO?
  • Неустранимая ошибка: linux / smp_lock.h: нет такого файла или каталога при попытке скомпилировать tiusb
  • Как я могу получить доступ к приводу цифровой камеры через USB после безопасного ее удаления?
  • Запуск Ubuntu USB-накопителя. Не удается установить беспроводной драйвер
  • Bluetooth-соединение вешает систему в debian
  • Как вы определяете возможности веб-камеры?
  • Как активировать обратный привязку на CentOS 5
  • Как создать загрузочный USB-накопитель с Debian Squeeze
  • Автоматический запуск сценария при подключении Wifi-карты (udev)
  • как получить идентификатор шины устройства USB
  • Нет возможности установки Subgraph OS с USB Stick
  • Использование разности, aka overlay, aka union, файловая система с возможностью фиксации
  • Linux и Unix - лучшая ОС в мире.