डिवाइस के पोर्ट निर्धारित करने के लिए कमांड (जैसे / dev / ttyUSB0)


46

मेरे पास लिनक्स में बंदरगाहों के बारे में एक प्रश्न है। अगर मैं अपने डिवाइस को USB के माध्यम से जोड़ता हूं और इसके पोर्ट को जांचना चाहता हूं तो मैं इसे कमांड lsusb का उपयोग नहीं कर सकता, जो इस बस पर बस नंबर और डिवाइस नंबर निर्दिष्ट करता है:

[ziga@Ziga-PC ~]$ lsusb
Bus 003 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

क्या कोई कमांड है जो मुझे बताता है कि डिवाइस सीधे डिवाइस से जुड़ा है? अब तक केवल ऐसा करने के लिए और आदेश को फिर से कनेक्ट करने और उपयोग करने का तरीका था:

[ziga@Ziga-PC ~]$ dmesg | grep tty
[    0.000000] console [tty0] enabled
[    0.929510] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    4.378109] systemd[1]: Starting system-getty.slice.
[    4.378543] systemd[1]: Created slice system-getty.slice.
[    8.786474] usb 3-4.4: FTDI USB Serial Device converter now attached to ttyUSB0

अंतिम पंक्ति में यह देखा जा सकता है कि मेरा उपकरण / dev / ttyUSB0 से जुड़ा है ।


आप क्या खत्म करने की कोशिश कर रहे हैं? क्या आप किसी उपकरण /devको किसी प्रविष्टि के साथ जोड़ना चाहते हैं lsusb? या क्या आप उन सभी उपकरणों को सूचीबद्ध करना चाहते /devहैं जो भौतिक USB डिवाइस से प्राप्त किए गए हैं? या आप बस चाह रहे हैं ls /dev/ttyUSB*?
पैट्रिक

मुझे बस एक कमांड की आवश्यकता है जो मुझे एक डिवाइस का पोर्ट देगा और मुझे मेरे डिवाइस को डिस्कनेक्ट और पुनः कनेक्ट करने के लिए धक्का नहीं देगा। ls /dev/ttyUSB*केवल 10 बंदरगाहों की सूची देगा लेकिन इस सूची से मैं यह नहीं बता सकता कि कौन सा उपकरण मेरे डिवाइस के लिए है।
71GA

मुझे यह मददगार लगा। lsusb -v
tjaart55

जवाबों:


80

मैं काफी निश्चित नहीं हूं कि आप क्या पूछ रहे हैं। आप कई बार 'पोर्ट' का उल्लेख करते हैं, लेकिन फिर आपके उदाहरण में, आप कहते हैं कि उत्तर है /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"

मुझे आशा है कि आपको पता है कि यह रेखा क्या करती है :-)


2
धन्यवाद। मैं आपके awser से बहुत कुछ सीखूंगा और अब मैं देखता हूं कि मेरे लिए शर्तें पूरी तरह से स्पष्ट हैं। क्या कोई छोटा रास्ता है? Maybee एक कमांड पहले से ही लिनक्स में एकीकृत है?
71GA

नहीं। यदि पहले से मौजूद कमांड था, तो मैं खुशी से इसकी सिफारिश करूंगा।
पैट्रिक

अधिकतम संगतता के लिए / बिन / बैश को / बिन / श में बदलने और हटाने () के लिए
सुझाव

10

यदि आप से कनेक्ट हैं, तो आप अपने डिवाइस का पता लगाने के लिए इस कमांड का उपयोग कर सकते हैं usb0:

udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0)

शीर्ष उत्तर ने मेरी मशीन पर काम नहीं किया, लेकिन इसने बहुत अच्छा काम किया। धन्यवाद!
जॉनी_बॉय

2

आप नीचे कुछ इस तरह की कोशिश कर सकते हैं।

echo -n "/dev/"; dmesg | grep tty|grep USB|rev|awk '{print $1}'|rev

ओ मेरी आँखें! dmesg | awk '/tty/ && /USB/ {print "/dev/"$1}' (बराबर लेकिन साफ ​​... लेकिन अभी भी अजीब कोड; क्यों न केवल ttyUSB एक साथ? और 2x के लिए क्या संशोधित किया गया था?)
पीटर

1
revइसलिए पिछले क्षेत्र एक्सेस किया जाता है प्रयोग किया जाता है, इस से बदला जा सकता है $NF: दे रही हैdmesg | awk '/tty/ && /USB/ {print "/dev/"$NF}'
लियो Germond

2

शायद आप यूएसबी-सीरियल एडॉप्टर के लिए सिर्फ एक रास्ता जानना चाहते हैं जो पिछले जुड़ा हुआ है?

dmesg | awk '/tty/ && /USB/ {print "/dev/"$10}'|tail -1

2

यह मानते हुए कि आप जानते हैं कि आपने जो डिवाइस प्लग किया है, वह 14.04 Ubuntu में है, कम से कम, ऐसी कमांड है usb-devicesजिसे आप देख सकते हैं और जानकारी पा सकते हैं:

$ usb-devices

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480 MxCh= 3
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev=04.04
S:  Manufacturer=Linux 4.4.0-131-generic ehci_hcd
S:  Product=EHCI Host Controller
S:  SerialNumber=0000:00:1a.0
C:  #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub

और पहली पंक्ति बस और पोर्ट, साथ ही साथ देने वाले डिवाइस नंबर को सूचीबद्ध करती lsusbहै।


यह सही उत्तर है, निश्चित नहीं कि इसमें अधिक वोट क्यों नहीं हैं। बाकी
जाग के मेस

1
इस प्रदर्शित नहीं करता /dev/*पथ
xinthose
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.