#!/bin/bash
RED='\\033[0;31m'
GREEN='\\033[0;32m'
NC='\\033[0m'
current_date=$(date "+%Y年%m月%d日 %A %H:%M:%S")
hostname=$(hostname)
# 检查sudo权限
sudo -v || { echo -e "${RED}错误:需要sudo权限执行此脚本${NC}"; exit 1; }
# 获取主板信息
get_pm_info() {
echo -e "${RED}主板信息${NC}:"
sudo dmidecode -t 1 | grep -E "Manufacturer|Product Name|Serial Number"
echo ""
}
# 获取CPU信息
get_cpu() {
echo -e "${RED}CPU信息:${NC}"
sudo dmidecode -t processor | grep -E 'Socket Designation|Core Count|Version'
echo ""
}
# 获取内存信息(修正版本)
get_mem() {
echo -e "${RED}内存信息:${NC}"
local total_slots=$(sudo dmidecode -t memory | grep -c "Memory Device")
echo "内存槽位总数: $total_slots"
echo " 已安装的内存模块:"
local installed_count=0
# 解析每个内存设备
sudo dmidecode -t memory | while IFS= read -r line; do
if [[ $line == *"Memory Device"* ]]; then
unset size locator
elif [[ $line == *"Size:"* ]]; then
size=$(echo "$line" | awk -F': ' '{print $2}')
elif [[ $line == *"Locator:"* ]]; then
locator=$(echo "$line" | awk -F': ' '{print $2}')
elif [[ -z $line && -n $size ]]; then
if [[ $size != "No Module Installed" && $size != "Unknown" ]]; then
((installed_count++))
echo -e " ${GREEN}$locator${NC}: $size"
fi
fi
done
echo " 已安装的内存模块数量: $installed_count"
# 获取总内存容量
echo -n " 内存总数: "
free -h | awk '/^Mem:/ {print $2}'
echo ""
}
# 获取磁盘信息
get_disk() {
echo -e "${RED}磁盘信息:${NC}"
lsblk -d -o NAME,TYPE,SIZE,MODEL | grep -vE 'loop|rom'
echo ""
}
# 获取GPU信息(修正版本)
get_gpu() {
echo -e "${RED}GPU信息:${NC}"
if command -v nvidia-smi &>/dev/null; then
nvidia-smi -L
else
echo "未检测到NVIDIA GPU"
echo "其他显示设备:"
lspci | grep -i 'vga\\|3d\\|display'
fi
echo ""
}
# 获取网络信息(修正版本)
get_network() {
echo -e "${RED}网络接口信息:${NC}"
local interfaces=$(ls /sys/class/net/)
echo -e "所有网络接口:"
for iface in $interfaces; do
echo -e " ${GREEN}$iface${NC}"
done
echo -e "\\nIPv4地址信息:"
for iface in $interfaces; do
local ipaddr=$(ip -4 addr show dev "$iface" 2>/dev/null | awk '/inet/ {print $2}')
if [ -n "$ipaddr" ]; then
echo -e " ${GREEN}$iface${NC}: $ipaddr"
else
echo -e " ${GREEN}$iface${NC}: 无IP地址"
fi
done
echo ""
}
# 主函数
main() {
echo -e "==================== 服务器硬件信息报告 ===================="
echo -e "日期: $current_date"
echo -e "主机名: $hostname"
echo -e "============================================================"
get_pm_info
get_cpu
get_mem
get_disk
get_gpu
get_network
}
# 执行主函数并保存输出
main | tee "/tmp/server_info_$(date +%F_%H-%M-%S).txt"
评论前必须登录!
注册