接手一台服务器,最先要做的事情就是摸清机器里面到底装了哪些硬件。云服务商页面标注的4核8G只是参考配置,实际拿到手的设备有可能内存少插一条,硬盘型号也和订单写的不一样。这种情况下,只有命令行工具的输出结果才可信。
Linux查看硬件信息的操作思路和Windows差别很大。Windows直接打开设备管理器就能浏览硬件,Linux没有统一的图形界面入口。不过换个角度看,命令行反而更直接,系统的硬件信息都保存在/proc和/sys这两个文件系统里,各类查询工具本质只是读取这些文件,把原始数据转换成容易看懂的文字。

先说说CPU信息查询。lscpu这条命令上手最简单,输出内容清晰,架构、物理CPU数量、单颗CPU核心数、超线程状态、主频、缓存大小都会逐条展示。这里有个容易混淆的点:lscpu输出里的CPU(s)代表逻辑核心总数,不是物理核心。举个例子,双路16核并且开启超线程的服务器,CPU(s)数值会显示64。想要算出真实物理核心数量,用Core(s) per socket乘以Socket(s)就可以。
/proc/cpuinfo文件能查看更深层的硬件信息,比如每一个逻辑核心的实时频率,还有CPU支持的指令集。有个很常用的检测操作,判断CPU是否支持虚拟化,Intel处理器看是否存在vmx标识,AMD处理器查找svm标识,执行这条命令就能快速判断:grep -E 'vmx|svm' /proc/cpuinfo。命令返回有内容代表支持虚拟化,没有输出就说明不支持。
内存信息要分开两层去查看。free -h展示的是操作系统能够调用的内存容量,但有时候你会发现,free -h显示的总内存大小和云控制台标注规格不一致。出现这个现象一般是内核占用了部分内存,或是硬件地址映射占用空间。遇到这种情况就要用dmidecode工具,直接读取DMI硬件信息表,查看物理内存插槽实际插了几根内存条、单根容量、硬件型号以及运行频率。
sudo dmidecode -t memory这条命令会输出大量信息,就算是空的内存插槽也会被列出,标注“No Module Installed”。只想查看已经安装内存的插槽,可以增加管道过滤输出。这里有个需要留意的坑:free命令得到的总内存和dmidecode统计出来的物理内存总和经常不一致,前者是系统可用内存,后者是物理硬件安装容量。两组数据都有参考价值,不能只看其中一个就下判断。
磁盘查询方面,lsblk是使用体验最好的工具,它用树形结构展示存储设备层级关系,整块硬盘和分区一目了然。加上-f参数之后,还能同时查看文件系统类型和UUID,配置/etc/fstab挂载文件的时候非常实用。fdisk -l适合查看分区表细节,比如每个分区的起始扇区、结束扇区还有分区类型,但这条命令需要root权限,输出内容偏原始。日常快速浏览磁盘布局优先用lsblk,需要深度分析分区结构再使用fdisk。
网卡信息分为硬件层面和系统层面。ip addr可以查看系统内所有网络接口,包含对应的IP地址、MAC地址,以及接口启用或关闭状态。但这条命令无法获取网卡硬件型号和驱动版本。想要查看这类信息,执行lspci | grep -i ethernet定位网卡硬件,再运行ethtool -i eth0读取驱动名称和版本。还有一项经常被忽略的参数是网卡协商速率,不带-i参数执行ethtool eth0就可以查看,确认协商速率是1000Mb/s还是10000Mb/s。很多时候网络速率下降,排查很久才发现根源是网线或者交换机端口问题。
服务器搭载GPU的话,先用lspci | grep -iE "vga|3d|display"确认显卡是否被系统识别。NVIDIA显卡安装驱动之后直接执行nvidia-smi,显卡型号、显存占用、温度、功耗以及正在运行的进程都会展示出来。AMD显卡没有像nvidia-smi这样统一的查询工具,一般依靠lspci搭配驱动信息来判断状态。
还有两条命令建议记下来。lshw -short一次性输出整机硬件摘要,CPU、内存、磁盘、网卡、主板信息全部包含,适合快速盘点整机硬件。dmidecode -t system可以查到服务器厂商和具体型号,例如“Dell Inc.”和“PowerEdge R430”,报修或者查找硬件兼容文档的时候很有用。inxi -Fxz会生成可读性很强的完整系统报告,在技术论坛求助时贴这份报告,比截图传递的信息更完整。
总的来说,没有哪一条命令可以一次性搞定全部硬件检测。CPU用lscpu,内存结合free和dmidecode,磁盘用lsblk,网卡搭配ip addr与ethtool,GPU依靠nvidia-smi。不同工具负责不同维度的信息,组合使用结果才可靠。重点不在于死记大量命令,而是明白free和dmidecode数据冲突时该采信哪一份,lspci识别不到网卡该从哪个方向排查。这种判断能力,远比单纯背诵命令重要。