#!/bin/sh # ============================================================ # sysinfo.sh —— 服务器硬件信息采集脚本(秋明) # 输出:屏幕显示 + 同时保存到 sysinfo-<日期>_<时间>.out # 用法:sh sysinfo.sh # ============================================================ # ---- 时间校准(最先执行,保证文件名与后续时间戳都是北京时间)---- # ① 时区校准为北京(Asia/Shanghai) sudo timedatectl set-timezone Asia/Shanghai # ② 开启 NTP 自动网络对时 sudo timedatectl set-ntp true # ③ 系统时间写入硬件 RTC,完成时间校准 sudo hwclock --systohc 2>/dev/null || sudo hwclock -w 2>/dev/null # 输出文件:按日期+时间命名(精确到秒),例如 sysinfo-2026-09-14_09-46-02.out OUT="sysinfo-$(date +%F_%H-%M-%S).out" # 将以下全部输出同时写入屏幕和文件(tee) { echo "============================================================" echo "sysinfo 采集时间:$(date '+%Y-%m-%d %H:%M:%S %Z (UTC%z)')" echo "输出文件:$OUT" echo "============================================================" # 依赖安装(CentOS 用 yum,Ubuntu/Debian 用 apt;静默执行不输出) yum install -y ipmitool pciutils >/dev/null 2>&1 sudo apt install -y ipmitool pciutils dmidecode >/dev/null 2>&1 # 主机名与系统概况(主机名、系统版本、内核、架构、虚拟化) echo "----------------hostnamectl-----------------" hostnamectl # BIOS 信息(厂商、版本、发布日期) echo "----------------bios----------------" sudo dmidecode -t 0 # 产品信息(整机厂商、型号、序列号、UUID) echo "----------------Product-----------------" sudo dmidecode -t 1 # 主板信息(厂商、型号、版本、序列号) echo "----------------Board-----------------" sudo dmidecode -t 2 # BMC 信息(带外管理控制器型号、固件版本、IPMI 版本) echo "----------------BMC-----------------" sudo ipmitool mc info # FRU 信息(可更换单元:主板/电源/机箱等的厂商与序列号) echo "----------------fru-----------------" sudo ipmitool fru # 电源信息(电源功率与状态) echo "----------------power-----------------" sudo dmidecode | grep -A16 "System Power Supply$" # 传感器(温度、电压、风扇转速、功耗) echo "----------------sensor-----------------" sudo ipmitool sdr sudo ipmitool sensor # CPU 信息(型号、核数、线程、主频、NUMA) echo "----------------cpu-----------------" lscpu # 内存信息(槽位、厂家、序列号、容量-类型-速率、Part Number) echo "----------------mem-----------------" sudo dmidecode -t 17 | awk -F': ' ' function emit() { # 跳过空槽位 if (size ~ /No Module|Not Installed/ || size == "") { return } printf "%-14s %-14s %-20s %-25s %-22s\n", slot, mfr, serial, size "-" type "-" speed, part; } BEGIN { printf "%-14s %-14s %-20s %-25s %-22s\n", "Locator", "Manufacturer", "Serial", "Size-Type-Speed", "Part Number"; } # 每个内存条目的边界:遇到新 Handle 或读到文件末尾时输出上一条 /^Handle / { emit(); slot=""; mfr=""; serial=""; part=""; size=""; type=""; speed="" } /^[ \t]*Size:/ { size = $2 } /^[ \t]*Locator:/ { slot = $2 } # 实际槽位,如 DIMM_A1(注意不要匹配 Bank Locator) /^[ \t]*Manufacturer:/ { mfr = $2 } /^[ \t]*Type:/ { type = $2 } /^[ \t]*Configured Memory Speed:/ { speed = $2 } /^[ \t]*Serial Number:/ { serial = $2 } /^[ \t]*Part Number:/ { part = $2 } END { emit() }' # 内存详细信息(dmidecode -t 17 原始输出,含厂家/序列号/料号/速率等全部字段) echo "----------------mem detail (dmidecode -t 17)-----------------" sudo dmidecode -t 17 # 硬盘信息(型号、序列号、容量、WWN、接口类型) echo "----------------disk-----------------" sudo lsblk -o NAME,MAJ:MIN,MODEL,SERIAL,SIZE,WWN,HCTL,TRAN,VENDOR,TYPE | grep disk sudo lsblk # 网卡信息(PCI 设备与网口地址/状态) echo "----------------net-----------------" sudo lspci | grep net ip a # PCIe 拓扑树(设备挂载层级与桥接关系) echo "----------------lspci-----------------" sudo lspci -tv # PCIe 设备完整列表 echo "----------------lspci full-----------------" sudo lspci # NVIDIA 设备详细寄存器信息(vendor ID 10de = NVIDIA) sudo lspci -d 10de: -vvv echo "============================================================" echo "采集完成,结果已保存到:$OUT" echo "============================================================" } 2>&1 | tee "$OUT"