一、Linux 硬件管理命令
综合硬件信息查看
-
lshw:列出全面的硬件配置(CPU、内存、主板等),用-short选项可查看简洁列表 -
dmidecode:从 BIOS 读取硬件详细信息,直接运行可查看所有类别的信息
CPU
-
lscpu:查看 CPU 架构、型号、核心数、线程数等 -
cat /proc/cpuinfo:查看每个 CPU 核心的详细信息 -
top/htop:实时监控 CPU 使用率
内存
-
free -h:查看内存及交换分区的总容量、已用量、空闲量 -
cat /proc/meminfo:查看详细的内存参数 -
vmstat -s:查看内存相关统计信息
磁盘与存储
-
df -h:查看文件系统磁盘空间使用量 -
lsblk:以树形图列出所有块设备(硬盘、分区) -
fdisk -l:查看磁盘分区表信息 -
du -sh:查看目录或文件的实际磁盘用量
网络
-
lshw -class network:查看网卡硬件信息 -
ifconfig或ip addr show:显示网卡 IP 配置 -
lspci | grep -i network:从 PCI 设备中筛选网卡信息
外部设备 (USB/PCI)
-
lsusb:列出所有连接的 USB 设备 -
usb-devices:显示更详细的 USB 设备信息 -
lspci:列出所有 PCI 总线设备(显卡、声卡等) -
lspci -v:查看 PCI 设备的详细信息 -
ls -l /dev/ttyS* /dev/ttyUSB* /dev/ttyACM* 2>/dev/null :查看已识别串口
-
lsusb -v | grep -i "serial" :查看 USB 转串口设备
部分命令需管理员权限,若提示无权限,请在命令前加上 sudo
二、硬件故障分析
硬件故障排查通常遵循一个固定的流程:先通过内核日志 dmesg 捕捉系统报告的通用错误,若日志指向明确(如硬盘报错),再使用对应的专用工具进行深度检查。这里为你整理了一个整体的排查思路和各硬件的诊断方法。
CPU:主要看利用率
-
基本信息查看 :用
lscpu快速获取架构、核心数等信息;cat /proc/cpuinfo则能提供每个核心的详细参数。 -
压力测试诊断 :系统变慢、卡顿时,用
top/htop实时监控,按1可查看每个核心的使用率。-
高负载:确认是哪个进程 (
htop) 或系统调用 (perf top) 占用了资源。 -
低负载但依然卡顿:可能是CPU过热降频,除了监测温度,还能用
cpupower monitor确认频率是否正确。
-
内存:关键看错误校验
-
基本信息查看 :用
free -h查看内存容量和使用情况。 -
深度故障诊断:
-
memtester:可在系统运行时对内存进行压力测试。例如,测试1G内存循环5次:memtester 1G 5。 -
memtest86+:更专业的独立内存检测工具,需从引导盘或U盘启动,以进行最彻底的检查。
-
-
错误解读 :如果在
dmesg中出现Machine Check Exception或EDAC相关的错误,通常指向内存物理故障。
硬盘:最依赖专用工具
对于磁盘,强烈建议使用 smartctl 工具(通常需先安装 smartmontools 包)。它的核心用法如下:
| 诊断维度 | 推荐命令 | 作用 |
|---|---|---|
| 快速概览 | smartctl -i /dev/sda |
快速确认硬盘型号、序列号,并验证是否支持SMART技术 |
| 完整健康报告 | smartctl -a /dev/sda |
一次性查看硬盘的详细属性和所有错误日志 |
| 关键健康属性 | smartctl -H /dev/sda |
获取SMART健康状态(PASSED是及格线,FAILED表示硬盘即将死亡) |
| 短期自检 | smartctl -t short /dev/sda |
快速(约2分钟)自检,用来定位明显故障 |
关键指标解读 :重点关注 Reallocated_Sector_Ct(重映射扇区计数)、Current_Pending_Sector(当前待映射扇区计数)和 Uncorrectable_Sector_Ct(无法修正的扇区计数)。这三个指标一旦飙升,说明硬盘的物理介质正在老化,建议立即备份数据。
网络:关注连接状态和丢包
-
基本信息查看 :用
ifconfig -a或ip addr show查看所有网卡的状态。 -
故障诊断思路:
-
无法连接:
-
检查硬件 :用
lspci | grep -i ethernet确认网卡是否被系统识别。 -
检查线缆:观察网卡接口旁的指示灯是否正常闪烁。
-
检查状态 :用
ip link set eth0 up尝试重新激活网卡。 -
查看日志 :用
dmesg -T | grep -i "eth0"检查是否有驱动报错。
-
-
速度慢/丢包:
-
检查协商速率 :用
ethtool eth0查看网卡协商速率是否和路由器/交换机匹配。 -
检查丢包 :用
netstat -i查看网卡的RX-ERR/TX-ERR(接收/发送错误)和DROP(丢包)计数。如果这两个数值不为0,说明网络传输质量很差,应检查网线或接口。 -
抓包分析 :用
tcpdump -i eth0 -n -c 100抓取100个数据包进行分析。
-
-
高温与风扇:关注温度过热
硬件过热是导致系统不稳定的常见原因,尤其是CPU和GPU。可以使用 sensors 命令(需安装 lm-sensors 包)读取各硬件传感器的温度。
-
使用
sensors:直接运行sensors即可查看CPU、主板、风扇转速等实时数据。 -
故障迹象:
-
如果
dmesg中出现thermal throttle(热节流)或critical temperature reached(达到临界温度),说明硬件因过热而主动降频,性能自然会下降。 -
如果
sensors命令无法执行或输出为空,可能是内核没有加载对应的传感器驱动,或硬件本身不支持。
-
总结:排查流程
-
系统出现问题(死机、卡顿、报错)?
-
dmesg -T | grep -iE "error|fail"查看内核日志。-
结果 :看到某个硬件相关的明确错误 ➡️ 转到步骤5。
-
结果 :没有明确错误或怀疑是性能问题 ➡️ 转到步骤3。
-
-
性能诊断与监控:
-
CPU使用率爆满?
top/htop/perf -
内存耗尽?
free -h -
磁盘I/O瓶颈?
iostat -x 1 -
网络丢包/延迟?
netstat -i/ping
-
-
问题定位与解决:根据监控数据,定位到具体进程或服务,更新驱动或软件。
-
专项硬件深度检测:
-
硬盘 :
smartctl -a /dev/sdX -
内存 :
memtester/memtest86+ -
网卡 :
ethtool ethX/ 检查线缆
-
三、实时监控硬件的插入和卸载状态,查看日志
在 Linux 中实时监控硬件的插入和卸载,主要依赖 udev 事件和 内核日志。下面列出最常用的两种监控方式。
1. 实时监控:udevadm monitor
这是专门用于监控 udev 事件 的命令,能显示内核(kernel)和 udev 守护进程处理硬件事件的全过程。
bash
# 监控所有硬件事件(需 root 权限)
sudo udevadm monitor --property
-
效果:当你插入或拔出 U 盘、鼠标、硬盘等设备时,终端会立即输出设备的动作(add/remove)、设备路径、型号、序列号等属性。
-
参数说明:
-
--property:显示设备的详细属性(建议加上)。 -
不加
--property只显示事件摘要。
-
-
示例输出片段(插入 U 盘):
text
KERNEL[12345.678] add /devices/pci0000:00/.../block/sdb (block) UDEV [12345.789] add /devices/pci0000:00/.../block/sdb (block)你可以看到内核检测到新块设备
sdb,随后 udev 为其创建节点。
2. 实时监控内核日志:dmesg -w 或 journalctl -f
硬件插入/卸载时,内核会打印详细的消息(如设备型号、分配的接口、驱动加载状态等)。推荐使用以下命令实时查看:
bash
# 实时显示内核日志(动态跟踪)
sudo dmesg -w
# 或者用 systemd 的 journalctl(更强大)
sudo journalctl -k -f
-
插入 U 盘时的典型输出(dmesg):
text
[ 123.456789] usb 1-1: new high-speed USB device number 6 using xhci_hcd [ 123.600123] usb 1-1: New USB device found, idVendor=1234, idProduct=5678 [ 123.600456] usb 1-1: Product: USB Flash Drive [ 123.601234] scsi 5:0:0:0: Direct-Access USB Flash Drive 1.00 PQ: 0 ANSI: 2 [ 123.602345] sd 5:0:0:0: [sdb] 12345678 512-byte logical blocks: (6.3 GB/5.9 GiB) [ 123.604567] sdb: sdb1 -
拔出 U 盘时的典型输出:
text
[ 200.111222] usb 1-1: USB disconnect, device number 6 [ 200.112333] sd 5:0:0:0: [sdb] Synchronizing SCSI cache [ 200.113444] sd 5:0:0:0: [sdb] Synchronize Cache(10) failed: Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK
3. 查看历史日志
如果硬件已经插拔过,想回顾之前的事件,可以用以下命令:
bash
# 查看本次启动后的所有内核硬件相关日志
dmesg -T | grep -E "usb|sd|ata|eth"
# 或者从 systemd 日志中搜索最近 1 小时的记录
sudo journalctl -k --since "1 hour ago" | grep -E "usb|attach|disconnect"
4. 搭配监控技巧
-
同时监控 udev 事件 + 内核日志 :开两个终端,分别运行
sudo udevadm monitor --property和sudo dmesg -w。 -
只关注某个特定设备类型(如 USB):
bash
sudo udevadm monitor --subsystem-match=usb --property -
记录日志到文件(用于长时调试):
bash
sudo dmesg -w >> /var/log/hotplug.log &
5. 常见问题排查
| 现象 | 可能原因 | 查看什么日志 |
|---|---|---|
| 插入设备后无任何输出 | USB 端口损坏/控制器未启用 | dmesg 中是否有 usb 相关行,或 lspci 是否识别主机控制器 |
| 设备识别后无法使用 | 缺少驱动或 udev 规则错误 | udevadm monitor 看是否有错误动作;journalctl -u systemd-udevd |
| 拔出时系统报错 | 数据未同步完全 | dmesg 中 Synchronize Cache failed 警告通常无害,但频繁出现要检查存储设备 |
总结 :想实时监控硬件插拔,就用 sudo udevadm monitor 看事件,同时 sudo dmesg -w 看内核日志;排查历史问题用 dmesg -T \| grep。