用Shell一键生成漂亮的服务器硬件信息¶
分享一个Shell脚本,用于一键生成服务器硬件信息报告,包括CPU、内存、磁盘和GPU等硬件信息,输出格式美观且信息全面
Shell脚本内容如下
#!/bin/bash
# 定义颜色变量
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# 获取当前日期和时间
current_date=$(date "+%Y-%m-%d %A %H:%M:%S")
# 获取主机名
hostname=$(hostname)
# 获取主板信息
get_pm_info() {
echo -e "${YELLOW}主板信息:${NC}"
dmidecode -t 1 | grep -E "Manufacturer|Product Name|Serial Number"
}
# 获取CPU信息
get_cpu() {
echo -e "${YELLOW}CPU信息:${NC}"
dmidecode -t processor | grep -E 'Socket|Core Count|Version'
}
get_mem() {
echo -e "${YELLOW}内存信息:${NC}"
dmidecode_output=$(dmidecode -t memory)
# 计算总内存,正确处理MB和GB单位
total_memory=$(echo "$dmidecode_output" | grep -A 10 "Memory Device" | grep "Size:" | grep -v "No Module Installed" | awk '{
if ($3 == "MB") total += $2 / 1024
else if ($3 == "GB") total += $2
} END {printf "%.2f GiB", total}')
echo -e "${GREEN}当前总内存: $total_memory${NC}"
# 提取内存槽位总数
total_slots=$(echo "$dmidecode_output" | grep "Number Of Devices" | awk '{print $NF}')
echo -e "${GREEN}内存槽位总数: $total_slots${NC}"
# 提取已安装的内存模块数量
installed_memory=$(echo "$dmidecode_output" | grep -v Volatile | grep -c "Size: [0-9]")
echo -e "${GREEN}已安装的内存模块数量: $installed_memory${NC}"
# 计算未使用的槽位数量
unused_slots=$((total_slots - installed_memory))
echo -e "${GREEN}未使用的槽位数量: $unused_slots${NC}"
# 提取每根内存的详细信息
echo -e "${GREEN}已安装内存的详细信息:${NC}"
echo "$dmidecode_output" | grep -A 32 "Memory Device" | head -22 | grep -E -w "Manufacturer|Type:|Size|Speed|Part Number" | sed '/No Module Installed/d'
}
# 获取磁盘信息
get_disk() {
echo -e "${YELLOW}磁盘信息:${NC}"
lsblk -d -o NAME,TYPE,SIZE | grep -v loop
}
# 获取GPU信息
get_gpu() {
echo -e "${YELLOW}GPU信息:${NC}"
if command -v nvidia-smi &> /dev/null; then
nvidia-smi -L
else
echo -e "${RED}未检测到NVIDIA GPU或nvidia-smi命令不可用。${NC}"
echo -e "${GREEN}尝试使用lspci查找其他GPU设备:${NC}"
lspci | grep -i vga
fi
}
# 主函数
main() {
echo -e "${YELLOW}==================== 服务器硬件信息报告 ====================${NC}"
echo -e "${YELLOW}日期: $current_date${NC}"
echo -e "${YELLOW}主机名: $hostname${NC}"
echo -e "${YELLOW}============================================================${NC}"
get_pm_info
get_cpu
get_mem
get_disk
get_gpu
}
# 执行主函数并将输出保存到文件
main | tee /tmp/server-$(date +%F_%H-%M-%S).txt
使用方法:
将上述脚本保存为
hardware_info.sh
,然后运行以下命令:
chmod +x hardware_info.sh./hardware_info.sh