USB checks matter when a keyboard, storage stick, serial adapter, or embedded board is plugged in but the expected device node or application does not appear. Showing the USB bus view first confirms whether Linux can see the hardware before troubleshooting drivers, permissions, or higher-level software.
The lsusb command lists devices from the USB bus and maps vendor and product IDs to names when the local hardware database knows them. Its tree and verbose modes add port layout, speed, driver, interface, endpoint, and power fields that help distinguish a real device from a hub or root controller.
USB bus and device numbers are assigned during enumeration and can change after a device is unplugged or reset. Use the numeric vendor:product ID for repeatable device matching, and use the bus/device selector only for the current attachment session.
Steps to show USB device details in Linux:
- List the USB devices visible to the kernel.
$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver Bus 001 Device 003: ID 0781:5581 SanDisk Corp. Ultra Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
The Bus and Device fields identify the current connection point. The ID field is the vendor:product pair in hexadecimal.
- Show the USB port hierarchy and negotiated speeds.
$ lsusb --tree /: Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/12p, 480M |__ Port 002: Dev 003, If 0, Class=Mass Storage, Driver=usb-storage, 480M /: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/6p, 5000MUse this view to see whether a device sits behind a hub and whether it negotiated USB 2.0 speed such as 480M or a SuperSpeed link such as 5000M.
- Select one device by vendor and product ID.
$ lsusb -d 0781:5581 Bus 001 Device 003: ID 0781:5581 SanDisk Corp. Ultra
Copy the hexadecimal ID value from the main lsusb output. A missing row usually means the device was unplugged, reset, or enumerated with different IDs.
- Print verbose descriptors for the selected device.
$ lsusb --verbose -d 0781:5581 Bus 001 Device 003: ID 0781:5581 SanDisk Corp. Ultra Negotiated speed: High Speed (480Mbps) Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.10 idVendor 0x0781 SanDisk Corp. idProduct 0x5581 Ultra ##### snipped ##### Configuration Descriptor: bNumInterfaces 1 bmAttributes 0x80 MaxPower 224mA ##### snipped #####lsusb --verbose prints descriptors, configurations, interfaces, endpoints, and power fields. Run the command with sudo if permission limits hide descriptor sections on the target system.
- Select the same device by bus and device number.
$ lsusb -s 001:003 Bus 001 Device 003: ID 0781:5581 SanDisk Corp. Ultra
Bus and device numbers are current-session identifiers. Replugging the peripheral can assign a new device number.
- Read the kernel USB summary when class, speed, driver, and interface fields are needed.
$ usb-devices T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 3 Spd=480 MxCh= 0 D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=0781 ProdID=5581 Rev=01.00 S: Manufacturer=SanDisk S: Product=Ultra C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=224mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
usb-devices walks /sys/bus/usb/devices. It is useful when descriptor fields need to be copied into support notes.
- Compare the selected row with the physical device under inspection.
If only root hubs appear, the Linux system is not seeing an external USB peripheral on the visible buses. Check the cable, hub, VM USB passthrough, or docking station before treating the device as attached.
Mohd Shakir Zakaria is a cloud architect with deep roots in software development and open-source advocacy. Certified in AWS, Red Hat, VMware, ITIL, and Linux, he specializes in designing and managing robust cloud and on-premises infrastructures.