- A+
所属分类:Shell
功能:通过菜单交互简化操作
#!/bin/bash
#适用于 CentOS 系统
# 定义颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 无颜色
# 显示菜单函数
show_menu() {
clear
echo -e "${YELLOW}===== 服务器管理工具 ====${NC}"
echo "1. 系统信息概览"
echo "2. 查看内存和CPU使用情况"
echo "3. 查看磁盘空间"
echo "4. 清理临时文件"
echo "5. 重启服务"
echo "6. 查看日志"
echo "7. 网络状态检测"
echo "8. 备份数据库"
echo "9. 退出"
echo -n "请选择操作 [1-9]: "
}
# 系统信息概览
system_info() {
echo -e "${GREEN}===== 系统信息概览 ====${NC}"
echo "系统版本: $(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2)"
echo "内核版本: $(uname -r)"
echo "主机名: $(hostname)"
echo "当前时间: $(date)"
echo "运行时间: $(uptime -p)"
echo "CPU信息: $(lscpu | grep 'Model name' | head -1 | cut -d: -f2 | sed 's/^[ \t]*//')"
echo "内存总量: $(free -h | grep Mem | awk '{print $2}')"
echo "磁盘空间: $(df -h / | grep /dev | awk '{print "总量: " $2 ", 已用: " $3 ", 剩余: " $4}')"
echo "IP地址: $(ip addr | grep inet | grep -v 127.0.0.1 | grep -v inet6 | head -1 | awk '{print $2}')"
echo -e "${YELLOW}按Enter继续...${NC}"
read
}
# 查看内存和CPU使用情况
memory_cpu() {
echo -e "${GREEN}===== 内存和CPU使用情况 ====${NC}"
echo "内存使用情况:"
free -h
echo -e "\nCPU使用情况:"
top -bn1 | grep "Cpu(s)" | awk '{print "CPU使用率: " $2 + $4 "%"}'
echo -e "\n正在运行的进程:"
ps aux --sort=-%mem | head -5
echo -e "${YELLOW}按Enter继续...${NC}"
read
}
# 查看磁盘空间
disk_space() {
echo -e "${GREEN}===== 磁盘空间使用情况 ====${NC}"
df -h
echo -e "\n当前目录下最大的10个文件:"
find . -type f -exec du -h {} + | sort -rh | head -10
echo -e "${YELLOW}按Enter继续...${NC}"
read
}
# 清理临时文件
clean_temp() {
echo -e "${GREEN}===== 清理临时文件 ====${NC}"
echo -n "确定要清理临时文件吗? (y/n): "
read confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
echo "正在清理 /tmp 和 /var/tmp 目录..."
rm -rf /tmp/* /var/tmp/*
echo -e "${GREEN}清理完成!${NC}"
else
echo "已取消清理"
fi
echo -e "${YELLOW}按Enter继续...${NC}"
read
}
# 重启服务
restart_service() {
echo -e "${GREEN}===== 重启服务 ====${NC}"
echo "1. Nginx"
echo "2. Apache"
echo "3. MySQL/MariaDB"
echo "4. PostgreSQL"
echo "5. Redis"
echo "6. 自定义服务"
echo "7. 返回主菜单"
echo -n "请选择要重启的服务 [1-7]: "
read service_choice
case $service_choice in
1) service_name="nginx" ;;
2) service_name="httpd" ;;
3) service_name="mariadb" ;;
4) service_name="postgresql" ;;
5) service_name="redis" ;;
6)
echo -n "请输入服务名称: "
read service_name
;;
7) return ;;
*)
echo "无效选择,返回主菜单"
echo -e "${YELLOW}按Enter继续...${NC}"
read
return
;;
esac
echo -n "确定要重启 $service_name 服务吗? (y/n): "
read confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
echo "正在重启 $service_name 服务..."
systemctl restart $service_name
if [ $? -eq 0 ]; then
echo -e "${GREEN}$service_name 服务已成功重启${NC}"
else
echo -e "${RED}重启 $service_name 服务失败,请检查日志${NC}"
fi
else
echo "已取消重启"
fi
echo -e "${YELLOW}按Enter继续...${NC}"
read
}
# 查看日志
view_logs() {
echo -e "${GREEN}===== 查看日志 ====${NC}"
echo "1. 系统日志 (/var/log/messages)"
echo "2. Nginx 访问日志"
echo "3. Nginx 错误日志"
echo "4. MySQL/MariaDB 日志"
echo "5. PostgreSQL 日志"
echo "6. 自定义日志文件"
echo "7. 返回主菜单"
echo -n "请选择要查看的日志 [1-7]: "
read log_choice
case $log_choice in
1) log_file="/var/log/messages" ;;
2) log_file="/var/log/nginx/access.log" ;;
3) log_file="/var/log/nginx/error.log" ;;
4) log_file="/var/log/mariadb/mariadb.log" ;;
5) log_file="/var/lib/pgsql/data/pg_log/postgresql-$(date +%Y-%m-%d).log" ;;
6)
echo -n "请输入日志文件路径: "
read log_file
;;
7) return ;;
*)
echo "无效选择,返回主菜单"
echo -e "${YELLOW}按Enter继续...${NC}"
read
return
;;
esac
if [ -f "$log_file" ]; then
echo "正在查看 $log_file 的最新50行..."
tail -n 50 "$log_file"
else
echo -e "${RED}日志文件 $log_file 不存在${NC}"
fi
echo -e "${YELLOW}按Enter继续...${NC}"
read
}
# 网络状态检测
network_status() {
echo -e "${GREEN}===== 网络状态检测 ====${NC}"
echo "正在检测网络连接..."
echo "本地IP: $(hostname -I)"
echo "网关: $(ip route | grep default | awk '{print $3}')"
echo -e "\n测试DNS解析:"
ping -c 2 google.com &> /dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}DNS解析正常${NC}"
else
echo -e "${RED}DNS解析失败${NC}"
fi
echo -e "\n测试外网连接:"
curl -s --head --request GET https://www.baidu.com | grep "200 OK" &> /dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}外网连接正常${NC}"
else
echo -e "${RED}外网连接失败${NC}"
fi
echo -e "\n开放的TCP端口:"
netstat -tuln | grep LISTEN
echo -e "${YELLOW}按Enter继续...${NC}"
read
}
# 备份数据库
backup_database() {
echo -e "${GREEN}===== 备份数据库 ====${NC}"
echo "1. MySQL/MariaDB"
echo "2. PostgreSQL"
echo "3. 返回主菜单"
echo -n "请选择要备份的数据库类型 [1-3]: "
read db_choice
case $db_choice in
1)
echo -n "输入数据库用户名: "
read db_user
echo -n "输入数据库密码: "
read -s db_password
echo
echo -n "输入要备份的数据库名: "
read db_name
echo -n "输入备份文件保存路径: "
read backup_path
if [ ! -d "$backup_path" ]; then
mkdir -p "$backup_path"
fi
backup_file="$backup_path/${db_name}_$(date +%Y%m%d_%H%M%S).sql"
echo "正在备份 $db_name 数据库..."
mysqldump -u "$db_user" -p"$db_password" "$db_name" > "$backup_file"
if [ $? -eq 0 ]; then
echo -e "${GREEN}备份成功: $backup_file${NC}"
echo "正在压缩备份文件..."
gzip "$backup_file"
echo -e "${GREEN}压缩完成: $backup_file.gz${NC}"
else
echo -e "${RED}备份失败,请检查数据库连接信息${NC}"
fi
;;
2)
echo -n "输入数据库用户名: "
read db_user
echo -n "输入数据库密码: "
read -s db_password
echo
echo -n "输入要备份的数据库名: "
read db_name
echo -n "输入备份文件保存路径: "
read backup_path
if [ ! -d "$backup_path" ]; then
mkdir -p "$backup_path"
fi
backup_file="$backup_path/${db_name}_$(date +%Y%m%d_%H%M%S).sql"
echo "正在备份 $db_name 数据库..."
PGPASSWORD="$db_password" pg_dump -U "$db_user" "$db_name" > "$backup_file"
if [ $? -eq 0 ]; then
echo -e "${GREEN}备份成功: $backup_file${NC}"
echo "正在压缩备份文件..."
gzip "$backup_file"
echo -e "${GREEN}压缩完成: $backup_file.gz${NC}"
else
echo -e "${RED}备份失败,请检查数据库连接信息${NC}"
fi
;;
3) return ;;
*)
echo "无效选择,返回主菜单"
;;
esac
echo -e "${YELLOW}按Enter继续...${NC}"
read
}
# 主程序
while true; do
show_menu
read choice
case $choice in
1) system_info ;;
2) memory_cpu ;;
3) disk_space ;;
4) clean_temp ;;
5) restart_service ;;
6) view_logs ;;
7) network_status ;;
8) backup_database ;;
9)
echo -e "${GREEN}感谢使用服务器管理工具,再见!${NC}"
exit 0
;;
*)
echo -e "${RED}无效选择,请重试${NC}"
sleep 1
;;
esac
done
