商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > Linux怎么查看硬件序列号

Linux怎么查看硬件序列号

  发布于2026-08-16 阅读(0)

扫一扫,手机访问

在 Linux 里查硬件序列号,并不存在一条“放之四海而皆准”的命令,通常得按具体部件分别处理:查整机序列号可用sudo dmidecode -t system,查主板可用sudo dmidecode -t baseboard,查硬盘可用sudo udevadm info --name=/dev/sda | grep -i "id_serial",查内存则用sudo dmidecode -t memory;另外,这类查询在多数情况下都需要root权限。

Linux怎么查看硬件序列号

Linux 查硬件序列号没有“一条命令通吃”的解法,不同部件必须用不同工具、不同路径,且多数情况需要 root 权限——不加 sudo 就跑 dmidecode,基本等于白跑。

查整机/系统序列号:优先用 dmidecode -t system,但得看 BIOS 填没填

这是最常被问到的“主机序列号”,实际对应 SMBIOS Type 1 表项。执行:

sudo dmidecode -t system | grep -E "Serial Number|UUID"

注意几个现实问题:

  • 输出是 Serial Number: NoneTo be filled by O.E.M.?不是命令错了,是 BIOS 固件根本没写——换任何工具都一样
  • 虚拟机(VMware/KVM)返回 VMware-xxxx 或全 0 的 UUID,不能当物理资产编号用
  • /sys/class/dmi/id/product_serial 可免 root 读,但 Ubuntu 22.04+ 默认禁止非 root 访问,报 Permission denied 就得切回 sudo dmidecode
  • 别用模糊匹配如 dmidecode | grep -i serial——容易把内存条(Type 17)或主板(Type 2)的 Serial Number 混进来

查主板序列号:dmidecode -t baseboard 是唯一直接来源

主板序列号和系统序列号可能不同(尤其 OEM 整机),必须单独查 Type 2(Base Board):

sudo dmidecode -t baseboard | grep -E "Manufacturer|Product Name|Serial Number"

关键细节:

  • 字段名就是 Serial Number:,不是 serial:Board Serial:,别被 lshw 的输出格式带偏
  • 同样会遇到 Serial Number: Not Specified——消费级主板、部分工控机 BIOS 压根不填,不是权限或命令问题
  • /sys/class/dmi/id/board_serial 文件不一定存在;存在也不保证可读(加固系统常禁掉)
  • 怀疑 BIOS 填错或漏填时,可用 sudo lshw -class motherboard | grep -E "vendor:|product:|serial:" 交叉验证,lshw 会融合 ACPI 等其他固件区数据

查硬盘序列号:别碰 lsblk,改用 udevadmsmartctl

lsblk/proc/mounts 完全不提供序列号,/sys/block/sda/device/serial 在很多 NVMe/SATA 设备上为空或根本不存在。

可靠路径分三类:

  • 通用首选:sudo udevadm info --name=/dev/sda | grep -i "id_serial|id_model" ——基于 udev 数据库,覆盖 SATA/NVMe/USB
  • NVMe 盘:sudo smartctl -i /dev/nvme0n1 | grep "Serial Number"(需先 apt install smartmontools
  • SATA 盘 fallback:sudo hdparm -I /dev/sda | grep "Serial Number" ——部分驱动支持,但成功率低于 udevadm

注意:USB 移动盘的序列号常来自设备描述符,udevadm 仍是最稳选择;smartctl 对 USB-SATA 桥接芯片支持有限。

查内存条序列号:dmidecode -t memory 能读但别太信

free/proc/meminfo 只管逻辑容量,完全不含物理 DIMM 的型号或序列号。

dmidecode -t memory 是唯一能从 SPD 获取序列号的途径,但现实很骨感:

  • 消费级主板上 Serial Number 字段基本为空;OEM 服务器(Dell/HP)常填 00000000,这不是 bug,是 SPD 芯片本身没提供或 BIOS 拒绝写入
  • 输出混着空插槽(Size: No Module Installed),建议过滤:sudo dmidecode -t memory | awk '/Memory Device$/,/^$/ { if (/Size:/ && !/No Module/) print; if (/Bank Locator:|Part Number:|Serial Number:/) print }'
  • Supermicro 主板启用 ECC 后,dmidecode 可能合并多条内存输出导致序列号错位,此时 sudo lshw -class memory 更可信

真正棘手的,往往不是命令本身怎么执行,而是 BIOS 里根本没有把信息写进去。尤其是接手二手整机或虚拟机时,动手查之前最好先把场景判断清楚:如果是物理服务器,就重点看 dmidecode -t baseboard;如果是 OEM 整机,建议再配合 lshw 交叉比对;要是在容器环境里,就别再死磕 DMI 了,直接改查硬盘信息或网卡 MAC,作为替代标识更实际。

本文转载于:https://www.php.cn/faq/2993798.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注