Linux lshw command lists all the hardware configuration of the system.
Some of the common information we can extract from the lshw command are:
- RAM Memory information
- CPU configurations
- Motherboard information
- Harddisk information
- Network devices information
Linux lshw Command Features
- Ability to produce the output in various formats such as XML, JSON, and HTML.
- We can dump the output to a file easily using the redirection operator.
- The default output contains a lot of information, we can get specific hardware information using various options.
- Supports GUI too, useful for Desktop environments only. Most of the time, we run these commands on a Linux server where we don’t have GUI software.
lshw command limitations
- It doesn’t detect Firewire devices as of now.
- It must be run as a superuser, either root or with sudo, to get the correct hardware details.
- I found that -dump option to save the output in a file is not working.
Linux Hardware Information Examples
Let’s look at some examples to get the linux hardware information using the lshw command.
1. Getting Complete Linux Hardware Information
root@localhost:~# sudo lshw
localhost
description: Computer
product: Standard PC (Q35 + ICH9, 2009)
vendor: QEMU
version: pc-q35-3.1
width: 64 bits
capabilities: smbios-2.8 dmi-2.8 vsyscall32
configuration: boot=normal
*-core
description: Motherboard
physical id: 0
*-firmware
description: BIOS
vendor: SeaBIOS
physical id: 0
version: rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org
date: 04/01/2014
size: 96KiB
*-cpu
description: CPU
product: AMD EPYC 7501 32-Core Processor
vendor: Advanced Micro Devices [AMD]
physical id: 400
bus info: cpu@0
version: pc-q35-3.1
slot: CPU 0
size: 2GHz
capacity: 2GHz
width: 64 bits
capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp x86-64 rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 virt_ssbd arat
configuration: cores=1 enabledcores=1 threads=1
*-memory
description: System Memory
physical id: 1000
size: 2GiB
capacity: 2GiB
capabilities: ecc
configuration: errordetection=multi-bit-ecc
*-bank
description: DIMM RAM
vendor: QEMU
physical id: 0
slot: DIMM 0
size: 2GiB
*-pci
description: Host bridge
product: 82G33/G31/P35/P31 Express DRAM Controller
vendor: Intel Corporation
physical id: 100
bus info: pci@0000:00:00.0
version: 00
width: 32 bits
clock: 33MHz
*-display UNCLAIMED
description: VGA compatible controller
physical id: 1
bus info: pci@0000:00:01.0
version: 02
width: 32 bits
clock: 33MHz
capabilities: vga_controller
configuration: latency=0
resources: memory:fd000000-fdffffff memory:febd0000-febd0fff memory:c0000-dffff
*-scsi:0
description: SCSI storage controller
product: Virtio SCSI
vendor: Red Hat, Inc.
physical id: 2
bus info: pci@0000:00:02.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: scsi msix bus_master cap_list
configuration: driver=virtio-pci latency=0
resources: irq:22 ioport:c000(size=64) memory:febd1000-febd1fff memory:fe000000-fe003fff
*-virtio0 UNCLAIMED
description: Virtual I/O device
physical id: 0
bus info: virtio@0
configuration: driver=virtio_scsi
*-scsi:1
description: SCSI storage controller
product: Virtio SCSI
vendor: Red Hat, Inc.
physical id: 3
bus info: pci@0000:00:03.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: scsi msix bus_master cap_list
configuration: driver=virtio-pci latency=0
resources: irq:23 ioport:c040(size=64) memory:febd2000-febd2fff memory:fe004000-fe007fff
*-virtio1 UNCLAIMED
description: Virtual I/O device
physical id: 0
bus info: virtio@1
configuration: driver=virtio_scsi
*-network
description: Ethernet controller
product: Virtio network device
vendor: Red Hat, Inc.
physical id: 4
bus info: pci@0000:00:04.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: msix bus_master cap_list rom
configuration: driver=virtio-pci latency=0
resources: irq:20 ioport:c0c0(size=32) memory:febd3000-febd3fff memory:fe008000-fe00bfff memory:feb80000-febbffff
*-virtio2
description: Ethernet interface
physical id: 0
bus info: virtio@2
logical name: eth0
serial: f2:3c:92:d4:76:9e
capabilities: ethernet physical
configuration: autonegotiation=off broadcast=yes driver=virtio_net driverversion=1.0.0 ip=45.79.122.188 link=yes multicast=yes
*-isa
description: ISA bridge
product: 82801IB (ICH9) LPC Interface Controller
vendor: Intel Corporation
physical id: 1f
bus info: pci@0000:00:1f.0
version: 02
width: 32 bits
clock: 33MHz
capabilities: isa
configuration: driver=lpc_ich latency=0
resources: irq:0
*-storage
description: SATA controller
product: 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode]
vendor: Intel Corporation
physical id: 1f.2
bus info: pci@0000:00:1f.2
version: 02
width: 32 bits
clock: 33MHz
capabilities: storage msi ahci_1.0 bus_master cap_list
configuration: driver=ahci latency=0
resources: irq:31 ioport:c0e0(size=32) memory:febd4000-febd4fff
*-serial UNCLAIMED
description: SMBus
product: 82801I (ICH9 Family) SMBus Controller
vendor: Intel Corporation
physical id: 1f.3
bus info: pci@0000:00:1f.3
version: 02
width: 32 bits
clock: 33MHz
configuration: latency=0
resources: ioport:700(size=64)
*-scsi:0
physical id: 1
logical name: scsi0
*-disk
description: EXT4 volume
product: QEMU HARDDISK
vendor: Linux
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
logical name: /
version: 1.0
serial: ccf427b1-b94a-4237-b067-d9e9fc34756f
size: 49GiB
capabilities: 5400rpm journaled extended_attributes large_files huge_files dir_nlink recover extents ext4 ext2 initialized
configuration: ansiversion=5 created=2020-02-19 14:27:58 filesystem=ext4 lastmountpoint=/ logicalsectorsize=512 modified=2020-04-28 08:10:42 mount.fstype=ext4 mount.options=rw,relatime,errors=remount-ro,data=ordered mounted=2020-04-28 08:10:43 sectorsize=512 state=mounted
*-scsi:1
physical id: 2
logical name: scsi1
*-disk
description: Linux swap volume
product: QEMU HARDDISK
vendor: QEMU
physical id: 0.1.2
bus info: scsi@1:0.1.2
logical name: /dev/sdb
version: 1
serial: 179fdb40-6f5a-4973-99fd-2c0dfee57907
size: 512MiB
capacity: 512MiB
capabilities: 5400rpm swap initialized
configuration: ansiversion=5 filesystem=swap logicalsectorsize=512 pagesize=4096 sectorsize=512
root@localhost:~#
As you can see that it’s a lot of information, if you want quick hardware information, then run it with -short option.
root@localhost:~# sudo lshw -short
H/W path Device Class Description
=============================================
system Standard PC (Q35 + ICH9, 2009)
/0 bus Motherboard
/0/0 memory 96KiB BIOS
/0/400 processor AMD EPYC 7501 32-Core Processor
/0/1000 memory 2GiB System Memory
/0/1000/0 memory 2GiB DIMM RAM
/0/100 bridge 82G33/G31/P35/P31 Express DRAM Controller
/0/100/1 display VGA compatible controller
/0/100/2 storage Virtio SCSI
/0/100/2/0 generic Virtual I/O device
/0/100/3 storage Virtio SCSI
/0/100/3/0 generic Virtual I/O device
/0/100/4 network Virtio network device
/0/100/4/0 eth0 network Ethernet interface
/0/100/1f bridge 82801IB (ICH9) LPC Interface Controller
/0/100/1f.2 storage 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode]
/0/100/1f.3 bus 82801I (ICH9 Family) SMBus Controller
/0/1 scsi0 storage
/0/1/0.0.0 /dev/sda volume 49GiB QEMU HARDDISK
/0/2 scsi1 storage
/0/2/0.1.2 /dev/sdb volume 512MiB QEMU HARDDISK
root@localhost:~#
2. Getting Linux CPU Information
We can run lshw -C class_name
to get the specific hardware class information. Let’s see how to get the CPU information.
root@localhost:~# sudo lshw -C cpu
*-cpu
description: CPU
product: AMD EPYC 7501 32-Core Processor
vendor: Advanced Micro Devices [AMD]
physical id: 400
bus info: cpu@0
version: pc-q35-3.1
slot: CPU 0
size: 2GHz
capacity: 2GHz
width: 64 bits
capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp x86-64 rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 virt_ssbd arat
configuration: cores=1 enabledcores=1 threads=1
root@localhost:~#
If you have multiple CPUs, then the command will provide information of all the CPUs.
The lshw -C processor
command will also print the CPU information.
If you are not sure of the Class name, then look at it in the lshw short output.
3. Getting Linux Memory Information
root@localhost:~# sudo lshw -C memory
*-firmware
description: BIOS
vendor: SeaBIOS
physical id: 0
version: rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org
date: 04/01/2014
size: 96KiB
*-memory
description: System Memory
physical id: 1000
size: 2GiB
capacity: 2GiB
capabilities: ecc
configuration: errordetection=multi-bit-ecc
*-bank
description: DIMM RAM
vendor: QEMU
physical id: 0
slot: DIMM 0
size: 2GiB
root@localhost:~#
4. Getting Linux Harddisk Information
root@localhost:~# sudo lshw -C storage
5. Getting Linux Motherboard Information
root@localhost:~# sudo lshw -C bus
*-core
description: Motherboard
physical id: 0
*-serial UNCLAIMED
description: SMBus
product: 82801I (ICH9 Family) SMBus Controller
vendor: Intel Corporation
physical id: 1f.3
bus info: pci@0000:00:1f.3
version: 02
width: 32 bits
clock: 33MHz
configuration: latency=0
resources: ioport:700(size=64)
root@localhost:~#
6. Getting Linux Network Interfaces Information
root@localhost:~# sudo lshw -C network
*-network
description: Ethernet controller
product: Virtio network device
vendor: Red Hat, Inc.
physical id: 4
bus info: pci@0000:00:04.0
version: 00
width: 64 bits
clock: 33MHz
capabilities: msix bus_master cap_list rom
configuration: driver=virtio-pci latency=0
resources: irq:20 ioport:c0c0(size=32) memory:febd3000-febd3fff memory:fe008000-fe00bfff memory:feb80000-febbffff
*-virtio2
description: Ethernet interface
physical id: 0
bus info: virtio@2
logical name: eth0
serial: f2:3c:92:d4:76:9e
capabilities: ethernet physical
configuration: autonegotiation=off broadcast=yes driver=virtio_net driverversion=1.0.0 ip=45.79.122.188 link=yes multicast=yes
root@localhost:~#
7. Linux Hardware Information in HTML, XML, and JSON Formats
The default output of lshw command is in plain text. We can get the output in HTML, XML, and JSON formats by specifying corresponding options.
XML:
root@localhost:~# sudo lshw -C bus -xml
<?xml version="1.0" standalone="yes" ?>
<!-- generated by lshw-B.02.18 -->
<!-- GCC 7.3.0 -->
<!-- Linux 4.15.0-88-generic #88-Ubuntu SMP Tue Feb 11 20:11:34 UTC 2020 x86_64 -->
<!-- GNU libc 2 (glibc 2.27) -->
<list>
<node id="core" claimed="true" class="bus" handle="">
<description>Motherboard</description>
<physid>0</physid>
<node id="serial" class="bus" handle="PCI:0000:00:1f.3">
<description>SMBus</description>
<product>82801I (ICH9 Family) SMBus Controller</product>
<vendor>Intel Corporation</vendor>
<physid>1f.3</physid>
<businfo>pci@0000:00:1f.3</businfo>
<version>02</version>
<width units="bits">32</width>
<clock units="Hz">33000000</clock>
<configuration>
<setting id="latency" value="0" />
</configuration>
<resources>
<resource type="ioport" value="700(size=64)" />
</resources>
</node>
</node>
</list>
root@localhost:~#
JSON:
root@localhost:~# sudo lshw -C memory -json
{
"id" : "firmware",
"class" : "memory",
"claimed" : true,
"description" : "BIOS",
"vendor" : "SeaBIOS",
"physid" : "0",
"version" : "rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org",
"date" : "04/01/2014",
"units" : "bytes",
"size" : 98304
},
{
"id" : "memory",
"class" : "memory",
"claimed" : true,
"handle" : "DMI:1000",
"description" : "System Memory",
"physid" : "1000",
"units" : "bytes",
"size" : 2147483648,
"capacity" : 2147483648,
"configuration" : {
"errordetection" : "multi-bit-ecc"
},
"capabilities" : {
"ecc" : "Multi-bit error-correcting code (ECC)"
},
"children" : [
{
"id" : "bank",
"class" : "memory",
"claimed" : true,
"handle" : "DMI:1100",
"description" : "DIMM RAM",
"vendor" : "QEMU",
"physid" : "0",
"slot" : "DIMM 0",
"units" : "bytes",
"size" : 2147483648
}
]
},
root@localhost:~#
HTML:
root@localhost:~# sudo lshw -C memory -html
8. Saving Linux Hardware Information to a File
I tried to use the -dump option with the lshw command but it didn’t worked for me. But, we can always use the redirection operator (>) to save it into a new file.
# sudo lshw -html > hardware_info.html

Conclusion
Linux lshw command is a simple tool to get the complete hardware information. The various options to get the specific hardware information and in multiple formats such as HTML and JSON is very useful in sharing the details with others also.
Reference: HardwareLiSter
I wish it produced info on the touchpad hardware. Do you know of any way to get this info?
Great article Pankaj.
Didn’t knew “lshw ” command can produce output in XML,JSON and HTML formats.
Nice descriptive info.