用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_os_info() {
echo -e "${YELLOW}系统版本信息:${NC}" #
获取发行版信息(适用于大多数Linux发行版)
if [ -f /etc/os-release ]; then
source /etc/os-release
echo -e GREEN}操作系统: $PRETTY_NAME${NC}"
elif [ -f /etc/redhat-release ]; then
echo -e "${GREEN}操作系统: $(cat /etc/redhat-release)${NC}"
else
echo -e "${RED}无法获取操作系统信息${NC}"
fi
# 获取内核版本
echo -e "${GREEN}内核版本: $(uname -r)${NC}"
# 获取系统架构
echo -e "${GREEN}系统架构: $(uname -m)${NC}"
# 获取系统启动时间
echo -e "${GREEN}系统启动时间: $(uptime -s)${NC}"
# 获取系统运行时间
echo -e "${GREEN}系统运行时间: $(uptime -p)${NC}" }
# 获取主板信息
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_os_info # 新增系统版本信息
get_pm_info
get_cpu
get_mem
get_disk
get_gpu
}
# 执行主函数并将输出保存到文件 main | tee /tmp/server-$(date +%F_%H-%M-%S).txt
使用方法:
将上述脚本保存为test_123.sh
,然后运行以下命令:
chmod +x test_123.sh
./test_123.sh
运行后,你将在终端中看到带有颜色标注的硬件信息报告,同时信息也会被保存到/tmp
目录下的文件中。
本人 在阿里云上的一台云服务器
如遇以下报错,表明你的脚本文件包含 Windows 的换行符(^M
,即 \r\n
),而 Linux 只接受 Unix 换行符(\n
)。你需要修复文件的换行符格式,使用sed -i 's/\r$//' test_123.sh脚本删除换行符,重新执行即可。