Ich bin nicht ganz sicher, was Sie fragen. Sie erwähnen 'port' mehrmals, aber dann sagen Sie in Ihrem Beispiel, dass die Antwort ist /dev/ttyUSB0
, dass es sich um einen Geräteentwicklungspfad handelt, nicht um einen Port. Bei dieser Antwort geht es also darum, den Entwicklerpfad für jedes Gerät zu ermitteln.
Im Folgenden finden Sie ein schnelles und unsauberes Skript, das Geräte /sys
nach USB-Geräten mit einem ID_SERIAL
Attribut durchsucht. In der Regel haben nur echte USB-Geräte dieses Attribut, sodass wir damit filtern können. Andernfalls werden in der Liste viele Dinge angezeigt, die keine physischen Geräte sind.
#!/bin/bash
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
(
syspath="${sysdevpath%/dev}"
devname="$(udevadm info -q name -p $syspath)"
[[ "$devname" == "bus/"* ]] && continue
eval "$(udevadm info -q property --export -p $syspath)"
[[ -z "$ID_SERIAL" ]] && continue
echo "/dev/$devname - $ID_SERIAL"
)
done
Auf meinem System führt dies zu folgenden Ergebnissen:
/dev/ttyACM0 - LG_Electronics_Inc._LGE_Android_Phone_VS930_4G-991c470
/dev/sdb - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0
/dev/sdb1 - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0
/dev/input/event5 - Logitech_USB_Receiver
/dev/input/mouse1 - Logitech_USB_Receiver
/dev/input/event2 - Razer_Razer_Diamondback_3G
/dev/input/mouse0 - Razer_Razer_Diamondback_3G
/dev/input/event3 - Logitech_HID_compliant_keyboard
/dev/input/event4 - Logitech_HID_compliant_keyboard
Erläuterung:
find /sys/bus/usb/devices/usb*/ -name dev
Geräte, die in angezeigt werden, /dev
haben eine dev
Datei in ihrem /sys
Verzeichnis. Also suchen wir nach Verzeichnissen, die diesen Kriterien entsprechen.
syspath="${sysdevpath%/dev}"
Wir wollen den Verzeichnispfad, also streifen wir ab /dev
.
devname="$(udevadm info -q name -p $syspath)"
Dies gibt uns den Pfad an /dev
, der diesem /sys
Gerät entspricht.
[[ "$devname" == "bus/"* ]] && continue
Dies filtert Dinge heraus, die keine tatsächlichen Geräte sind. Andernfalls erhalten Sie Dinge wie USB-Controller und Hubs.
eval "$(udevadm info -q property --export -p $syspath)"
Der udevadm info -q property --export
Befehl listet alle Geräteeigenschaften in einem Format auf, das von der Shell in Variablen zerlegt werden kann. Also rufen wir einfach dazu eval
auf. Dies ist auch der Grund, warum wir den Code in Klammern setzen, sodass wir eine Subshell verwenden und die Variablen in jeder Schleife gelöscht werden.
[[ -z "$ID_SERIAL" ]] && continue
Mehr Filterung von Dingen, die keine tatsächlichen Geräte sind.
echo "/dev/$devname - $ID_SERIAL"
Ich hoffe du weißt was diese Zeile macht :-)
/dev
mit einem Eintrag in verknüpfenlsusb
? Oder möchten Sie alle Geräte auflisten/dev
, die von einem physischen USB-Gerät abgeleitet sind? Oder willst du nurls /dev/ttyUSB*
?