2 votes

Comment filtrer les informations sur les périphériques de `usb-devices` en utilisant VID et PID ?

Pour répondre aux questions concernant les périphériques USB ici et l'envoi de correctifs du noyau, j'ai besoin de la sortie de usb-devices commandement.

Ou plus complet sudo cat /sys/kernel/debug/usb/devices .

Mais il donne beaucoup de résultats concernant tous les appareils.

Quel est le moyen le plus simple de filtrer uniquement la section concernant un appareil, si je sais Vendor y ProdID .

Les séparateurs de sections sont des lignes vides.

Cela devrait ressembler à ceci

T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=1.5 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=046d ProdID=c05a Rev=63.00
S:  Manufacturer=Logitech
S:  Product=USB Optical Mouse
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid

o

T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=04b8 ProdID=0898 Rev= 1.00
S:  Manufacturer=EPSON
S:  Product=EPSON XP-402 403 405 406 Series
S:  SerialNumber=51464B593030343135
C:* #Ifs= 3 Cfg#= 1 Atr=c0 MxPwr=  2mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=07(print) Sub=01 Prot=02 Driver=usblp
E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

De plus, lorsqu'il y a plus d'un enregistrement avec le même numéro de vendeur, j'aimerais avoir des séparateurs de ligne vides dans la sortie.

5voto

steeldriver Points 118154

Comme les enregistrements sont séparés par des lignes vides, il devrait être possible d'utiliser awk ou perl en mode paragraphe par exemple

sudo awk -vRS= '/Vendor=04b8/{print $0,"\n"}' /sys/kernel/debug/usb/devices

ou (avec GNU awk)

sudo awk -vRS= '/Vendor=04b8/{print $0,RT}' /sys/kernel/debug/usb/devices

ou avec perl

sudo perl -00 -ne 'print if /Vendor=1d6b/' /sys/kernel/debug/usb/devices

Si votre système possède le usb-devices vous pouvez éviter cat directement le fichier :

usb-devices | awk '/1d6b/{print $0,RT}' RS=

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X