USB peripherals range from keyboards and storage sticks to embedded debug adapters, and troubleshooting them often starts with confirming how the system sees each device. Access to detailed USB information aids in matching physical devices to logical identifiers, validating that drivers loaded correctly, and understanding power capabilities. The kernel always knows what is actually on each bus, even when the cable maze under the desk suggests otherwise.

On Linux, USB information is exposed through the kernel's USB subsystem and surfaced to user space via tools such as lsusb, dmesg, and usb-devices. These utilities read from the underlying bus topology and descriptor data, revealing bus numbers, device IDs, configured interfaces, and sometimes power attributes or speed. Combining them provides both a high-level inventory and low-level descriptors for each device.

Because USB buses can host hubs, composite devices, and hot-plugged hardware, interpreting their state benefits from multiple views and a consistent workflow. Verbose listings generate large outputs, some details require elevated privileges, and device numbering can change when hardware is reattached. Using the commands below in a structured order yields a repeatable way to inspect and verify USB devices on a Linux system.

Steps to view USB device details:

  1. Open a terminal on the Linux system.
  2. List all connected USB devices with lsusb.
    $ lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

    The lsusb command shows a summary of USB devices connected to the system, including their bus location, device number, vendor ID, and product ID.

  3. Display the USB device hierarchy using lsusb -t.
    $ lsusb -t
    /:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=vhci_hcd/8p, 480M
    /:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=vhci_hcd/8p, 10000M

    The lsusb -t option provides a tree-like structure showing which devices are connected to each USB port and their negotiated speed (for example, 480M for USB 2.0).

  4. Show verbose descriptor information for each connected device with lsusb -v.
    $ lsusb -v
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass            9 Hub
      bDeviceSubClass         0 [unknown]
      bDeviceProtocol         1 Single TT
      bMaxPacketSize0        64
      idVendor           0x1d6b Linux Foundation
      idProduct          0x0002 2.0 root hub
    ##### snipped #####

    The -v option prints detailed descriptors, configurations, and interfaces for each device, which can include information related to capabilities and power characteristics.

  5. Filter the listing to a specific USB device using lsusb -d with its vendor and product IDs.
    $ lsusb -d 1d6b:0002
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    The -d option restricts output to the device matching the specified vendor and product ID, useful once the numeric IDs are known.

  6. Target a device by bus and device number using lsusb -s.
    $ lsusb -s 001:001
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    The -s option selects a device using its bus and device numbers, which are visible in the main lsusb listing.

  7. Quickly locate devices by name by combining lsusb with grep.
    $ lsusb | grep Linux
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

    Filtering by manufacturer or model name narrows the list when multiple devices are present on the same system.

  8. Examine kernel messages related to USB activity using dmesg.
    $ dmesg | grep -i usb
    [    0.074022] usbcore: registered new interface driver usbfs
    [    0.074024] usbcore: registered new interface driver hub
    [    0.074034] usbcore: registered new device driver usb

    dmesg shows kernel log messages and helps identify detection events, speed negotiation, and error conditions for USB devices.

  9. Retrieve detailed per-device information from the kernel with usb-devices.
    $ usb-devices
    T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 8
    D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0002 Rev=06.12
    S:  Manufacturer=Linux 6.12.54-linuxkit vhci_hcd
    S:  Product=USB/IP Virtual Host Controller
    S:  SerialNumber=vhci_hcd.0
    ##### snipped #####

    The usb-devices output exposes low-level attributes such as class, speed, and configuration flags directly from the kernel’s USB subsystem.

  10. Confirm detection accuracy by comparing lsusb and usb-devices output with the set of physically connected USB devices.