내부 및 외부 저장 장치(예: 내부 HDD, USB 스틱 등)가 포함된 장치 목록을 탐색하지 않고 연결된 USB 장치(예: USB 마우스, USB 키보드) 목록을 보고 싶습니다. lsusb와 lsblk를 살펴봤지만 해결책을 찾는 데 어려움을 겪고 있습니다.
이를 달성하기 위한 grep 필터나 대체 명령이 있습니까?
답변1
grep -v "Mass Storage"
사용할 수 있지만 lsusb
일부 극단적인 경우에는 문자열이 표시되지 않을 수도 있습니다.
답변2
sudo lshw -businfo | grep -i usb | grep -v storage
개인적으로 나는 호스트 컨트롤러와 허브를 보고 싶지 않을 것이므로 필터링하여 다음과 같이 할 것입니다.
sudo lshw -businfo | grep -i usb | grep -v -E "storage| Host Controller| Hub"
답변3
아이디어: 나열된 각 장치에 대해 쿼리 lsusb
하고 "대량 저장 장치" 장치로 등록되지 않은 장치에 속하는 행만 인쇄합니다.
꽤 많은 연구 결과에 따르면 /sys/bus/usb
올바른 버스/장치 쌍에 대한 파일 시스템은 USB 장치에 쿼리하여 확인할 수 있다고 합니다(정확하길 바랍니다. 이것이 내가 이해하는 것만큼 신뢰할 수 없다면 지적해 주십시오). "대량 저장" 장치 계층 구조로 등록되고 해당 값을 추출(설정된 경우) bInterfaceClass
하는 경우 08
해당 장치는 "대량 저장" 장치입니다.
물론 이것은 자체 스크립트로 사용하는 것이 더 적합하지만 빠르게 실행하려면 다음을 수행하십시오.
lsusb | perl -wne '
use strict;
my ($pbus, $pdev) = map {int($_)} /^Bus ([0-9]+) Device ([0-9]+)/;
my $f = "/sys/bus/usb/devices/usb${pbus}/${pbus}-${pdev}/${pbus}-${pdev}:1.0/bInterfaceClass";
if (-f $f) {
open(my $fh, "<", $f);
my $bic = <$fh>;
chomp($bic);
next if $bic eq "08";
}
print
'
lsusb
위 스크립트의 출력을 출력과 비교합니다 (누락된 Seagate 항목 참고).
user@[REDACTED] ~ % lsusb
Bus 002 Device 003: ID 0bc2:aa15 Seagate RSS LLC Basic
Bus 002 Device 002: ID 0424:5537 Microchip Technology, Inc. (formerly SMSC) USB5537B
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 004: ID 04d8:0b29 Microchip Technology, Inc. U2417H_0B29_15083001
Bus 001 Device 002: ID 0424:2137 Microchip Technology, Inc. (formerly SMSC) USB2137B
Bus 001 Device 005: ID 8087:0033 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
user@[REDACTED] ~ % lsusb | perl -wne '
use strict;
my ($pbus, $pdev) = map {int($_)} /^Bus ([0-9]+) Device ([0-9]+)/;
my $f = "/sys/bus/usb/devices/usb${pbus}/${pbus}-${pdev}/${pbus}-${pdev}:1.0/bInterfaceClass";
if (-f $f) {
open(my $fh, "<", $f);
my $bic = <$fh>;
chomp($bic);
next if $bic eq "08";
}
print
'
Bus 002 Device 002: ID 0424:5537 Microchip Technology, Inc. (formerly SMSC) USB5537B
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 004: ID 04d8:0b29 Microchip Technology, Inc. U2417H_0B29_15083001
Bus 001 Device 002: ID 0424:2137 Microchip Technology, Inc. (formerly SMSC) USB2137B
Bus 001 Device 005: ID 8087:0033 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub