GNU/Linux >> Linux の 問題 >  >> Linux

デバイス(/ dev / ttyusb0など)のポートを判別するコマンド?

Linuxのポートについて質問があります。 USB経由でデバイスを接続し、そのポートを確認したい場合、このバスのバス番号とデバイス番号のみを指定するコマンドlsusbを使用して確認することはできません。

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

デバイスが直接接続されているポートを教えてくれるコマンドはありますか? これまでこれを行う唯一の方法は、コマンドを切断して再接続し、次のコマンドを使用することでした:

[[email protected] ~]$ 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/ttyUSB0であると言います。 、これはデバイス開発パスであり、ポートではありません。したがって、この答えは、各デバイスの開発パスを見つけることに関するものです。

以下は、/sys内のデバイスをウォークスルーする簡単で汚いスクリプトです。 ID_SERIALのUSBデバイスを探しています 属性。通常、実際の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/"* ]] && exit
        eval "$(udevadm info -q property --export -p $syspath)"
        [[ -z "$ID_SERIAL" ]] && exit
        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/"* ]] && exit

これにより、実際のデバイスではないものが除外されます。それ以外の場合は、USBコントローラーやハブなどを入手できます。 exit サブシェルを終了し、ループの次の反復に流れます。

eval "$(udevadm info -q property --export -p $syspath)"

udevadm info -q property --export コマンドは、シェルによって変数に解析できる形式ですべてのデバイスプロパティを一覧表示します。したがって、単にevalと呼びます これについて。これは、コードを括弧で囲んでサブシェルを使用し、各ループで変数がワイプされる理由でもあります。

[[ -z "$ID_SERIAL" ]] && exit

実際のデバイスではないもののフィルタリングを強化します。

echo "/dev/$devname - $ID_SERIAL"

この行が何をするのか知っているといいのですが🙂

関連:「sudosu-」内でコマンドをログに記録する方法は?
Linux
  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. /dev/random または /dev/urandom を base64 でエンコードする方法は?

  3. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  1. /dev/zero から /dev/null への DD ...実際に何が起こるか

  2. Linux:/dev/console 、 /dev/tty 、 /dev/tty0 の違い

  3. /dev/tcp を使用するために < または > が必要な理由

  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  3. /dev/sda と /dev/sda1 の違い