如何在 Linux 中快速获取服务器硬件的完整信息
你 SSH 登录到一台陌生的服务器,试图弄清楚里面到底有什么。主板是什么型号,有多少内存插槽被占用,内存运行在什么频率,磁盘是什么模式。
通常你最终会使用一系列零散的命令:lspci、lsusb、dmidecode、lscpu 或读取 /proc 中的文件。最后,你只能坐在那里在脑海中拼凑出整体画面。
lshw 工具(硬件列表工具)完全解决了这个日常问题。它将计算机配置数据收集到一个统一的硬件树中。而且它不仅可以在控制台中完成,还支持导出为 XML 或 HTML 等现成格式。
lshw 能做什么
该程序通过多个来源扫描系统:在 x86 和 EFI 上查询 DMI (SMBIOS),读取 CPUID,解析 PCI/AGP、USB、SCSI 和 IDE/ATA 总线列表,在 PowerPC 架构上读取 OpenFirmware 设备树。
最终你会得到一份详细的报告,列出所有硬件:
- 精确的内存布局:时序、每个模块的容量、已占用的插槽和支持的最大容量。
- BIOS/UEFI 固件版本和主板修订版。
- 处理器配置、支持的功能指令、总线频率和各级缓存大小。
- 存储控制器、网卡和已连接的外设,以及它们使用的内核驱动程序。
额外的好处是,这个工具不仅仅输出原始设备 ID——它还会从本地数据库 hwdata 和 /usr/share/misc/ 中提取可读的名称。
输出格式和实际应用场景
如果不带参数运行 lshw,纯文本输出有时会显得太长。但它有灵活的参数选项,让管理员和基础设施开发者的工作轻松很多。
紧凑摘要
当你需要快速了解整体情况,而不想面对无尽的文字时,简短模式就派上用场了:
sudo lshw -short
它会输出一个整洁的表格,显示每个节点的状态、设备路径和组件的简要描述。
生成 HTML 报告
如果你需要与同事分享硬件清单,或者将服务器状态附加到工单中,只需一条命令就能生成一个漂亮的 HTML 文件:
sudo lshw -html > server_spec.html
这样的报告可以直接在浏览器中查看,包含清晰的可折叠部分,视觉上也能区分控制器和子设备。
通过 XML 和 JSON 实现自动化
对于资产清单脚本或自动机器审计,该工具可以输出原始的结构化数据:
sudo lshw -xml > hardware.xml
这个 XML 很容易用 Python 解析,或者在搭建新服务器时导入到 CMDB 数据库中。
编译和内部原理
该项目使用 C++ 编写,历史悠久。代码即使使用旧版本的编译器也能编译,而且不需要繁重的依赖项。
你实际上只需要几秒钟就能从源代码编译出二进制文件:
make
sudo make install
如果你正在构建一个用于系统恢复(救援磁盘)的精简镜像,lshw 可以静态编译或使用 UPX 压缩,使二进制文件几乎不占空间:
make static
make compressed
对于 GUI 爱好者,有一个 lshw-gtk 版本可用(通过 make gui 构建),但在实践中控制台版本已经足够了。
谁会发现它有用
这个工具对于那些只使用容器或无服务器函数的人来说可能不是必需的。但如果你在搭建物理服务器、构建家庭服务器、诊断内存模块检测问题,或者编写资产清单脚本来管理大量机器,lshw 会节省大量时间。只需用 root 权限运行一次,你就能准确知道机箱里安装了哪些硬件。
相关项目