USB-устройство, которое будет обнаружено в “том же”/dev, всегда указывает?

Во-первых, давайте начнем с параметров командной строки:

  • -n отключает нормальный вывод буфера. Только строки, которые требуют распечатать (например, с p команда), будет распечатан

  • -r включает расширенный regexp

  • -e не действительно необходим, когда мы указываем команды sed в командной строке а не из файла

Теперь прибывает команды sed. Существуют два, разделены с ; символ. Sed идет линию за линией и выполняет те две команды в порядке. Но только если они соответствуют. Здесь, обе команды снабжаются префиксом /SOMETHING/ что означает, что эта команда только выполняется, если текущая строка соответствует SOMETHING regexp.

/jar$/ regexp только соответствует если текущие концы строки jar. Подобный /class$/ regexp только соответствует если текущие концы строки class. Теперь, если конкретная строка соответствует, она выполняет две команды в нем (они сгруппированы с {}) - в первом случае это x и затем d команда. Во втором случае это x и затем p команда.

  • x команда eXchange. sed имеет буфер, который можно использовать для хранения некоторых строк. Эта команда обменивается этим буфером с текущей строкой (таким образом, текущая строка переходит к этому содержимому буфера, и содержимое буфера становится текущей строкой).

  • d управляйте отбрасывает текущую строку, читает новую и начинает выполнять команды sed от первой (все команды после d проигнорированы для текущей строки).

  • p управляйте печатает текущую строку. Так как мы используем -n аргументы команды только строки, распечатанные с p будет показан в выводе.

Таким образом подвести итог:

  • /jar$/ { x; d; } средства - если текущие концы строки с jar, сохраните его в буфере

  • /class$/ { x; p; } средства - если текущие концы строки с class, получите содержимое буфера (который должен содержать последнюю строку, заканчивающуюся jar, если не был файл, заканчивающийся class уже) и печать это

3
09.01.2014, 05:12
3 ответа

Можно попробовать через udev, но это не так легко, более найдено здесь, но знать, что сообщение составляет 4 года гм старые световые годы. USB-устройства, не закрепленные на dev/sd?-> Фиксированный

1
27.01.2020, 21:28

У меня была аналогичная проблема с USB-устройством, использующим драйвер pl2303. Время от времени /dev/ttyUSB0 исчезал и на его месте появлялся /dev/ttyUSB1.

Я решил эту проблему, выполняя cronjob каждые 15 минут, который делал следующее:

if [ ! -c /dev/ttyUSB0 ]
then
  echo `date` Device missing
  echo `date` Stopping zmconcopy `/usr/sbin/rczmconcopy stop 2>&1`
  sleep 2
  echo `date` Unloading drivers `/sbin/modprobe -r pl2303 2>&1`
  sleep 2
  echo `date` Reloading drivers `/sbin/modprobe pl2303 2>&1`
  sleep 2
  echo `date` Starting zmconcopy `/usr/sbin/rczmconcopy start 2>&1`
  echo `date` Finished
fi

Важно, чтобы любое приложение, использующее /dev/ttyUSB0, останавливалось перед выгрузкой драйвера устройства.

Возможно, вы используете драйвер, отличный от pl2303, поэтому измените его на любой другой.

1
27.01.2020, 21:28

Вы также можете попробовать использовать устройство по USB-адресу (т. Е. Контроллер / концентратор и номер устройства), например:

ls -l /dev/bus/usb/0??/0??

Вы можете узнать номер устройства с помощью команды LSUSB ( Попробуйте использовать его как root, если вы не получите все необходимую информацию, хотя он обычно имеет тенденцию дать вам довольно много информации) или использовать

udevadm info --name=/dev/ttyUSB0 --attribute-walk

Вот связанная информация, если вы хотите немного выкопать: https://shubuntu.com/questions/184526/how-to-get-bus-and-device-relationships-for-a-dev-ttyusb

0
27.01.2020, 21:28

Теги

Похожие вопросы