一键查询Linux服务器信息
#!/bin/bash
# 服务器完整信息汇总脚本(无bc依赖版:适配所有Linux系统,最小化安装也能用)
# 执行方式:sudo bash 脚本名.sh
{
clear
echo "===================== 服务器完整信息汇总 ====================="
# 1. 主机名(兜底:获取失败显示"未知主机名")
hostname=$(hostname 2>/dev/null)
hostname=${hostname:-"未知主机名"}
echo "主机名:$hostname"
# 2. 服务器类型(物理机/虚拟机,增加容错)
virt_type=$(systemd-detect-virt 2>/dev/null)
if [ -z "$virt_type" ] || [ "$virt_type" = "none" ]; then
echo "服务器类型:物理机"
else
echo "服务器类型:虚拟机($virt_type)"
fi
# 3. CPU信息(修复物理核心统计,适配所有CPU架构)
cpu_model=$(grep -m1 'model name' /proc/cpuinfo 2>/dev/null | awk -F: '{gsub(/^[ \t]/,"",$2); print $2}')
cpu_model=${cpu_model:-"未知CPU型号"}
# 正确统计物理核心:兼容Intel/AMD,支持多physical id(纯awk实现)
physical_cores=$(awk '/physical id/ {pid=$4} /core id/ {core[pid","$4]++} END {print length(core)}' /proc/cpuinfo 2>/dev/null)
physical_cores=${physical_cores:-0}
logical_cores=$(grep -c '^processor' /proc/cpuinfo 2>/dev/null)
logical_cores=${logical_cores:-0}
echo "CPU 型号:$cpu_model"
echo "CPU 物理核心:$physical_cores 核"
echo "CPU 逻辑线程:$logical_cores 线程"
# 4. 物理内存总容量(纯awk实现浮点运算,无bc依赖)
# 方案1:优先从/proc/meminfo读取(最准确)
mem_total_kb=$(grep -E '^MemTotal:' /proc/meminfo 2>/dev/null | awk '{print $2}')
if [ -z "$mem_total_kb" ] || [ "$mem_total_kb" -eq 0 ]; then
# 方案2:兜底用free命令读取
mem_total_kb=$(free -k 2>/dev/null | awk '/Mem:/{print $2}')
fi
# 最终兜底:避免空值
mem_total_kb=${mem_total_kb:-0}
# 二进制换算(和FinalShell对齐:1GiB=1024MiB=1024*1024KiB),保留1位小数
mem_gb_bin=$(awk -v kb="$mem_total_kb" 'BEGIN{printf "%.1f", kb/1024/1024}')
# 单位判断(TiB/TB,纯awk实现)
mem_tb_bin=$(awk -v gb="$mem_gb_bin" 'BEGIN{
if (gb >= 1024) {
printf "%.1fTB", gb/1024;
} else {
printf "%.1fGB", gb;
}
}')
echo "物理内存总容量:$mem_tb_bin"
# 5. 磁盘空间总容量(纯awk实现,无bc依赖,统一十进制GB/TB)
echo -n "磁盘空间总容量:"
# 优先用df -B1获取字节数(精准)
total_disk_bytes=$(df -B1 --total -x tmpfs -x devtmpfs -x loop 2>/dev/null | awk '/total/{print $2}')
if [ -n "$total_disk_bytes" ] && [ "$total_disk_bytes" -gt 0 ]; then
# 字节转十进制GB/TB,保留1位小数
total_disk=$(awk -v bytes="$total_disk_bytes" 'BEGIN{
gb = bytes / 1000 / 1000 / 1000;
if (gb >= 1000) {
printf "%.1fTB", gb/1000;
} else {
printf "%.1fGB", gb;
}
}')
else
# 兜底:兼容老系统/无df --total的情况(纯awk解析df -h输出)
total_disk=$(df -h -x tmpfs -x devtmpfs -x loop 2>/dev/null | awk '
NR>1 {
# 提取数值和单位
val = substr($2, 1, length($2)-1);
unit = substr($2, length($2));
# 统一换算为GB
if (unit == "T") sum += val * 1000;
else if (unit == "G") sum += val;
else if (unit == "M") sum += val / 1000;
}
END {
if (sum > 1000) printf "%.1fTB", sum/1000;
else printf "%.1fGB", sum;
}
')
fi
# 最终兜底
total_disk=${total_disk:-"0.0GB"}
echo "$total_disk"
# 6. 操作系统版本(增加兜底)
if [ -f /etc/os-release ]; then
os_name=$(. /etc/os-release && echo "$PRETTY_NAME")
else
os_name=$(lsb_release -d 2>/dev/null | awk -F: '{gsub(/^ /,"",$2); print $2}')
fi
os_name=${os_name:-"未知操作系统"}
echo "操作系统:$os_name"
# 7. 系统安装时间(兼容Ubuntu/CentOS)
install_time=$(ls -lc --time-style=long-iso /etc 2>/dev/null | awk 'NR==2{print $6,$7}')
if [ -z "$install_time" ]; then
install_time=$(stat -c %y /etc 2>/dev/null | awk '{print $1,$2}' | cut -d '.' -f1)
fi
install_time=${install_time:-"未知安装时间"}
echo "系统安装时间:$install_time"
echo "==============================================================="
}
使用方法:
①将以上内容完整复制到命令行中,回车执行
②输出效果展示


浙公网安备 33010602011771号