本文目录导读:

我来帮您编写一个系统信息仪表盘脚本,这是一个功能完整的Bash脚本,能实时显示系统核心信息:
#!/bin/bash
# ============================================
# 系统信息仪表盘脚本
# 显示CPU、内存、磁盘、网络等系统信息
# 适用于Linux系统
# ============================================
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
WHITE='\033[1;37m'
NC='\033[0m' # No Color
# 分隔线
LINE="=========================================="
# 打印带颜色的标题
print_title() {
echo -e "${CYAN}$1${NC}"
echo -e "${CYAN}$LINE${NC}"
}
# 显示系统信息
show_system_info() {
print_title "系统信息"
echo -e "${GREEN}主机名:${NC} $(hostname)"
echo -e "${GREEN}操作系统:${NC} $(cat /etc/os-release | grep "PRETTY_NAME" | cut -d'"' -f2)"
echo -e "${GREEN}内核版本:${NC} $(uname -r)"
echo -e "${GREEN}运行时间:${NC} $(uptime -p | sed 's/up //')"
echo -e "${GREEN}当前用户:${NC} $(whoami)"
echo
}
# 显示CPU信息
show_cpu_info() {
print_title "CPU 信息"
# CPU型号
echo -e "${GREEN}CPU型号:${NC} $(grep "model name" /proc/cpuinfo | head -1 | cut -d':' -f2 | sed 's/^ //')"
# CPU核心数
echo -e "${GREEN}CPU核心数:${NC} $(nproc)"
# CPU使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
echo -e "${GREEN}CPU使用率:${NC} ${cpu_usage}%"
# 负载平均值
loadavg=$(cat /proc/loadavg | awk '{print $1, $2, $3}')
echo -e "${GREEN}负载平均值:${NC} $loadavg"
echo
}
# 显示内存信息
show_memory_info() {
print_title "内存信息"
# 使用free命令获取内存信息
mem_total=$(free -m | awk '/^Mem:/{print $2}')
mem_used=$(free -m | awk '/^Mem:/{print $3}')
mem_free=$(free -m | awk '/^Mem:/{print $4}')
mem_available=$(free -m | awk '/^Mem:/{print $7}')
mem_cache=$(free -m | awk '/^Mem:/{print $6}')
echo -e "${GREEN}总内存:${NC} ${mem_total} MB"
echo -e "${GREEN}已用内存:${NC} ${mem_used} MB"
echo -e "${GREEN}空闲内存:${NC} ${mem_free} MB"
echo -e "${GREEN}可用内存:${NC} ${mem_available} MB"
echo -e "${GREEN}缓存:${NC} ${mem_cache} MB"
# 内存使用率
usage_percent=$((mem_used * 100 / mem_total))
echo -e "${GREEN}内存使用率:${NC} ${usage_percent}%"
# 显示内存进度条
show_progress_bar $usage_percent
echo
}
# 显示交换分区信息
show_swap_info() {
print_title "交换分区"
swap_total=$(free -m | awk '/^Swap:/{print $2}')
swap_used=$(free -m | awk '/^Swap:/{print $3}')
if [ $swap_total -eq 0 ]; then
echo -e "${YELLOW}系统未配置交换分区${NC}"
else
echo -e "${GREEN}交换总大小:${NC} ${swap_total} MB"
echo -e "${GREEN}已使用:${NC} ${swap_used} MB"
swap_percent=$((swap_used * 100 / swap_total))
echo -e "${GREEN}使用率:${NC} ${swap_percent}%"
fi
echo
}
# 显示磁盘信息
show_disk_info() {
print_title "磁盘使用情况"
# 显示主要分区信息
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | while read output;
do
filesystem=$(echo $output | awk '{print $1}')
size=$(echo $output | awk '{print $2}')
used=$(echo $output | awk '{print $3}')
available=$(echo $output | awk '{print $4}')
use_percent=$(echo $output | awk '{print $5}' | sed 's/%//')
mounted=$(echo $output | awk '{print $6}')
echo -e "${GREEN}文件系统:${NC} $filesystem"
echo -e "${GREEN}大小:${NC} $size | ${GREEN}已用:${NC} $used | ${GREEN}可用:${NC} $available"
echo -e "${GREEN}使用率:${NC} $use_percent%"
echo -e "${GREEN}挂载点:${NC} $mounted"
echo "---"
done
}
# 显示网络信息
show_network_info() {
print_title "网络信息"
echo -e "${GREEN}主机名:${NC} $(hostname)"
# 获取所有网络接口
interfaces=$(ls /sys/class/net/ | grep -v lo)
for interface in $interfaces; do
ip_addr=$(ip addr show $interface 2>/dev/null | grep "inet " | awk '{print $2}' | cut -d'/' -f1)
mac_addr=$(cat /sys/class/net/$interface/address)
if [ -n "$ip_addr" ]; then
echo -e "${GREEN}接口 $interface:${NC}"
echo -e " ${GREEN}IP地址:${NC} $ip_addr"
echo -e " ${GREEN}MAC地址:${NC} $mac_addr"
echo
fi
done
# 网络流量统计
echo -e "${GREEN}网络流量统计:${NC}"
rx_bytes=$(cat /sys/class/net/$interfaces/rx_bytes 2>/dev/null || echo 0)
tx_bytes=$(cat /sys/class/net/$interfaces/tx_bytes 2>/dev/null || echo 0)
echo -e " 接收: $(echo "scale=2; $rx_bytes/1024/1024" | bc) MB"
echo -e " 发送: $(echo "scale=2; $tx_bytes/1024/1024" | bc) MB"
echo
}
# 显示进程信息
show_process_info() {
print_title "进程信息"
echo -e "${GREEN}总进程数:${NC} $(ps aux | wc -l)"
echo -e "${GREEN}运行中进程:${NC} $(ps aux | grep "R" | wc -l)"
echo -e "\n${YELLOW}CPU使用率最高的5个进程:${NC}"
ps aux --sort=-%cpu | head -6 | tail -5 | awk '{printf "%-8s %-8s %-6s %-6s %s\n", $1, $2, $3, $4, $11}'
echo -e "\n${YELLOW}内存使用率最高的5个进程:${NC}"
ps aux --sort=-%mem | head -6 | tail -5 | awk '{printf "%-8s %-8s %-6s %-6s %s\n", $1, $2, $3, $4, $11}'
echo
}
# 显示登录用户
show_users() {
print_title "当前登录用户"
who | while read user terminal time rest
do
echo -e "${GREEN}用户:${NC} $user | ${GREEN}终端:${NC} $terminal | ${GREEN}登录时间:${NC} $time"
done
echo
}
# 显示进度条
show_progress_bar() {
local percent=$1
local width=50
local filled=$((percent * width / 100))
local empty=$((width - filled))
echo -n "["
for ((i=0; i<filled; i++)); do
echo -n "#"
done
for ((i=0; i<empty; i++)); do
echo -n "-"
done
echo "]"
}
# 显示温度信息(如果有传感器)
show_temperature() {
print_title "系统温度"
if [ -f /sys/class/thermal/thermal_zone0/temp ]; then
temp=$(cat /sys/class/thermal/thermal_zone0/temp)
temp_c=$(echo "scale=1; $temp/1000" | bc)
color=$GREEN
if (( $(echo "$temp_c > 60" | bc -l) )); then
color=$RED
elif (( $(echo "$temp_c > 45" | bc -l) )); then
color=$YELLOW
fi
echo -e "${color}CPU温度: ${temp_c}°C${NC}"
# 检查其他传感器
for zone in /sys/class/thermal/thermal_zone*; do
if [ -f "$zone/temp" ] && [ "$zone" != "/sys/class/thermal/thermal_zone0" ]; then
temp=$(cat "$zone/temp")
temp_c=$(echo "scale=1; $temp/1000" | bc)
echo -e "${GREEN}传感器 ${zone##*_}: ${temp_c}°C${NC}"
fi
done
else
echo -e "${YELLOW}未找到温度传感器${NC}"
fi
echo
}
# 显示系统服务状态
show_services() {
print_title "关键服务状态"
services=("ssh" "nginx" "apache2" "mysql" "postgresql" "docker")
for service in "${services[@]}"; do
if systemctl is-active --quiet $service 2>/dev/null; then
echo -e "${GREEN}● $service: 运行中${NC}"
else
echo -e "${RED}○ $service: 未运行${NC}"
fi
done
echo
}
# 主菜单
show_main_menu() {
clear
echo -e "${PURPLE}╔════════════════════════════════════════╗${NC}"
echo -e "${PURPLE}║ 系统信息仪表盘 v1.0 ║${NC}"
echo -e "${PURPLE}╚════════════════════════════════════════╝${NC}"
echo
echo -e "${YELLOW}请选择要查看的信息:${NC}"
echo -e "${GREEN}1)${NC} 系统信息"
echo -e "${GREEN}2)${NC} CPU信息"
echo -e "${GREEN}3)${NC} 内存信息"
echo -e "${GREEN}4)${NC} 磁盘信息"
echo -e "${GREEN}5)${NC} 网络信息"
echo -e "${GREEN}6)${NC} 进程信息"
echo -e "${GREEN}7)${NC} 温度信息"
echo -e "${GREEN}8)${NC} 服务状态"
echo -e "${GREEN}9)${NC} 显示全部"
echo -e "${GREEN}0)${NC} 退出"
echo
}
# 主程序
main() {
while true; do
show_main_menu
read -p "请输入选择 [0-9]: " choice
case $choice in
1) clear; show_system_info ;;
2) clear; show_cpu_info ;;
3) clear; show_memory_info; show_swap_info ;;
4) clear; show_disk_info ;;
5) clear; show_network_info ;;
6) clear; show_process_info ;;
7) clear; show_temperature ;;
8) clear; show_services ;;
9)
clear
show_system_info
show_cpu_info
show_memory_info
show_swap_info
show_disk_info
show_network_info
show_process_info
show_temperature
show_services
show_users
;;
0)
echo -e "${GREEN}感谢使用系统信息仪表盘!${NC}"
exit 0
;;
*)
echo -e "${RED}无效选择,请重试${NC}"
sleep 1
;;
esac
echo
read -p "按Enter键继续..." continue_input
done
}
# 执行主程序
main "$@"
使用说明
-
保存脚本:
sudo tee /usr/local/bin/sysinfo.sh << 'EOF' [将上面的脚本内容粘贴到这里] EOF
-
赋予执行权限:
sudo chmod +x /usr/local/bin/sysinfo.sh
-
运行脚本:
./sysinfo.sh
功能特点
- 📊 实时监控:显示CPU、内存、磁盘等实时使用情况
- 🎨 彩色显示:使用不同颜色区分不同类型的信息
- 📋 分模块显示:按类别清晰展示系统信息
- 🔄 交互式菜单:可选择查看特定信息
- 📈 进度条:可视化显示内存使用率
- 👥 用户信息:显示当前登录用户
- 🌡️ 温度监控:显示CPU温度(硬件支持时)
- ⚙️ 服务状态:检查关键服务运行状态
可选扩展功能
您可以根据需要添加以下功能:
# 添加系统更新检查
show_updates() {
print_title "系统更新"
updates_count=$(apt list --upgradable 2>/dev/null | grep -c upgradable)
echo -e "${GREEN}可用更新:${NC} $updates_count 个"
}
# 添加快照功能
take_snapshot() {
mkdir -p /tmp/sysinfo_snapshots
timestamp=$(date +%Y%m%d_%H%M%S)
snapshot_file="/tmp/sysinfo_snapshots/snapshot_$timestamp.txt"
{
show_system_info
show_cpu_info
show_memory_info
} > $snapshot_file
echo -e "${GREEN}快照已保存: $snapshot_file${NC}"
}
这个脚本提供了完整的系统监控功能,您可以根据实际需求进行调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播