ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux硬件信息查看实战:CPU、内存、磁盘与系统排查指南

Linux硬件信息查看实战:CPU、内存、磁盘与系统排查指南 刚接手一台新服务器或者别人留下的旧机器时我最常被问到的问题就是“这机器到底是什么配置”不管是装软件前确认架构、加内存前看插槽还是排查系统卡顿的瓶颈Linux下查看硬件信息都是绕不开的基本功。网上讲单个命令的文章很多但大多零散真正到了现场反而不知道先用哪个、输出该看哪一列。这篇就把我这些年实际干活时最常用的硬件信息查看命令和判断思路完整梳理一遍争取你看完就能直接对着自己的机器开测。这个主题适合三类人一是刚接触 Linux 的新手想把“查看配置”这件事一次搞明白二是运维和开发需要在排查问题时快速定位 CPU、内存、磁盘、网卡的现状三是玩嵌入式或国产系统的朋友需要确认架构、外设识别情况。下面所有命令我都按“什么时候用、输出怎么看、常见坑是什么”来讲尽量少说废话。1. 整体思路设计与命令选型1.1 硬件信息从哪里来虚拟文件系统与工具的关系Linux 下查看硬件信息本质上就两条路直接读内核暴露的接口或者用工具去读这些接口。内核启动并识别硬件后会把设备信息、运行时状态挂载到/proc和/sys这两个虚拟文件系统里。/proc/cpuinfo存的是 CPU 详细信息/proc/meminfo存的是内存使用情况/sys/class下面按设备类型组织了各种硬件节点。这些文件不是真实存在于磁盘上的而是内核实时生成的“数据出口”。你执行cat /proc/cpuinfo其实就是让内核把当前 CPU 的状态打印给你看。像lscpu、free、dmidecode、lshw这类命令本质上是这些虚拟文件的“格式化阅读器”。它们替你把原始字段整理成人类能看懂的样子有的还会额外调用内核接口获取 DMI 表等固件数据。理解这层关系之后遇到“命令输出为空”或“信息对不上”的情况你就知道该往哪个方向排查是工具问题还是内核根本不认识这个设备。打个比方/proc和/sys相当于医院的实时体检仪器各种命令是给你出报告的医生。仪器本身出了问题换再好的医生也白搭。1.2 该看哪些维度一张清单理清需求很多人记不住命令是因为脑子里没有分类。硬件信息我习惯分成七个维度每个维度记一到两个主力命令就够了维度主力命令常见需求场景CPU 型号与核数lscpu、cat /proc/cpuinfo下载软件选架构、判断核数是否够用内存容量与插槽free -h、dmidecode -t memory加内存前查插槽和频率、排查内存不足磁盘与分区lsblk、df -hT看还剩多少空间、确认盘符对应关系磁盘健康状态smartctl服务器频繁 IO 报错、怀疑坏道网卡与网络状态ip link、ethtool确认网卡速率、查 link 是否 up主板/整机序列号dmidecode -t system资产盘点、保修查询GPU/PCI/USB 外设lspci、lsusb装显卡驱动前确认型号、查外设是否识别这七个维度基本覆盖了日常 90% 的需求。遇到具体问题时先想清楚“我现在是要查哪一类”再去翻对应命令思路会顺很多。1.3 我的个人选型建议说实话我不建议你一口气记住十几个命令。日常干活我真正高频使用的是下面这套“组合拳”uname -a快速看内核版本和架构lscpu看 CPU 概览free -h看内存大小和剩余量lsblk看磁盘和分区结构df -hT看挂载点空间ip addr看 IP 和网卡状态dmidecode -t system看整机序列号和厂商这七个命令能覆盖我 80% 以上的硬件信息需求。剩下的lspci、lsusb、smartctl、ethtool属于“按需调用”用到时再查参数就行。还有一点要注意不同发行版预装的工具不一样。CentOS/RHEL 系列默认装了lscpu、lsblk但dmidecode、lspci可能要自己装Ubuntu/Debian 系列相对全一些轻量发行版比如 Alpine 可能连lsblk都没有得先apk add util-linux。遇到 command not found 别慌不是系统坏了是包没装。2. 核心细节与实操要点2.1 CPU 信息lscpu 与 /proc/cpuinfo 配合解读先看lscpu的输出$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 Model name: Intel(R) Core(TM) i5-6500 CPU 3.20GHz CPU MHz: 3399.998 CPU max MHz: 3600.0000 CPU min MHz: 800.0000我最先看三个字段Architecture、CPU(s)、Model name。Architecture决定了你下载的软件包是 x86_64 还是 arm64CPU(s)是逻辑核数不是物理核数Model name是具体型号可以用来搜索这颗 CPU 支持什么指令集、支持多大内存。如果看到Thread(s) per core大于 1说明开了超线程。比如 2 核 4 线程CPU(s)会显示 4但物理核其实是 2。判断物理核数要用Core(s) per socket乘以Socket(s)。/proc/cpuinfo适合看更原始的信息特别是要确认每个逻辑核对应哪个物理核时$ cat /proc/cpuinfo | grep -E processor|physical id|core id processor : 0 physical id : 0 core id : 0 processor : 1 physical id : 0 core id : 1processor是逻辑 CPU 编号physical id是物理 CPU 插槽编号core id是物理核编号。同一颗物理核上的两个超线程physical id和core id都是相同的只是processor不同。注意在虚拟机和容器里lscpu显示的 CPU 信息可能是“虚拟化后的结果”不代表宿主机真实型号。云服务器尤其明显你看到的Model name可能是虚拟 CPU 的型号。想确认是不是虚拟机后面讲dmidecode时会提到。2.2 内存信息free、dmidecode、/proc/meminfo 三件套free -h是最常用的内存查看命令$ free -h total used free shared buff/cache available Mem: 7.6Gi 2.1Gi 1.2Gi 12Mi 4.3Gi 5.0Gi Swap: 2.0Gi 0B 2.0Gi新手最容易看懵的是used和available。used是“系统已分配给进程的内存”buff/cache是内核用空闲内存做缓存的部分这部分在内存紧张时可以自动释放。所以判断“内存够不够用”要看available而不是free。free列只代表“完全没有被使用的内存”在 Linux 下通常很小这是正常的。dmidecode -t memory用来查物理内存条信息加内存前必看$ dmidecode -t memory | grep -E Size|Type:|Speed|Locator|Manufacturer Size: 8 GB Type: DDR4 Speed: 2666 MT/s Locator: DIMM_A1 Manufacturer: Kingston重点关注Locator插槽位置和Size。如果你看到某个插槽的Size: No Module Installed说明这个插槽是空的可以扩展。Speed代表内存条运行频率混插不同频率的内存时系统通常会按较低频率运行。/proc/meminfo是free的底层数据源$ grep MemTotal /proc/meminfo MemTotal: 7982920 kB这个文件字段非常丰富MemAvailable就是内核估算的“还能分配给新程序的内存”free里的 available 就是从这来的。排查内存泄漏时/proc/meminfo里的Slab、SReclaimable等字段反而比free更有参考价值。2.3 磁盘与分区lsblk、df、fdisk、smartctllsblk是我最依赖的磁盘命令树状输出非常直观$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 50G 0 part / └─sda3 8:3 0 414.8G 0 part /dataTYPE列为disk的是物理磁盘part是分区。MOUNTPOINTS显示挂载点能直接看出根目录、数据目录分别在哪个分区。加了-f参数还能看文件系统类型和 UUID$ lsblk -f NAME FSTYPE FSVER LABEL UUID MOUNTPOINTS sda ├─sda1 xfs 0.0 0 a1b2c3d4-... /bootdf -hT看的是挂载点的空间使用率$ df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 xfs 50G 23G 27G 47% / /dev/sda3 xfs 415G 200G 215G 49% /dataAvail是对普通用户可用的空间不是简单的Size - Used因为文件系统会预留一部分给 root。判断“磁盘满没满”就看Use%超过 90% 就该清理或扩容了。fdisk -l能看到磁盘更底层的信息比如扇区大小、磁盘型号。但注意新版本fdisk -l输出很长我一般只在其需要确认磁盘整体大小时才用。磁盘健康检查用smartctl$ smartctl -H /dev/sda SMART overall-health self-assessment test result: PASSED-H只查健康状态-a查看完整信息。如果系统日志里频繁出现 IO 错误或者dmesg里有I/O error字样怀疑磁盘快坏了可以先跑一次smartctl -H再做坏道检测。不过完整自检比较耗时建议放在业务低峰期执行。2.4 网络与 PCI 设备lspci、lsusb、ethtool、ip排查网络问题第一步是看网卡有没有被识别、链路是否正常$ ip link show 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 ... 2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 ...UP表示网卡启用LOWER_UP表示物理链路已连接。如果只有UP没有LOWER_UP网线或对端设备可能有问题。ethtool eth0查看网卡协商速率$ ethtool eth0 Speed: 1000Mb/s Duplex: Full服务器网卡莫名其妙慢十有八九是协商到了 100Mb/s 甚至 10Mb/s。如果显示Speed: Unknown!多半是驱动没加载好或链路异常。lspci查 PCI 总线上的设备装显卡驱动、确认网卡型号时常用$ lspci -nnk | grep -iA3 vga 00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 530 [8086:5912] Subsystem: Dell Device [1028:07e4] Kernel driver in use: i915-nnk会显示设备 ID 和内核加载的驱动模块。看到Kernel driver in use后面没有内容说明设备没有绑定驱动这就是驱动没装好。lsusb用来查 USB 设备$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver如果插了 U 盘或 USB 转串口设备没反应lsusb能迅速判断硬件是否被内核识别。看不到设备先查物理连接和供电看得到设备但无法使用再查驱动。2.5 主板、BIOS 与整机序列号dmidecode 的进阶用法dmidecode是查看物理硬件信息的“瑞士军刀”能读取主板的 DMI 表。几个高频用法# 查看整机厂商和序列号 $ dmidecode -t system Manufacturer: Dell Inc. Product Name: PowerEdge R740 Serial Number: ABC123456 UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # 查看 BIOS 版本 $ dmidecode -t bios Vendor: Dell Inc. Version: 2.12.2 Release Date: 06/28/2023 # 查看主板信息 $ dmidecode -t baseboard Manufacturer: Dell Inc. Product Name: 0W7PX8这些信息在资产盘点、保修查询、整机故障报修时非常有用。Product Name还能顺带确认这机器是不是虚拟机——如果显示VMware Virtual Platform或KVM基本可以断定是虚拟化环境。注意dmidecode需要 root 权限。普通用户执行时要么输出为空要么提示/dev/mem权限不足。如果sudo dmidecode都没有输出大概率是虚拟机或云主机屏蔽了 DMI 信息。3. 实操过程与核心环节实现3.1 半小时摸清一台陌生机器配置完整演示假设你刚接手一台没接触过的服务器最快摸清底细的方式是按下面这个顺序执行命令并把输出的关键字段记录下来。第一步看系统架构和内核$ uname -a Linux localhost 5.14.0-284.11.1.el9_2.x86_64 #1 SMP x86_64内核版本 5.14架构 x86_64这是 Red Hat 9 系列的系统。第二步看 CPU$ lscpu记录架构、核数、型号名。第三步看内存$ free -h记录总内存和 available确认剩余是否充足。第四步看磁盘$ lsblk $ df -hT确认盘符、分区、挂载点、使用率重点看根分区和家目录所在分区是否快满。第五步看网络$ ip addr $ ip route确认 IP、子网、网关是否正常顺便看默认路由有没有配错。第六步看整机信息$ dmidecode -t system确认厂商、型号、序列号判断是物理机还是虚拟机。这一套流程大约 5 分钟就能跑完输出信息足够支撑大部分决策。我习惯把这些输出重定向到一个文件里存档{ uname -a lscpu free -h lsblk -f df -hT ip addr dmidecode -t system } /tmp/hardware_info_$(date %Y%m%d).log后续出问题对照基线文件能快速发现硬件状态变化。3.2 升级内存前的硬件体检插槽与频率确认加内存是最常见的硬件升级操作但很多人买回来才发现插槽不够或频率不匹配。我通常按三步走。第一步确认当前内存条分布$ dmidecode -t memory | grep -E Locator|Size|Speed如果输出里Locator对应的Size是No Module Installed说明该插槽空闲。比如 4 插槽主板插了 2 条那就有两个空位。第二步确认支持的最大容量和类型。这一步dmidecode帮不了你要去主板手册或官网查或者看现有内存条的型号规格。特别提醒DDR3、DDR4、DDR5 物理接口不同不能混插买之前千万确认好代数。第三步确认当前运行频率。混插不同频率内存时系统一般按最低频率运行。你要买高频条子配旧低频条最终发挥的还是低频频率这钱花得不值。实际操作中还有两个容易踩的坑一是dmidecode输出的内存条数量可能包含处理器内置的内存控制器信息不用全信二是某些品牌机对非官方内存条有兼容性限制插上可能点不亮。加内存前最好先备份重要数据拔插内存时务必断电操作。3.3 系统卡顿与磁盘 IO 排查现场实录有一次线上数据库节点响应变慢监控面板看不出明显问题我登录机器后按这个顺序排查。先看整体负载和 CPU 占用$ top %Cpu(s): 5.1 us, 3.2 sy, 0.0 ni, 90.3 idCPU 很空闲但 load average 却很高说明大量进程在等待 IO。这时候直接看磁盘读写等待时间$ iostat -x 1 Device rrqm/s wrqm/s r/s w/s rMB/s wMB/s %util sda 0.00 12.00 8.00 56.00 0.02 0.50 98.30%util接近 100%磁盘基本处于饱和状态。进一步定位是哪个进程在大量写盘$ pidstat -d 1或者直接用iotop实时看进程级 IO。最后发现是日志轮转服务在压缩旧的日志文件压缩本来是好事但日志量太大导致压缩进程持续占满磁盘 IO。处理方案是把日志压缩任务挪到业务低峰期并限制并发数。说到这提醒一句遇到系统卡顿别急着怀疑硬件。先用top看 CPU、用free看内存、用iostat看 IO三步下来基本能锁定瓶颈方向。很多“硬件问题”其实是软件配置问题。3.4 编写一个简单的硬件巡检脚本思路与其每次手动敲命令不如写一个简单的巡检脚本。核心思路是把前面提到的命令结果整理成易读的格式执行后保存到日志。一个很朴素但实用的做法#!/bin/bash echo $(date) echo --- CPU --- lscpu | grep -E Model name|CPU\(s\)|Architecture echo --- Memory --- free -h | awk NR1 || NR2 echo --- Disk --- df -hT | grep -v tmpfs echo --- Network --- ip -br addr show echo --- Load --- uptime用awk只提取关键行避免日志太冗长。配合 crontab 每天早上跑一次30 8 * * * /opt/scripts/hardware_check.sh /var/log/hw_audit.log 21这样每天自动留下一条硬件状态记录出问题时往回翻日志能省去大半排查时间。注意脚本里如果用到了dmidecode需要 root 权限crontab 里要用 root 身份执行或者在脚本内部用 sudo。另外别把敏感信息比如序列号输出到权限过宽的文件里。4. 常见问题与排查技巧实录4.1 命令找不到怎么办需要安装哪些包执行lspci、dmidecode、smartctl时提示 command not found 很常见因为很多系统默认不装这些工具。按发行版区分# Debian/Ubuntu apt install dmidecode pciutils usbutils smartmontools lshw # RHEL/CentOS/Rocky/Alma yum install dmidecode pciutils usbutils smartmontools lshw # openEuler/麒麟等国产系统视包管理器而定通常兼容 yum 或 dnflscpu、lsblk、free属于 util-linux 包一般默认就有。如果连这些都没有说明系统被精简得比较狠装 util-linux 即可。4.2 为什么显示的信息和实际不符这是个高频困惑。在虚拟化环境里lscpu、free看到的是虚拟化层“允许你看到”的资源不是宿主机真实配置。判断当前环境是不是虚拟机看dmidecode -t system的Product NameVMware Virtual PlatformVMwareKVM或QEMU Standard PCKVM/QEMUVirtualBoxVirtualBoxXenXen如果是云服务器dmidecode可能直接不返回有效信息。这种情况下你查到的 CPU 核数、内存大小是云厂商分配给实例的配额不代表底层物理机规格。至于 Docker 容器情况更特殊。容器里执行cat /proc/cpuinfo、free -h看到的是宿主机内核的视图但可能被 cgroup 限制了配额。比如宿主机 32 核容器最多只能用 4 核nproc可能显示 4但/proc/cpuinfo里能看到很多逻辑核。判断容器里有多少 CPU 配额要读 cgroup 的限制文件cat /sys/fs/cgroup/cpu.max如果你需要在容器里获取宿主机真实硬件信息在宿主机上执行这些命令才是可靠的。4.3 如何确认系统发行版与架构国产系统和各种 Linux 发行版越来越多拿到一台机器先确认系统版本能避免后面装软件装错包。# 查看发行版信息 cat /etc/os-release # 查看内核与架构 uname -muname -m输出x86_64是 Intel/AMD 架构aarch64是 ARM64loongarch64是龙芯架构。下载安装包、编译软件时架构不匹配是常见问题。比如 x86_64 的 rpm 包装不到 aarch64 系统上误装时会直接报错说架构冲突。4.4 内核日志怎么排查硬件错误硬件问题的第一现场往往在内核日志里。dmesg是查看内核环缓冲区的命令# 查看最近的硬件错误 dmesg -T | grep -iE error|fail|critical | tail -20 # 查看磁盘相关报错 dmesg -T | grep -iE sda|ata|i/o error # 查看温度和电源相关 dmesg -T | grep -iE thermal|power-T参数把时间戳显示成可读的格式否则是一串秒数对不上故障时间点。额外提醒有些系统出于安全考虑限制普通用户执行dmesg会提示dmesg: read kernel buffer failed: Operation not permitted这是正常的。用 root 执行或者临时放宽内核参数kernel.dmesg_restrict0不建议在生产环境这么做。4.5 查看硬件信息时的 5 个常见坑第一free里的used很高不要慌先看available。buff/cache 会吃掉大量“看起来已用”的内存但这不是内存不足。第二lscpu在容器里不可靠。它读的是/proc/cpuinfo而容器可能没被隔离彻底。判断容器实际资源要以 cgroup 限制为准。第三dmidecode输出为空不一定是你命令错了。云主机和某些虚拟机固件根本不提供 DMI 信息root 执行也没用。第四smartctl不要随便跑长测试。smartctl -t long会对磁盘做全盘读取测试业务高峰期跑会让磁盘负载飙升甚至触发超时。第五df和lsblk显示的大小可能不一致。df显示的是文件系统可用容量lsblk显示的是分区设备大小前者受文件系统元数据和预留块影响后者是物理大小两者相差几个百分点是正常的。4.6 不要把“查看硬件信息”只当命令背我见过不少人把命令参数背得滚瓜烂熟真到了机器上还是不知道该看哪一行。硬件信息查看本质上是一种“带着问题去看数据”的思维装软件之前你要关注的是架构和系统版本加内存之前你要关注的是插槽余量和内存代数排查卡顿之前你要关注的是 CPU 负载、内存 available、磁盘 IO 等待报修硬件之前你要关注的是序列号和厂商型号命令只是工具能帮你把问题定位到具体硬件层面的才是真正的能力。我自己的习惯是每次拿到一台新机器先把这节开头那套组合拳跑一遍把输出存到本地以后无论系统出什么问题都有基线可以对比。最后分享一个小技巧不用死记硬背命令的完整参数用man或命令 --help现查就行。查硬件信息的核心是那几条主线——CPU、内存、磁盘、网络、整机把每个维度的主力命令用熟比记住一百条没用过的命令有用得多。真到需要的时候能快速回忆起“哦这个场景该用 lspci 或 dmidecode”就已经超过绝大多数人了。
返回列表