Linux 环境与硬件状态检测指令指南
核心组件与发行版标识
在排查兼容性或部署底层驱动前,准确获取内核版本与操作系统发行信息是首要步骤。现代 Linux 系统提供了标准化的查询路径,避免依赖易被修改的登录提示文件。
# 获取内核发行号、编译时间与硬件平台
uname -srv
uname --machine
# 解析标准化发行版配置文件(兼容主流分支)
source /etc/os-release && echo "发行版: $ID | 版本: $VERSION_ID | 代号: $VERSION_CODENAME"
# 针对 RHEL/CentOS 家族的快速校验
test -f /etc/redhat-release && cat /etc/redhat-release
通过 source 加载 /etc/os-release 可直接调用内置环境变量,比纯文本截取更稳定。
网络接口与主机标识
主机名管理与网络拓扑查看已全面转向 iproute2 工具集。传统 ifconfig 因无法正确处理多 IP 绑定及复杂路由,建议逐步弃用。
# 获取静态与瞬态主机名配置
hostnamectl query-hostname
# 过滤回环地址,仅输出全局 IPv4/IPv6
ip -br addr show scope global | awk '{print $1, $3}'
# 查看默认网关与路由跃点数
ip route list default
ip -6 route show default
使用 -br(brief)参数可大幅精简输出,便于在自动化脚本中直接提取接口状态。
处理器架构与系统负载
CPU 拓扑结构与实时负载是性能基线评估的核心。结合静态架构查询与动态负载采样,可快速定位计算瓶颈。
# 提取物理插槽、核心数与超线程状态
lscpu | awk -F: '/^Socket|^Core|^Thread|^CPU\(s\)/ {gsub(/^[ \t]+/, "", $2); print $1": "$2}'
# 动态采样前 5 秒的平均频率波动(单位 GHz)
watch -n 2 "awk '/cpu MHz/ {printf \"%.2f GHz\\n\", \$4/1000; exit}' /proc/cpuinfo"
# 读取运行队列长度与负载均值
awk '{printf "1min: %s | 5min: %s | 15min: %s | 活跃进程: %s\n", $1, $2, $3, $4}' /proc/loadavg
负载阈值需结合逻辑核心数评估:当 loadavg 持续超过 lscpu 输出的 CPU(s) 总数时,表明调度队列已出现积压。
内存分配与交换空间
Linux 的内存管理机制包含大量缓存与缓冲区,直接查看总量易产生误判。应重点关注可用内存估算值与 Swap 交换频率。
# 计算物理内存与 Swap 的实际占用百分比
free -b | awk '/Mem:/ {printf "RAM 占用: %.1f%%\n", ($3/$2)*100} /Swap:/ {if($2>0) printf "Swap 占用: %.1f%%\n", ($3/$2)*100; else print "Swap: 未启用"}'
# 提取内核内存统计关键指标
awk '/MemTotal|MemAvailable|Buffers|^Cached|SwapTotal|SwapFree/ {printf "%-16s %8s %s\n", $1, $2, $3}' /proc/meminfo
MemAvailable 是内核 3.14 后引入的估算字段,已扣除可回收缓存,比 free 列更贴近实际应用可分配容量。
存储设备与文件系统
磁盘排查需区分容量耗尽与 inode 耗尽两种场景。结合块设备树与挂载点统计,可清晰还原存储拓扑。
# 统计实际物理分区使用情况(排除虚拟文件系统)
df -Th -x tmpfs -x devtmpfs -x squashfs
# 检查 inode 消耗比例(适用于海量小文件场景)
df -i | awk 'NR>1 && $5+0 > 80 {print "警告: "$6" inode 使用率 "$5}'
# 输出块设备层级、文件系统类型与 UUID
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,UUID -e 7,11
# 采样磁盘 I/O 吞吐与等待时间(间隔 2 秒,共 3 次)
iostat -dx 2 3 | grep -v "^$"
lsblk 的 -e 参数用于过滤 loop 设备与 RAM 磁盘,使输出更聚焦于物理存储介质。
外部总线与扩展控制器
PCIe 与 USB 总线的设备枚举常用于驱动匹配与硬件故障定位。通过过滤关键字段可快速锁定目标控制器。
# 检索显卡、网卡及其绑定的内核模块
lspci -k | grep -EA3 'VGA|3D|Network|Ethernet'
# 列出 USB 控制器版本与连接设备标识
lsusb -v 2>/dev/null | grep -E 'idVendor|idProduct|bcdUSB' | paste - - -
# 按硬件类别生成结构化摘要
lshw -class disk -class network -short 2>/dev/null
lspci -k 能直接显示设备当前加载的驱动模块,对排查黑屏或断网问题具有直接参考价值。
守护进程与 systemd 单元
现代 Linux 服务生命周期由 systemd 统一接管。通过状态过滤与属性查询,可精准掌握后台服务的运行态与开机策略。
# 筛选已启用且当前处于活跃状态的服务单元
systemctl list-unit-files --state=enabled --type=service | grep -E '\.service'
# 获取指定服务的精确运行状态与子状态
systemctl show sshd.service --property=ActiveState,SubState,MainPID
# 追踪服务最近 5 条标准输出日志
journalctl -u sshd.service --no-pager -n 5 --output=short-precise
结合 systemctl show 与 journalctl 可替代冗长的 status 输出,更适合集成至监控告警管道。
自动化巡检脚本示例
以下脚本采用函数模块化设计,聚合核心指标并格式化输出,可直接部署为定时巡检任务。
#!/usr/bin/env bash
set -euo pipefail
fmt_header() {
printf "\n\033[1;36m[ %s ]\033[0m\n" "$1"
}
gather_identity() {
fmt_header "HOST & KERNEL"
hostnamectl | head -n 3
printf "Kernel: %s | Arch: %s\n" "$(uname -r)" "$(uname -m)"
}
gather_compute() {
fmt_header "CPU & MEMORY"
lscpu | grep -E 'Model name|CPU\(s\):|Thread'
free -h | awk 'NR==2{printf "RAM Total: %s | Used: %s | Avail: %s\n", $2, $3, $7}'
}
gather_io_net() {
fmt_header "DISK & NETWORK"
df -h --total -x tmpfs | tail -n 1 | awk '{printf "Disk Total: %s | Used: %s | Avail: %s\n", $2, $3, $4}'
ip -br addr show | awk '$3 !~ /127\.0\.0\.1/ && $3 !~ /::1/ {print "Interface:", $1, "IP:", $3}'
}
main() {
echo "========================================"
echo " SYSTEM SNAPSHOT - $(date '+%Y-%m-%d %H:%M')"
echo "========================================"
gather_identity
gather_compute
gather_io_net
echo -e "\n========================================"
}
main "$@"
常用指令速查对照
| 检测维度 | 核心指令 | 应用场景 |
|---|---|---|
| 发行版标识 | source /etc/os-release | 跨平台脚本环境适配 |
| 内核版本 | uname -srv | 模块编译与漏洞核对 |
| CPU 拓扑 | lscpu | 并发参数调优基准 |
| 内存水位 | free -b / awk | OOM 风险与缓存分析 |
| 存储结构 | lsblk -o / df -Th | 挂载规划与容量预警 |
| 网络接口 | ip -br addr | 多网卡路由与 IP 审计 |
| 服务状态 | systemctl show | 守护进程健康度检查 |