linux下获取服务器物理序列号的可靠方法包括:一、用sudo dmidecode -s system-serial-number读取smbios;二、读取/sys/class/dmi/id/product_serial;三、用sudo lshw -short -class system筛选;四、arm平台用sudo fw_printenv查u-boot变量;五、调用ibm/lenovo等厂商专用工具。

如果您需要在Linux系统中获取服务器的物理序列号(SN),该信息通常由硬件制造商写入BIOS或UEFI固件,或存储在主板的DMI/SMBIOS表中。以下是多种可靠的方法来查询系统序列号:
一、使用dmidecode命令读取SMBIOS信息
dmidecode工具可直接解析系统底层的DMI(Desktop Management Interface)数据,其中包含制造商、型号及序列号等关键硬件标识字段。该命令需root权限运行,且依赖系统已正确加载DMI表。
1、以root用户身份执行命令:sudo dmidecode -s system-serial-number
2、若需查看完整系统信息并筛选序列号行,可执行:sudo dmidecode -t system | grep "Serial Number"
3、为防止敏感信息泄露,建议仅使用-s参数指定字段,避免输出全部DMI结构。
二、通过sysfs接口获取Dell/HP等厂商预置序列号
部分服务器厂商(如Dell、HPE)会在/sys/class/dmi/id/路径下提供符号链接形式的标准化序列号文件,无需特权即可读取,但依赖内核对DMI的支持及厂商固件实现。
1、检查是否存在序列号文件:cat /sys/class/dmi/id/product_serial
2、若返回为空或“Not Specified”,说明该路径未被厂商填充或当前固件未启用此功能。
3、可同时尝试读取其他相关字段验证路径可用性:ls /sys/class/dmi/id/ | grep -E "(serial|product)"
三、使用lshw命令提取硬件摘要
lshw是一个详尽的硬件信息探测工具,能以简洁格式输出系统识别信息,包括序列号(若BIOS提供)。其输出结构清晰,适合脚本化调用。
1、安装lshw(如未预装):sudo apt install lshw(Debian/Ubuntu)或sudo yum install lshw(RHEL/CentOS)
2、以简明模式获取系统序列:sudo lshw -short -class system | grep -i serial
3、或使用JSON格式便于程序解析:sudo lshw -json | jq -r '.children[] | select(.class=="system") | .configuration.serial'
四、调用fw_printenv读取U-Boot环境变量(ARM服务器适用)
在基于U-Boot引导的ARM架构服务器上,序列号可能作为环境变量固化在SPI Flash中。fw_printenv可安全读取该变量,无需修改固件。
1、确认fw_printenv工具已安装:which fw_printenv
2、查找常见序列号变量名:sudo fw_printenv | grep -i "serial\|sn\|id"
3、若发现变量如"sn_number",执行:sudo fw_printenv sn_number
五、检查厂商专用工具输出(IBM/Lenovo/Inspur)
部分OEM服务器提供专有CLI工具,例如Lenovo XClarity Essentials或Inspur NMI工具,这些工具可绕过标准接口直接访问BMC或CPLD寄存器中的序列号,适用于标准命令失效场景。
1、下载对应厂商最新工具包并解压到临时目录。
2、赋予执行权限:chmod +x ./imm_cli(以Lenovo IMM CLI为例)
3、连接本地BMC并查询:./imm_cli -i 127.0.0.1 -u USERID -p PASSW0RD get_asset_info | grep "Serial"










