web-dev-qa-db-ja.com

接続されたUSBデバイスの名前とデバイスファイルパスを取得する

一般的なlsusbを実行すると、次のような結果が得られます。

バス003デバイス003:ID 1a86:7523 QinHeng Electronics HL-340 USB-シリアルアダプター

ただし、デバイスファイルのパス(つまりttyUSB0)は表示されません。これを行うコマンドは存在しますか?

dmesgおよびudevadm infoについては、それらは冗長すぎます。

出力をもっとシンプルにしたいのですが、次のようなデバイスファイルパスをlsusbの出力に追加するのが最善です。

Bus 003 Device 003:ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter/dev/ttyUSB0

1
aster94

これが他の人にとっても、コードの改善にも役立つことを願って、多くのコピー/貼り付けがここに再び来ました

この質問 の回答からほぼ完璧なコードを使用し、いくつかの小さなものを追加/削除しました

#!/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
        [[ "$devname" == "input/"* ]] && continue
        [[ "$devname" == "video0"* ]] && continue

        eval "$(udevadm info -q property --export -p $syspath)"
        [[ -z "$ID_SERIAL" ]] && continue

        busnum="$(udevadm info -a -p  $(udevadm info -q path -n /dev/$devname) | awk -F "==" '/busnum/ {gsub("\"","");print $2}' | head -1)"
        devnum="$(udevadm info -a -p  $(udevadm info -q path -n /dev/$devname) | awk -F "==" '/devnum/ {gsub("\"","");print $2}' | head -1)"
        bus_dev=${busnum}:${devnum}
        lsusb="$(lsusb -s $bus_dev)"

        echo "$lsusb - /dev/$devname"
    )
done

出力:

バス003デバイス005:ID 1a86:7523 QinHeng Electronics HL-340 USB-シリアルアダプター-/ dev/ttyUSB0

注:私はUnixの経験がないので、コードを改善したい場合はしてください!

1
aster94