मैं काफी निश्चित नहीं हूं कि आप क्या पूछ रहे हैं। आप कई बार 'पोर्ट' का उल्लेख करते हैं, लेकिन फिर आपके उदाहरण में, आप कहते हैं कि उत्तर है /dev/ttyUSB0
, जो एक डिवाइस देव पथ है, पोर्ट नहीं। तो यह उत्तर प्रत्येक डिवाइस के लिए देव पथ को खोजने के बारे में है।
नीचे एक त्वरित और गंदी स्क्रिप्ट है जो /sys
एक ID_SERIAL
विशेषता के साथ यूएसबी उपकरणों की तलाश में उपकरणों के माध्यम से चलता है । आमतौर पर केवल वास्तविक यूएसबी उपकरणों में यह विशेषता होगी, और इसलिए हम इसके साथ फ़िल्टर कर सकते हैं। यदि हम नहीं करते हैं, तो आप सूची में बहुत सारी चीजें देखेंगे जो भौतिक उपकरण नहीं हैं।
#!/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
मेरे सिस्टम पर, इसके परिणाम निम्नलिखित हैं:
/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
स्पष्टीकरण:
find /sys/bus/usb/devices/usb*/ -name dev
डिवाइस जो दिखाते हैं उनकी निर्देशिका में /dev
एक dev
फ़ाइल है /sys
। इसलिए हम इस मापदंड से मेल खाते निर्देशिकाओं की खोज करते हैं।
syspath="${sysdevpath%/dev}"
हम निर्देशिका पथ चाहते हैं, इसलिए हम पट्टी करते हैं /dev
।
devname="$(udevadm info -q name -p $syspath)"
यह हमें /dev
इस /sys
उपकरण से मेल खाता है।
[[ "$devname" == "bus/"* ]] && continue
यह उन चीजों को फ़िल्टर करता है जो वास्तविक उपकरण नहीं हैं। अन्यथा आपको USB नियंत्रक और हब जैसी चीजें मिलेंगी।
eval "$(udevadm info -q property --export -p $syspath)"
udevadm info -q property --export
आदेश सूचियों एक प्रारूप में सभी डिवाइस गुण है कि चर में खोल से पार्स किया जा सकता। तो हम बस eval
इस पर कॉल करते हैं। यही कारण है कि हम कोष्ठक में कोड लपेटते हैं, ताकि हम एक उपधारा का उपयोग करें, और चर प्रत्येक लूप पर मिटा दिए जाएं।
[[ -z "$ID_SERIAL" ]] && continue
उन चीजों को अधिक फ़िल्टर करना जो वास्तविक उपकरण नहीं हैं।
echo "/dev/$devname - $ID_SERIAL"
मुझे आशा है कि आपको पता है कि यह रेखा क्या करती है :-)
/dev
को किसी प्रविष्टि के साथ जोड़ना चाहते हैंlsusb
? या क्या आप उन सभी उपकरणों को सूचीबद्ध करना चाहते/dev
हैं जो भौतिक USB डिवाइस से प्राप्त किए गए हैं? या आप बस चाह रहे हैंls /dev/ttyUSB*
?