lshw 是Linux系统中用于显示硬件配置信息的命令。它可以显示详细的硬件信息,包括处理器架构和速度、内存配置、固件版本、主板配置、磁盘驱动器、网络接口等。lshw从/proc目录和DMI(Desktop Management Interface)表中收集信息,提供完整的硬件清单。
lshw [选项]
| 选项 | 说明 |
|---|---|
-short 或 -s |
显示简短的硬件列表 |
-businfo 或 -b |
显示设备的总线信息 |
-class 类别 或 -C 类别 |
只显示指定类别的硬件信息 |
-disable 测试 |
禁用指定的测试(如dmi, pci, cpu等) |
-enable 测试 |
启用指定的测试 |
-quiet 或 -q |
不显示状态信息 |
-sanitize |
清理输出(移除敏感信息如序列号) |
-numeric 或 -numeric |
显示数字ID(如PCI IDs) |
-json |
以JSON格式输出 |
-html |
以HTML格式输出 |
-xml |
以XML格式输出 |
-version 或 -V |
显示版本信息 |
-help 或 -h |
显示帮助信息 |
| 类别 | 说明 | 示例设备 |
|---|---|---|
| system | 系统信息 | 主机名、产品名称、序列号 |
| bus | 总线信息 | PCI总线、USB总线 |
| memory | 内存 | 物理内存、虚拟内存 |
| processor 或 cpu | 处理器 | CPU型号、核心数、频率 |
| bridge | 桥接设备 | PCI桥、ISA桥 |
| display | 显示设备 | 显卡、集成显卡 |
| network | 网络设备 | 以太网卡、无线网卡 |
| storage | 存储控制器 | SATA控制器、RAID控制器 |
| disk | 磁盘驱动器 | 硬盘、SSD |
| volume | 逻辑卷 | 分区、LVM卷 |
| multimedia | 多媒体设备 | 声卡、视频采集卡 |
| input | 输入设备 | 键盘、鼠标、触摸板 |
| printer | 打印机 | 本地打印机、网络打印机 |
| power | 电源设备 | UPS、电池 |
| communication | 通信设备 | 调制解调器、串口 |
| generic | 通用设备 | 未分类的设备 |
显示系统硬件信息的简要列表:
# 显示简要硬件信息(需要root权限)
sudo lshw -short
# 示例输出:
# H/W path Device Class Description
# ===================================================
# system Laptop
# /0 bus Motherboard
# /0/0 memory 128KiB BIOS
# /0/1 memory 16GiB System Memory
# /0/1/0 memory 8GiB SODIMM DDR4 Synchronous 2667 MHz (0.4 ns)
# /0/1/1 memory 8GiB SODIMM DDR4 Synchronous 2667 MHz (0.4 ns)
# /0/2 processor Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz
# /0/100 bridge Ice Lake-LP Processor Host Bridge/DRAM Registers
# /0/100/2 display Iris Plus Graphics G7
# /0/100/4 generic Ice Lake-LP Processor Imaging Unit
# /0/100/12 generic Intel Corporation
# /0/100/14 bus Ice Lake-LP USB 3.1 xHCI Host Controller
# /0/100/14/0 usb1 bus xHCI Host Controller
# /0/100/14/1 usb2 bus xHCI Host Controller
# /0/100/14.2 bus Ice Lake-LP Serial IO I2C Controller #0
# /0/100/15 bus Ice Lake-LP Serial IO I2C Controller #1
# /0/100/16 communication Ice Lake-LP Management Engine Interface
# /0/100/17 storage Ice Lake-LP SATA Controller [AHCI mode]
# /0/100/1c bridge Ice Lake-LP PCI Express Root Port #5
# /0/100/1c/0 wlp0s20f3 network Wi-Fi 6 AX201
# /0/100/1d bridge Ice Lake-LP PCI Express Root Port #9
# /0/100/1d/0 nvme0 storage NVMe SSD Controller SM981/PM981/PM983
# /0/100/1f bridge Ice Lake-LP LPC Controller
# /0/100/1f.3 multimedia Ice Lake-LP Smart Sound Technology Audio Controller
# /0/100/1f.4 bus Ice Lake-LP SMBus Controller
# /0/100/1f.5 bus Ice Lake-LP SPI Controller
# /0/1 scsi0 storage NVMe SSD Controller SM981/PM981/PM983
# /0/1/0.0.0 /dev/nvme0n1 disk 512GB NVMe SSD
# /0/1/0.0.0/1 /dev/nvme0n1p1 volume 511MiB Windows FAT volume
# /0/1/0.0.0/2 /dev/nvme0n1p2 volume 99MiB reserved partition
# /0/1/0.0.0/3 /dev/nvme0n1p3 volume 476GiB EXT4 volume
# /0/2 scsi1 storage AHCI Controller
# /0/2/0.0.0 /dev/sda disk 1TB HDD
# /0/2/0.0.0/1 /dev/sda1 volume 1TB EXT4 volume
只显示指定类别的硬件信息:
# 只显示CPU信息
sudo lshw -class processor
# 只显示内存信息
sudo lshw -class memory
# 只显示网络设备信息
sudo lshw -class network
# 只显示存储设备信息
sudo lshw -class storage
# 只显示显示设备信息
sudo lshw -class display
# 显示多个类别的信息
sudo lshw -class processor -class memory
# 使用短选项
sudo lshw -C processor
sudo lshw -C memory
sudo lshw -C network
显示硬件设备的总线信息:
# 显示总线信息
sudo lshw -businfo
# 示例输出:
# Bus info Device Class Description
# =====================================================
# system Laptop
# bus Motherboard
# memory 128KiB BIOS
# memory 16GiB System Memory
# processor Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz
# bridge Ice Lake-LP Processor Host Bridge/DRAM Registers
# display Iris Plus Graphics G7
# generic Ice Lake-LP Processor Imaging Unit
# generic Intel Corporation
# usb@1 usb1 bus xHCI Host Controller
# usb@2 usb2 bus xHCI Host Controller
# bus Ice Lake-LP Serial IO I2C Controller #0
# bus Ice Lake-LP Serial IO I2C Controller #1
# communication Ice Lake-LP Management Engine Interface
# storage Ice Lake-LP SATA Controller [AHCI mode]
# pci@0000:00:1c.0 wlp0s20f3 network Wi-Fi 6 AX201
# pci@0000:00:1d.0 nvme0 storage NVMe SSD Controller SM981/PM981/PM983
# bridge Ice Lake-LP LPC Controller
# multimedia Ice Lake-LP Smart Sound Technology Audio Controller
# bus Ice Lake-LP SMBus Controller
# bus Ice Lake-LP SPI Controller
# scsi@0:0.0.0 /dev/nvme0n1 disk 512GB NVMe SSD
# scsi@1:0.0.0 /dev/sda disk 1TB HDD
显示完整的硬件详细信息:
# 显示完整的硬件信息(非常详细)
sudo lshw
# 显示特定设备的详细信息
sudo lshw -c network -sanitize
# 示例输出(网络设备部分):
# *-network
# description: Wireless interface
# product: Wi-Fi 6 AX201
# vendor: Intel Corporation
# physical id: 0
# bus info: pci@0000:00:1c.0
# logical name: wlp0s20f3
# version: 1a
# serial: [REMOVED]
# width: 64 bits
# clock: 33MHz
# capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical wireless
# configuration: broadcast=yes driver=iwlwifi driverversion=5.15.0-46-generic firmware=63.c04f3485.0 QuZ-a0-jf-b0-63.ucode ip=192.168.1.100 latency=0 link=yes multicast=yes wireless=IEEE 802.11
# resources: irq:16 memory:a421c000-a421ffff
以JSON、HTML或XML格式输出硬件信息:
# 以JSON格式输出
sudo lshw -json
# 以HTML格式输出(可保存到文件)
sudo lshw -html > hardware_info.html
# 以XML格式输出
sudo lshw -xml > hardware_info.xml
# 清理输出中的敏感信息
sudo lshw -sanitize
# 显示数字ID
sudo lshw -numeric
# 组合多个选项
sudo lshw -short -sanitize
sudo lshw -json -sanitize
在脚本中提取特定的硬件信息:
#!/bin/bash
# 脚本1:系统硬件概要
echo "=== 系统硬件概要 ==="
echo "生成时间: $(date)"
echo ""
# 获取系统信息
echo "1. 系统信息:"
sudo lshw -c system -short 2>/dev/null | head -5
# 获取CPU信息
echo ""
echo "2. CPU信息:"
sudo lshw -c processor 2>/dev/null | grep -E "product|vendor|clock|cores" | head -10
# 获取内存信息
echo ""
echo "3. 内存信息:"
sudo lshw -c memory 2>/dev/null | grep -E "size|description" | grep -v "BIOS"
# 获取磁盘信息
echo ""
echo "4. 磁盘信息:"
sudo lshw -c disk 2>/dev/null | grep -E "product|logical name|size"
# 获取网络设备信息
echo ""
echo "5. 网络设备:"
sudo lshw -c network 2>/dev/null | grep -E "description|logical name|product"
# 脚本2:检查硬件兼容性
check_hardware_compatibility() {
echo "硬件兼容性检查:"
echo "================"
# 检查CPU虚拟化支持
if sudo lshw -c processor 2>/dev/null | grep -q "vmx\|svm"; then
echo "CPU虚拟化: 支持"
else
echo "CPU虚拟化: 不支持"
fi
# 检查内存大小
MEMORY_SIZE=$(sudo lshw -c memory 2>/dev/null | grep -i "size" | grep -i "GiB" | head -1 | grep -o "[0-9]*")
if [ -n "$MEMORY_SIZE" ] && [ "$MEMORY_SIZE" -ge 8 ]; then
echo "内存大小: ${MEMORY_SIZE}GB ✅ 满足要求"
else
echo "内存大小: ${MEMORY_SIZE}GB ⚠️ 建议至少8GB"
fi
# 检查磁盘类型
if sudo lshw -c disk 2>/dev/null | grep -qi "ssd\|nvme"; then
echo "磁盘类型: SSD ✅"
else
echo "磁盘类型: HDD ⚠️ 建议使用SSD提升性能"
fi
}
check_hardware_compatibility
# 脚本3:生成硬件清单
echo ""
echo "生成硬件清单..."
HARDWARE_REPORT="/tmp/hardware_report_$(date +%Y%m%d_%H%M%S).txt"
cat > $HARDWARE_REPORT << EOF
硬件清单报告
============
生成时间: $(date)
系统信息:
$(sudo lshw -c system 2>/dev/null | grep -E "product|vendor|serial" | head -5)
CPU信息:
$(sudo lshw -c processor 2>/dev/null | grep -E "product|vendor|clock|cores" | head -10)
内存信息:
$(sudo lshw -c memory 2>/dev/null | grep -E "size|description" | grep -v "BIOS" | head -10)
磁盘信息:
$(sudo lshw -c disk 2>/dev/null | grep -E "product|logical name|size" | head -10)
网络设备:
$(sudo lshw -c network 2>/dev/null | grep -E "description|logical name|product" | head -10)
显示设备:
$(sudo lshw -c display 2>/dev/null | grep -E "product|vendor|description" | head -5)
EOF
echo "硬件清单已保存到: $HARDWARE_REPORT"
# 检查未识别的硬件
echo "未识别的硬件设备:"
sudo lshw 2>/dev/null | grep -B2 -A2 "UNCLAIMED"
# 检查硬件冲突
echo "硬件资源冲突检查:"
sudo lshw -businfo 2>/dev/null | grep -E "pci@|usb@"
# 检查中断冲突
cat /proc/interrupts | sort -n
# 检查DMA通道
cat /proc/dma
# 检查I/O端口
cat /proc/ioports | head -20
# 结合grep过滤特定信息
sudo lshw | grep -A5 -B5 "network"
sudo lshw | grep -i "size" | grep -i "memory"
# 结合jq处理JSON输出
sudo lshw -json 2>/dev/null | jq '.children[].children[] | select(.class=="processor")'
# 结合awk提取特定字段
sudo lshw -short 2>/dev/null | awk '$3=="memory" {print $4}'
# 结合sort和uniq统计设备数量
sudo lshw -short 2>/dev/null | awk '{print $3}' | sort | uniq -c | sort -nr
# 结合tee保存输出
sudo lshw -short | tee hardware_summary.txt
# 结合less分页查看
sudo lshw | less
# 结合wc统计信息量
sudo lshw | wc -l
| 字段 | 说明 | 示例 |
|---|---|---|
| description | 设备描述 | Wireless interface |
| product | 产品名称/型号 | Wi-Fi 6 AX201 |
| vendor | 厂商名称 | Intel Corporation |
| physical id | 物理ID | 0 |
| bus info | 总线信息 | pci@0000:00:1c.0 |
| logical name | 逻辑名称(设备文件) | wlp0s20f3 |
| version | 版本号 | 1a |
| serial | 序列号 | 00:11:22:33:44:55 |
| size | 大小/容量 | 16GiB |
| capacity | 容量 | 512GB |
| width | 总线宽度 | 64 bits |
| clock | 时钟频率 | 33MHz |
| capabilities | 设备能力/特性 | pm msi pciexpress msix bus_master cap_list ethernet physical wireless |
| configuration | 配置信息 | broadcast=yes driver=iwlwifi driverversion=5.15.0-46-generic |
| resources | 资源分配 | irq:16 memory:a421c000-a421ffff |
#!/bin/bash
# 脚本1:硬件变化检测
PREV_HW_HASH="/tmp/lshw_hash.prev"
CURRENT_HW_HASH="/tmp/lshw_hash.current"
# 生成当前硬件哈希
sudo lshw -short -sanitize 2>/dev/null | md5sum > $CURRENT_HW_HASH
if [ -f "$PREV_HW_HASH" ]; then
if cmp -s "$PREV_HW_HASH" "$CURRENT_HW_HASH"; then
echo "硬件配置未发生变化"
else
echo "⚠️ 硬件配置已发生变化!"
echo "变化摘要:"
# 这里可以添加更详细的比较逻辑
diff -u "$PREV_HW_HASH" "$CURRENT_HW_HASH" | head -20
fi
else
echo "首次运行,已保存硬件配置快照"
fi
# 保存当前哈希作为下一次比较的基准
cp "$CURRENT_HW_HASH" "$PREV_HW_HASH"
# 脚本2:硬件兼容性检查(针对特定应用)
echo ""
echo "Docker兼容性检查:"
echo "================="
# 检查CPU虚拟化扩展
CPU_VIRT=$(sudo lshw -c processor 2>/dev/null | grep -o "vmx\|svm" | head -1)
if [ -n "$CPU_VIRT" ]; then
echo "✅ CPU支持硬件虚拟化 ($CPU_VIRT)"
else
echo "❌ CPU不支持硬件虚拟化"
fi
# 检查内存大小(Docker建议至少2GB)
TOTAL_MEM=$(sudo lshw -c memory 2>/dev/null | grep -i "size:" | grep -i "GiB" | head -1 | grep -o "[0-9]*")
if [ -n "$TOTAL_MEM" ] && [ "$TOTAL_MEM" -ge 2 ]; then
echo "✅ 内存大小: ${TOTAL_MEM}GB"
else
echo "⚠️ 内存可能不足: ${TOTAL_MEM}GB (建议至少2GB)"
fi
# 检查存储空间(Docker建议至少20GB)
TOTAL_DISK=$(sudo lshw -c disk 2>/dev/null | grep -i "size:" | head -1 | grep -o "[0-9]*")
if [ -n "$TOTAL_DISK" ] && [ "$TOTAL_DISK" -ge 20 ]; then
echo "✅ 磁盘空间充足: ${TOTAL_DISK}GB"
else
echo "⚠️ 磁盘空间可能不足: ${TOTAL_DISK}GB (建议至少20GB)"
fi
# 脚本3:生成服务器资产清单
echo ""
echo "生成服务器资产清单..."
ASSET_REPORT="/tmp/server_assets_$(date +%Y%m%d_%H%M%S).csv"
# 创建CSV文件头
echo "Category,Type,Manufacturer,Model,Serial,Size,Location" > $ASSET_REPORT
# 提取系统信息
SYSTEM_INFO=$(sudo lshw -c system 2>/dev/null)
SYSTEM_MANUFACTURER=$(echo "$SYSTEM_INFO" | grep "vendor" | head -1 | cut -d: -f2 | xargs)
SYSTEM_MODEL=$(echo "$SYSTEM_INFO" | grep "product" | head -1 | cut -d: -f2 | xargs)
SYSTEM_SERIAL=$(echo "$SYSTEM_INFO" | grep "serial" | head -1 | cut -d: -f2 | xargs)
echo "System,Server,$SYSTEM_MANUFACTURER,$SYSTEM_MODEL,$SYSTEM_SERIAL,N/A,Data Center A" >> $ASSET_REPORT
# 提取CPU信息
sudo lshw -c processor 2>/dev/null | while read -r line; do
if echo "$line" | grep -q "product:"; then
CPU_MODEL=$(echo "$line" | cut -d: -f2 | xargs)
CPU_VENDOR=$(echo "$line" | grep "vendor" | cut -d: -f2 | xargs)
echo "Processor,CPU,$CPU_VENDOR,$CPU_MODEL,N/A,N/A,Mainboard" >> $ASSET_REPORT
fi
done
# 提取内存信息
sudo lshw -c memory 2>/dev/null | while read -r line; do
if echo "$line" | grep -q "size:" && echo "$line" | grep -q "GiB"; then
MEM_SIZE=$(echo "$line" | grep -o "size:[^ ]*" | cut -d: -f2)
MEM_DESC=$(echo "$line" | grep "description:" | cut -d: -f2 | xargs)
echo "Memory,DIMM,Unknown,$MEM_DESC,N/A,$MEM_SIZE,DIMM Slot" >> $ASSET_REPORT
fi
done
# 提取磁盘信息
sudo lshw -c disk 2>/dev/null | while read -r line; do
if echo "$line" | grep -q "product:"; then
DISK_MODEL=$(echo "$line" | cut -d: -f2 | xargs)
DISK_VENDOR=$(echo "$line" | grep "vendor" | cut -d: -f2 | xargs)
DISK_SIZE=$(echo "$line" | grep "size:" | cut -d: -f2 | xargs)
DISK_LOGICAL=$(echo "$line" | grep "logical name:" | cut -d: -f2 | xargs)
echo "Storage,Disk,$DISK_VENDOR,$DISK_MODEL,N/A,$DISK_SIZE,$DISK_LOGICAL" >> $ASSET_REPORT
fi
done
echo "资产清单已保存到: $ASSET_REPORT"
-sanitize选项# 1. lshw命令不存在
# 检查是否安装
which lshw
# 安装(如果需要)
# Ubuntu/Debian: sudo apt-get install lshw
# RHEL/CentOS: sudo yum install lshw
# 2. 权限不足
# 使用sudo运行
sudo lshw
# 或添加用户到sudoers(不推荐生产环境)
# sudo visudo
# 添加: username ALL=(ALL) NOPASSWD: /usr/bin/lshw
# 3. 信息不完整
# 检查DMI表访问权限
sudo dmidecode -t 1
# 如果dmidecode失败,检查BIOS设置中的DMI选项
# 检查内核消息
dmesg | grep -i "dmi\|acpi"
# 4. 特定硬件未显示
# 检查内核模块是否加载
lsmod | grep -i "相关的模块名"
# 加载可能需要的模块
sudo modprobe pci-stub
sudo modprobe usb-storage
# 5. 更新硬件数据库
# 某些发行版有硬件数据库
sudo update-pciids # 更新PCI设备数据库
sudo update-usbids # 更新USB设备数据库
# 6. 使用详细模式调试
sudo lshw -debug
# 7. 检查硬件是否被内核识别
cat /proc/cpuinfo
cat /proc/meminfo
lspci -vv
lsusb -v
# 8. 检查ACPI表
sudo acpidump
# 或安装acpica-tools后使用
sudo acpixtract -a
# 9. 比较不同硬件检测工具
sudo dmidecode
sudo lspci -vv
sudo lsusb -v
sudo lscpu
sudo lsblk
# 比较这些命令的输出