Ne istediğinden emin değilim. Birkaç kez 'port' den bahsediyorsunuz, ama sonra örneğinizde, cevabın /dev/ttyUSB0
bir cihaz değil, bir port olduğunu söylersiniz . Yani bu cevap her cihaz için dev yolunu bulma ile ilgili.
Aşağıda, özniteliğe /sys
sahip USB aygıtları ararken aygıtlar arasında dolaşan hızlı ve kirli bir komut dosyası verilmiştir ID_SERIAL
. Genellikle yalnızca gerçek USB aygıtları bu özniteliğe sahip olur ve bu nedenle onunla filtreleme yapabiliriz. Bunu yapmazsak, listede fiziksel olmayan bir çok şey görürsünüz.
#!/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
Sistemimde bu, aşağıdakilerle sonuçlanır:
/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
Açıklama:
find /sys/bus/usb/devices/usb*/ -name dev
Ortaya çıkan cihazların dizininde /dev
bir dev
dosya var /sys
. Bu yüzden bu kriterlere uyan dizinleri ararız.
syspath="${sysdevpath%/dev}"
Dizin yolunu istiyoruz, o yüzden ayrılıyoruz /dev
.
devname="$(udevadm info -q name -p $syspath)"
Bu bize /dev
bu /sys
cihaza karşılık gelen yolu verir .
[[ "$devname" == "bus/"* ]] && continue
Bu, gerçek cihaz olmayan şeyleri filtreler. Aksi takdirde, USB denetleyicileri ve hub'ları gibi şeyler alırsınız.
eval "$(udevadm info -q property --export -p $syspath)"
udevadm info -q property --export
Komut listesi değişkenlere kabuk tarafından çözümlenen bir biçimde tüm cihaz özellikleri. Yani biz sadece buna çağrı eval
. Bu ayrıca kodu parantez içine almamızın, alt kabuk kullanmamızın ve değişkenlerin her döngüde silinmesinin nedeni de budur.
[[ -z "$ID_SERIAL" ]] && continue
Gerçek cihaz olmayan şeylere daha fazla filtre uygulamak.
echo "/dev/$devname - $ID_SERIAL"
Umarım bu çizginin ne yaptığını biliyorsundur :-)
/dev
bir girişi ile ilişkilendirmek ister misinizlsusb
? Veya/dev
fiziksel bir USB cihazından türetilen tüm cihazları listelemek mi istiyorsunuz ? Yoksa sadece istiyorls /dev/ttyUSB*
musun?