dmidecode -t memory 是唯一能获取内存品牌和频率原始数据的命令,因其直接读取BIOS/UEFI固件中的SPD信息,而free、/proc/meminfo和lscpu不包含这些字段;需sudo权限,虚拟机中通常无效。

Linux怎么查看具体内存条的品牌和频率

dmidecode -t memory 是唯一能拿到品牌和频率原始数据的命令

别指望 free/proc/meminfolscpu,它们压根不存品牌和频率字段。只有 dmidecode -t memory 直接读 BIOS/UEFI 固件里的 SPD 数据,Manufacturer:Part Number:Speed: 这些字段才是真实硬件标签。但必须加 sudo,否则报 Cannot access SMBIOS data;虚拟机里基本无效,因为 SMBIOS 内存信息通常不透传。

为什么 grep Speed: 总是漏掉或拼错

常见的报错表现一般有两种:一类是输出里明明有 Speed:,可它就是和眼前看到的 Part Number: 对不上;另一类更直接,干脆连 Speed: 这一行都没有。这里先别急着怀疑命令失效,问题往往不在命令本身,而在于字段被拆到不同的 Handle 块里混排了。举个典型情况,像 Slot: DIMM_A1Speed: 3200 MT/s,很可能分别来自两个 Handle,也就是主块 Handle 0x001A 和子块 Handle 0x001B;这时候 grep 就会把 A 槽的型号和 B 槽的频率硬生生拼到一起,看起来像是对应关系出了问题。

用 awk 按 Handle 分组提取才靠谱

这条命令已在 2026 年主流发行版验证过,能确保同一内存条的 Slot:Size:Part Number:Speed: 不串场:

sudo dmidecode -t memory | awk '/^Handle / {if (size && speed && part) print slot, size, part, speed; slot=""; size=""; speed=""; part=""} /Slot:/ {slot=$0} /Size: [0-9]+ [MG]B$/ {size=$0} /Part Number:/ {part=$0} /Speed:/ {speed=$0} END {if (size && speed && part) print slot, size, part, speed}' | grep -v "No Module Installed"

它做了三件事:

典型输出:Slot: DIMM_A1 Size: 16 GB Part Number: M471A2K43CB1-CTD Speed: 3200 MT/s

当 dmidecode 报 Permission denied 或全是 Not Specified 时

说明系统禁用了 /dev/mem 访问,或固件未写入完整 SPD。可切换备用方案:

很多人恰恰会忽略这一点:就算 Speed: 字段明明写着数值,它反映的也只是 JEDEC 标称规格;内存最终到底跑在什么频率,还是得去 BIOS 里看 Configured Memory Speed:。这里面会同时受到 XMP/EXPO 是否开启、双通道是否匹配,以及 CPU 内存控制器上限的影响——所以,一条标称 3200MHz 的内存,插在 B550 主板上实际只跑到 2933MHz,并不意味着出故障了。

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