可用sudo dmidecode -s system-serial-number查序列号,需root权限;无dmidecode时可用lshw或/sys/class/dmi/id/product_serial;云服务器返回的是虚拟实例ID而非物理序列号。

直接用 dmidecode 查序列号,但得有 root 权限
普通用户执行 dmidecode 会报错:Cannot access SMBIOS data: Operation not permitted。因为 BIOS/DMI 信息在内核态,需要读取 /dev/mem,而该设备默认只允许 root 访问。
实操建议:
- 加
sudo运行:sudo dmidecode -s system-serial-number - 如果只想看序列号,别用
sudo dmidecode | grep -i serial—— 输出太杂,可能匹配到主板、CPU 等其他串号 - 部分精简系统(如某些容器或云镜像)没装
dmidecode,先确认是否存在:which dmidecode
dmidecode -s 支持的常用字段有哪些
dmidecode -s 后接关键字可快速提取特定字段,比全文解析更稳。但字段名大小写敏感,且不同 BIOS 厂商可能略作差异(比如 Dell 用 system-serial-number,HP 有时也认 serial-number)。
最常用且兼容性较好的字段:
- 整机序列号:
system-serial-number - 制造商:
system-manufacturer - 型号:
system-product-name - 主板序列号:
baseboard-serial-number - BIOS 版本:
bios-version
不确定字段名时,先跑 sudo dmidecode -t system 看完整 section,再找对应关键词。
没有 dmidecode 怎么办?试试 lshw 或 /sys 路径
有些最小化系统(如 Alpine、CoreOS)不带 dmidecode,也禁用了 /dev/mem,这时得换路子。
替代方案优先级:
- 装
lshw(轻量,多数发行版源里有):sudo lshw -class system | awk '/serial:/ {print $2}' - 查
/sys(无需 root,但不一定存在):cat /sys/class/dmi/id/product_serial 2>/dev/null—— 这个路径在较新内核(≥3.10)且启用 DMI 支持时才有效 - 避免用
sudo cat /proc/sys/kernel/osrelease这类——那是内核版本,不是硬件序列号
云服务器上看到的序列号往往是虚拟的
在 AWS EC2、阿里云 ECS、腾讯云 CVM 上执行 sudo dmidecode -s system-serial-number,返回的通常是 ec2、alibaba 或一串随机字符串(如 742a5d6b-1f8c-4e9a-b2a3-c4d5e6f7a8b9),这不是物理机序列号,而是云平台生成的实例唯一标识。
这意味着:
- 不能靠它反查硬件保修信息
- 同一台宿主机上的多个虚机,
baseboard-serial-number可能相同,但system-serial-number不同 - 若需区分实例,优先用云厂商提供的元数据服务(如
curl http://169.254.169.254/latest/meta-data/instance-id)
物理机和云服务器混用脚本时,记得加判断逻辑——别把虚拟序列号当真实资产编号入库。










