公认的答案确实并没有太大帮助。我终于通过探测idProduct和idVendor(如果存在)找到了一种方法。这是一个shell脚本
#!/bin/bash
{
cd /sys/bus/usb/devices
for i in *; do
[ -e $i/idProduct ] && echo $(cat $i/idVendor $i/idProduct) $i
done
}
这就是我在系统上得到的。
$ ./script
0424 2514 1-3
8087 0024 2-1
0a5c 21e6 2-1.4
8087 0024 4-1
1d6b 0002 usb1
1d6b 0002 usb2
1d6b 0003 usb3
1d6b 0002 usb4
$ lsusb
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 006: ID 0a5c:21e6 Broadcom Corp. BCM20702 Bluetooth 4.0 [ThinkPad]
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
在这里我可以看到,例如0a5c:21e6
,这是一个蓝牙设备,映射到2-1.4
。
为了更加方便,您可以在shell中将此定义为一个函数,例如
$ cat >> ~/.bashrc << ENDL
gousb() {
for i in /sys/bus/usb/devices/*; do
if [ -e \$i/idProduct ]; then
if [ \$(cat \$i/idVendor):\$(cat \$i/idProduct) = \$1 ]; then
cd \$i
return
fi
fi
done
echo "\$1 not found :-("
}
ENDL
$ source ~/.bashrc
$ gousb 0a5c:21e6
$ pwd
/sys/bus/usb/devices/2-1.4
udev
vslsusb
和sys/devices/..
vs. 的不同用法感到困惑,/dev/bus/usb/..
并从您的答案来看,您似乎是知道的:)也许您可以阐明这两个问题?askubuntu.com/questions/342061/power-on-off-usb-ports和askubuntu.com/questions/498950/...