Linux의 포트에 관한 질문이 있습니다. 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에 연결되어 있음을 알 수 있습니다 .
답변
나는 당신이 무엇을 요구하는지 잘 모르겠습니다. ‘port’를 여러 번 언급했지만 예제에서 대답은 /dev/ttyUSB0
포트가 아니라 장치 dev 경로 라고 말합니다 . 따라서이 답변은 각 장치의 개발 경로를 찾는 것입니다.
아래는 속성 /sys
이있는 USB 장치를 찾는 장치를 안내하는 빠르고 더러운 스크립트입니다 ID_SERIAL
. 일반적으로 실제 USB 장치 만이 속성을 가지므로 필터링 할 수 있습니다. 그렇지 않으면 목록에 실제 장치가 아닌 많은 것들이 표시됩니다.
#!/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"
나는 당신 이이 줄이 무엇인지 알기를 바랍니다 🙂
답변
다음에 연결된 경우이 명령을 사용하여 장치를 탐색 할 수 있습니다 usb0
.
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
답변
아래에서 이와 같은 것을 시도 할 수 있습니다.
echo -n "/dev/"; dmesg | grep tty|grep USB|rev|awk '{print $1}'|rev
답변
아마도 마지막에 연결된 USB 직렬 어댑터의 경로 만 알고 싶습니까?
dmesg | awk '/tty/ && /USB/ {print "/dev/"$10}'|tail -1
답변
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
됩니다.