Files
linux-tools/linux_tool.sh
2025-12-20 16:49:59 +08:00

1162 lines
47 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 版权信息
# 四喜科技 免费提供
# 官方网址https://xi.plus
# 多语言支持配置
# 默认语言
default_language="zh_CN"
# 语言选择菜单
select_language() {
while true; do
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 选择语言 / Select Language ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}1. 中文 (Chinese)${NC}"
echo -e "${YELLOW}2. English${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}请选择语言 / Please select language [1-2]: ${NC}"
read lang_choice
case $lang_choice in
1)
return 0
;;
2)
return 1
;;
*)
clear
echo -e "${RED}无效的选择,请重新输入!${NC}"
echo -e "${RED}Invalid choice, please try again!${NC}"
echo -n -e "${PURPLE}按任意键继续...${NC}"
read -n 1
;;
esac
done
}
# 定义语言数组
# 中文
declare -A LANG_ZH_CN=(
[title]="Ubuntu 命令行工具"
[copyright]="四喜科技 免费提供"
[website]="官方网址https://xi.plus"
[menu_1]="1. 查看系统信息"
[menu_2]="2. 查看网络信息"
[menu_3]="3. 卸载系统防火墙"
[menu_4]="4. 修改网络最大连接数到最大"
[menu_5]="5. 系统配置"
[menu_6]="6. 系统更新"
[menu_7]="7. 安装rinetd"
[menu_8]="8. 重启rinetd"
[menu_9]="9. 停止rinetd"
[menu_10]="10. 配置rinetd"
[menu_11]="11. 网络工具"
[menu_12]="12. 脚本自动更新"
[menu_0]="0. 退出"
[prompt_choice]="请输入您的选择 [0-12]:"
[system_info_title]="系统信息"
[network_info_title]="网络信息"
[firewall_uninstall_title]="卸载系统防火墙"
[max_connections_title]="修改网络最大连接数"
[system_update_title]="系统更新"
[rinetd_install_title]="安装rinetd"
[rinetd_restart_title]="重启rinetd"
[rinetd_stop_title]="停止rinetd"
[rinetd_config_title]="配置rinetd"
[network_tools_title]="网络工具"
[script_update_title]="脚本自动更新"
[system_config_title]="系统配置"
[back_menu]="按任意键返回菜单..."
[thank_you]="感谢使用,再见!"
[invalid_choice]="无效的选择,请重新输入!"
[please_continue]="按任意键继续..."
)
# 英文
declare -A LANG_EN=(
[title]="Ubuntu Command Line Tool"
[copyright]="Provided by Sixi Technology"
[website]="Official Website: https://xi.plus"
[menu_1]="1. View System Info"
[menu_2]="2. View Network Info"
[menu_3]="3. Uninstall Firewall"
[menu_4]="4. Set Max Network Connections"
[menu_5]="5. System Configuration"
[menu_6]="6. System Update"
[menu_7]="7. Install rinetd"
[menu_8]="8. Restart rinetd"
[menu_9]="9. Stop rinetd"
[menu_10]="10. Configure rinetd"
[menu_11]="11. Network Tools"
[menu_12]="12. Update Script"
[menu_0]="0. Exit"
[prompt_choice]="Please enter your choice [0-12]:"
[system_info_title]="System Information"
[network_info_title]="Network Information"
[firewall_uninstall_title]="Uninstall Firewall"
[max_connections_title]="Set Max Network Connections"
[system_update_title]="System Update"
[rinetd_install_title]="Install rinetd"
[rinetd_restart_title]="Restart rinetd"
[rinetd_stop_title]="Stop rinetd"
[rinetd_config_title]="Configure rinetd"
[network_tools_title]="Network Tools"
[script_update_title]="Update Script"
[system_config_title]="System Configuration"
[back_menu]="Press any key to return to menu..."
[thank_you]="Thank you for using, goodbye!"
[invalid_choice]="Invalid choice, please try again!"
[please_continue]="Press any key to continue..."
)
# 语言选择
select_language
if [ $? -eq 0 ]; then
current_language="zh_CN"
current_lang_array="LANG_ZH_CN"
else
current_language="en"
current_lang_array="LANG_EN"
fi
# 获取翻译函数
__() {
local key="$1"
# 根据当前语言选择对应的数组
if [ "$current_language" == "zh_CN" ]; then
echo "${LANG_ZH_CN[$key]}"
else
echo "${LANG_EN[$key]}"
fi
}
# 定义颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 错误处理函数
error_handler() {
local exit_code=$1
local line_num=$2
local command=$3
local error_msg="脚本在第 $line_num 行执行 '$command' 时失败,退出码: $exit_code"
log_message "ERROR" "$error_msg"
echo -e "${RED}[ERROR] $error_msg${NC}"
echo -e "${YELLOW}请检查命令执行情况,或联系技术支持。${NC}"
read -n 1 -p "按任意键返回菜单..."
# 恢复正常执行流程
set +e
}
# 设置全局错误捕获
trap 'error_handler $? $LINENO "$BASH_COMMAND"' ERR
# 设置严格模式
set -euo pipefail
# 性能优化跟踪apt-get update是否已执行
APT_UPDATED=false
# 日志配置
LOG_DIR="/var/log/linux-tool"
LOG_FILE="$LOG_DIR/linux-tool.log"
# 创建日志目录
mkdir -p "$LOG_DIR" 2>/dev/null
# 日志记录函数
log_message() {
local level=$1
local message=$2
local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$timestamp] [$level] $message" >> "$LOG_FILE"
# 仅将错误级别输出到控制台
if [ "$level" == "ERROR" ]; then
echo -e "${RED}[$timestamp] [$level] $message${NC}"
fi
}
# 性能优化智能apt-get update函数
# 只在需要时执行apt-get update避免重复调用
smart_apt_update() {
if [ "$APT_UPDATED" == "false" ]; then
echo -e "${YELLOW}正在更新包列表...${NC}"
sudo apt-get update
APT_UPDATED=true
log_message "INFO" "执行apt-get update"
fi
}
# 清除屏幕
clear
# 记录脚本启动日志
log_message "INFO" "脚本启动,当前用户: $(whoami),当前目录: $(pwd)"
# 脚本自动更新功能
update_script() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 脚本自动更新 ${NC}"
echo -e "${CYAN}==========================================${NC}"
log_message "INFO" "开始执行脚本自动更新"
local script_path="$(realpath "$0")"
local script_dir="$(dirname "$script_path")"
echo -e "${YELLOW}正在检查更新...${NC}"
# 进入脚本目录
cd "$script_dir" || {
echo -e "${RED}无法进入脚本目录!${NC}"
log_message "ERROR" "无法进入脚本目录: $script_dir"
read -n 1 -p "按任意键返回菜单..."
return 1
}
# 检查是否为git仓库
if [ ! -d ".git" ]; then
echo -e "${RED}当前目录不是git仓库无法自动更新${NC}"
log_message "ERROR" "当前目录不是git仓库无法自动更新"
read -n 1 -p "按任意键返回菜单..."
return 1
fi
# 拉取最新代码
git pull origin main 2>&1 | tee -a "$LOG_FILE" || {
echo -e "${RED}拉取更新失败!${NC}"
log_message "ERROR" "git pull 失败"
read -n 1 -p "按任意键返回菜单..."
return 1
}
echo -e "${GREEN}脚本更新完成!${NC}"
echo -e "${YELLOW}请重新运行脚本以使用最新版本。${NC}"
log_message "INFO" "脚本更新完成"
read -n 1 -p "按任意键返回菜单..."
}
# 网络工具功能菜单
network_tools() {
while true; do
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 网络工具 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}1. 网络测速 (speedtest-cli)${NC}"
echo -e "${YELLOW}2. 端口扫描 (nmap)${NC}"
echo -e "${YELLOW}3. 查看网络连接${NC}"
echo -e "${YELLOW}4. DNS测试 (dig)${NC}"
echo -e "${YELLOW}5. 路由追踪 (traceroute)${NC}"
echo -e "${YELLOW}6. Ping测试${NC}"
echo -e "${YELLOW}7. 域名解析测试${NC}"
echo -e "${YELLOW}8. 网络流量监控${NC}"
echo -e "${YELLOW}9. 查看MAC地址${NC}"
echo -e "${YELLOW}10. 查看ARP表${NC}"
echo -e "${YELLOW}0. 返回主菜单${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}请输入您的选择 [0-10]: ${NC}"
read net_choice
case $net_choice in
1)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 网络测速 ${NC}"
echo -e "${CYAN}==========================================${NC}"
# 检查speedtest-cli是否安装
if ! command -v speedtest-cli &> /dev/null; then
echo -e "${YELLOW}正在安装speedtest-cli...${NC}"
smart_apt_update
sudo apt-get install -y speedtest-cli
fi
echo -e "${YELLOW}开始网络测速...${NC}"
speedtest-cli
log_message "INFO" "执行网络测速"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
2)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 端口扫描 ${NC}"
echo -e "${CYAN}==========================================${NC}"
# 检查nmap是否安装
if ! command -v nmap &> /dev/null; then
echo -e "${YELLOW}正在安装nmap...${NC}"
smart_apt_update
sudo apt-get install -y nmap
fi
echo -n -e "${PURPLE}请输入要扫描的目标IP或域名: ${NC}"
read target
echo -e "${YELLOW}开始扫描目标 ${target}...${NC}"
sudo nmap -sS -p 1-1000 $target
log_message "INFO" "执行端口扫描,目标: $target"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
3)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看网络连接 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}1. 使用 netstat 查看${NC}"
echo -e "${YELLOW}2. 使用 ss 查看${NC}"
echo -n -e "${PURPLE}请选择工具 [1-2]: ${NC}"
read conn_tool
case $conn_tool in
1)
# 检查netstat是否安装
if ! command -v netstat &> /dev/null; then
echo -e "${YELLOW}正在安装net-tools...${NC}"
smart_apt_update
sudo apt-get install -y net-tools
fi
echo -e "${YELLOW}使用 netstat 查看网络连接:${NC}"
sudo netstat -tuln
;;
2)
# 检查ss是否安装
if ! command -v ss &> /dev/null; then
echo -e "${YELLOW}正在安装iproute2...${NC}"
smart_apt_update
sudo apt-get install -y iproute2
fi
echo -e "${YELLOW}使用 ss 查看网络连接:${NC}"
sudo ss -tuln
;;
*)
echo -e "${RED}无效的选择!${NC}"
;;
esac
log_message "INFO" "查看网络连接,使用工具: $conn_tool"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
4)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} DNS测试 ${NC}"
echo -e "${CYAN}==========================================${NC}"
# 检查dig是否安装
if ! command -v dig &> /dev/null; then
echo -e "${YELLOW}正在安装dnsutils...${NC}"
smart_apt_update
sudo apt-get install -y dnsutils
fi
echo -n -e "${PURPLE}请输入要测试的域名: ${NC}"
read domain
echo -e "${YELLOW}开始DNS测试...${NC}"
dig $domain
log_message "INFO" "执行DNS测试域名: $domain"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
5)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 路由追踪 ${NC}"
echo -e "${CYAN}==========================================${NC}"
# 检查traceroute是否安装
if ! command -v traceroute &> /dev/null; then
echo -e "${YELLOW}正在安装traceroute...${NC}"
smart_apt_update
sudo apt-get install -y traceroute
fi
echo -n -e "${PURPLE}请输入要追踪的目标IP或域名: ${NC}"
read target
echo -e "${YELLOW}开始路由追踪...${NC}"
traceroute $target
log_message "INFO" "执行路由追踪,目标: $target"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
6)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} Ping测试 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}请输入要ping的目标IP或域名: ${NC}"
read target
echo -n -e "${PURPLE}请输入ping的次数默认4次: ${NC}"
read count
count=${count:-4}
echo -e "${YELLOW}开始Ping测试...${NC}"
ping -c $count $target
log_message "INFO" "执行Ping测试目标: $target,次数: $count"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
7)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 域名解析测试 ${NC}"
echo -e "${CYAN}==========================================${NC}"
# 检查nslookup是否安装
if ! command -v nslookup &> /dev/null; then
echo -e "${YELLOW}正在安装dnsutils...${NC}"
smart_apt_update
sudo apt-get install -y dnsutils
fi
echo -n -e "${PURPLE}请输入要解析的域名: ${NC}"
read domain
echo -e "${YELLOW}开始域名解析测试...${NC}"
nslookup $domain
log_message "INFO" "执行域名解析测试,域名: $domain"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
8)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 网络流量监控 ${NC}"
echo -e "${CYAN}==========================================${NC}"
# 检查ifstat是否安装
if ! command -v ifstat &> /dev/null; then
echo -e "${YELLOW}正在安装ifstat...${NC}"
smart_apt_update
sudo apt-get install -y ifstat
fi
echo -e "${YELLOW}开始网络流量监控...${NC}"
echo -e "${YELLOW}按 Ctrl+C 停止监控${NC}"
ifstat -t
log_message "INFO" "执行网络流量监控"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
9)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看MAC地址 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}网络接口MAC地址:${NC}"
ip link show | grep -E 'ether|link/ether'
log_message "INFO" "查看MAC地址"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
10)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看ARP表 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}ARP表内容:${NC}"
arp -a
log_message "INFO" "查看ARP表"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回网络工具菜单...${NC}"
read -n 1
;;
0)
break
;;
*)
clear
echo -e "${RED}无效的选择,请重新输入!${NC}"
echo -n -e "${PURPLE}按任意键继续...${NC}"
read -n 1
;;
esac
done
}
# 系统配置子菜单
system_config() {
while true; do
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 系统配置 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}1. 查看CPU使用率${NC}"
echo -e "${YELLOW}2. 查看内存使用率${NC}"
echo -e "${YELLOW}3. 查看磁盘使用率${NC}"
echo -e "${YELLOW}4. 查看系统负载${NC}"
echo -e "${YELLOW}5. 查看登录用户信息${NC}"
echo -e "${YELLOW}6. 查看系统服务状态${NC}"
echo -e "${YELLOW}0. 返回主菜单${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}请输入您的选择 [0-6]: ${NC}"
read config_choice
case $config_choice in
1)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看CPU使用率 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}CPU使用率 (按 Ctrl+C 停止):${NC}"
top -bn1 | grep "%Cpu(s)" || mpstat
log_message "INFO" "查看CPU使用率"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回系统配置菜单...${NC}"
read -n 1
;;
2)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看内存使用率 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}内存使用情况:${NC}"
free -h
echo -e "\n${YELLOW}详细内存信息:${NC}"
cat /proc/meminfo | head -20
log_message "INFO" "查看内存使用率"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回系统配置菜单...${NC}"
read -n 1
;;
3)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看磁盘使用率 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}磁盘分区使用率:${NC}"
df -h
echo -e "\n${YELLOW}磁盘I/O统计:${NC}"
iostat -x
log_message "INFO" "查看磁盘使用率"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回系统配置菜单...${NC}"
read -n 1
;;
4)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看系统负载 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}系统负载:${NC}"
uptime
echo -e "\n${YELLOW}详细负载信息:${NC}"
top -bn1 | head -20
log_message "INFO" "查看系统负载"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回系统配置菜单...${NC}"
read -n 1
;;
5)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看登录用户信息 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}当前登录用户:${NC}"
w
echo -e "\n${YELLOW}用户登录历史:${NC}"
last | head -20
log_message "INFO" "查看登录用户信息"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回系统配置菜单...${NC}"
read -n 1
;;
6)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 查看系统服务状态 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}1. 查看所有服务状态${NC}"
echo -e "${YELLOW}2. 查看特定服务状态${NC}"
echo -n -e "${PURPLE}请选择 [1-2]: ${NC}"
read service_choice
case $service_choice in
1)
echo -e "${YELLOW}所有服务状态:${NC}"
systemctl list-units --type=service --state=running | head -30
log_message "INFO" "查看所有服务状态"
;;
2)
echo -n -e "${PURPLE}请输入服务名称: ${NC}"
read service_name
echo -e "${YELLOW}服务 ${service_name} 状态:${NC}"
systemctl status $service_name
log_message "INFO" "查看服务状态,服务名称: $service_name"
;;
*)
echo -e "${RED}无效的选择!${NC}"
;;
esac
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回系统配置菜单...${NC}"
read -n 1
;;
0)
break
;;
*)
clear
echo -e "${RED}无效的选择,请重新输入!${NC}"
echo -n -e "${PURPLE}按任意键继续...${NC}"
read -n 1
;;
esac
done
}
# 主菜单函数
show_menu() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} $(__) title ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${PURPLE} $(__) copyright ${NC}"
echo -e "${BLUE} $(__) website ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}$(__ menu_1)${NC}"
echo -e "${YELLOW}$(__ menu_2)${NC}"
echo -e "${YELLOW}$(__ menu_3)${NC}"
echo -e "${YELLOW}$(__ menu_4)${NC}"
echo -e "${YELLOW}$(__ menu_5)${NC}"
echo -e "${YELLOW}$(__ menu_6)${NC}"
echo -e "${YELLOW}$(__ menu_7)${NC}"
echo -e "${YELLOW}$(__ menu_8)${NC}"
echo -e "${YELLOW}$(__ menu_9)${NC}"
echo -e "${YELLOW}$(__ menu_10)${NC}"
echo -e "${YELLOW}$(__ menu_11)${NC}"
echo -e "${YELLOW}$(__ menu_12)${NC}"
echo -e "${YELLOW}$(__ menu_0)${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}$(__ prompt_choice) ${NC}"
}
# 查看系统信息
view_system_info() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 系统信息 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}操作系统:${NC} $(lsb_release -d | cut -f2)"
echo -e "${YELLOW}内核版本:${NC} $(uname -r)"
echo -e "${YELLOW}CPU信息:${NC} $(lscpu | grep 'Model name' | cut -f2 -d:)"
echo -e "${YELLOW}内存信息:${NC} $(free -h | grep Mem | awk '{print $2}')"
echo -e "${YELLOW}磁盘信息:${NC} $(df -h | grep '/dev/' | grep -v tmpfs)"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回菜单...${NC}"
read -n 1
}
# 查看网络信息
view_network_info() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 网络信息 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}IP地址:${NC} $(ip addr show | grep inet | grep -v 127.0.0.1 | cut -d' ' -f6 | cut -d'/' -f1)"
echo -e "${YELLOW}网关:${NC} $(ip route | grep default | cut -d' ' -f3)"
echo -e "${YELLOW}DNS服务器:${NC} $(cat /etc/resolv.conf | grep nameserver | cut -d' ' -f2)"
echo -e "${YELLOW}网络接口:${NC} $(ip link show | grep UP | grep -v lo | cut -d':' -f2)"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回菜单...${NC}"
read -n 1
}
# 卸载系统防火墙
uninstall_firewall() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 卸载系统防火墙 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}正在卸载ufw...${NC}"
sudo apt-get remove -y ufw
sudo apt-get purge -y ufw
echo -e "${GREEN}防火墙卸载完成!${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回菜单...${NC}"
read -n 1
}
# 修改网络最大连接数到最大
modify_max_connections() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 修改网络最大连接数 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}正在修改网络最大连接数...${NC}"
# 修改系统限制
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
# 修改sysctl配置
echo "net.core.somaxconn = 65535" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_max_tw_buckets = 65535" | sudo tee -a /etc/sysctl.conf
# 应用sysctl配置
sudo sysctl -p
echo -e "${GREEN}网络最大连接数修改完成!${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回菜单...${NC}"
read -n 1
}
# 支持的Ubuntu版本列表
declare -A SUPPORTED_UBUNTU_VERSIONS=(
["trusty"]="14.04 LTS"
["xenial"]="16.04 LTS"
["bionic"]="18.04 LTS"
["focal"]="20.04 LTS"
["jammy"]="22.04 LTS"
["noble"]="24.04 LTS"
["oracular"]="24.10"
)
# 系统更新功能
system_update() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 系统更新 ${NC}"
echo -e "${CYAN}==========================================${NC}"
# 获取当前系统信息
OS_NAME=$(lsb_release -i | cut -f2)
CURRENT_VERSION=$(lsb_release -c | cut -f2)
CURRENT_RELEASE=$(lsb_release -r | cut -f2)
echo -e "${YELLOW}当前系统: ${OS_NAME} ${CURRENT_RELEASE} (${CURRENT_VERSION})${NC}"
# 检查是否为Ubuntu系统
if [ "$OS_NAME" != "Ubuntu" ]; then
echo -e "${RED}警告当前系统不是Ubuntu部分功能可能无法正常使用${NC}"
echo -e "${YELLOW}继续执行更新?(y/n): ${NC}"
read -n 1 confirm
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
echo -e "${YELLOW}取消更新。${NC}"
read -n 1 -p "按任意键返回菜单..."
return 1
fi
fi
echo -e "${YELLOW}支持的Ubuntu版本:${NC}"
for version in "${!SUPPORTED_UBUNTU_VERSIONS[@]}"; do
echo -e " - ${version}: ${SUPPORTED_UBUNTU_VERSIONS[$version]}"
done
echo -e "\n${YELLOW}1. 自动选择系统版本更新${NC}"
echo -e "${YELLOW}2. 手动选择系统版本更新${NC}"
echo -n -e "${PURPLE}请输入您的选择 [1-2]: ${NC}"
read update_choice
case $update_choice in
1)
echo -e "${YELLOW}正在使用当前系统版本 ${CURRENT_VERSION} 进行更新...${NC}"
log_message "INFO" "开始系统更新,当前版本: ${CURRENT_VERSION}"
# 根据Ubuntu版本选择更新命令
if [ "$OS_NAME" == "Ubuntu" ] && [[ " ${!SUPPORTED_UBUNTU_VERSIONS[@]} " =~ " $CURRENT_VERSION " ]]; then
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
else
# 通用更新命令适用于其他Ubuntu版本或Linux发行版
sudo apt-get update || sudo apt update
sudo apt-get upgrade -y || sudo apt upgrade -y
sudo apt-get dist-upgrade -y || sudo apt full-upgrade -y
sudo apt-get autoremove -y || sudo apt autoremove -y
fi
echo -e "${GREEN}系统更新完成!${NC}"
log_message "INFO" "系统更新完成"
;;
2)
echo -n -e "${PURPLE}请输入要更新的系统版本代号jammy, focal: ${NC}"
read selected_version
if [ "$selected_version" == "$CURRENT_VERSION" ]; then
echo -e "${YELLOW}正在使用选择的系统版本 ${selected_version} 进行更新...${NC}"
log_message "INFO" "开始系统更新,使用选择的版本: ${selected_version}"
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
echo -e "${GREEN}系统更新完成!${NC}"
log_message "INFO" "系统更新完成"
else
# 检查选择的版本是否受支持
if [[ " ${!SUPPORTED_UBUNTU_VERSIONS[@]} " =~ " $selected_version " ]]; then
echo -e "${RED}错误:选择的系统版本 ${selected_version} 与当前系统版本 ${CURRENT_VERSION} 不匹配!${NC}"
echo -e "${YELLOW}当前系统版本: ${CURRENT_VERSION} (${SUPPORTED_UBUNTU_VERSIONS[$CURRENT_VERSION]:-未知版本})${NC}"
echo -e "${YELLOW}选择的版本: ${selected_version} (${SUPPORTED_UBUNTU_VERSIONS[$selected_version]})${NC}"
else
echo -e "${RED}错误:选择的系统版本 ${selected_version} 不是受支持的Ubuntu版本${NC}"
fi
log_message "ERROR" "选择的系统版本无效: ${selected_version}"
fi
;;
*)
echo -e "${RED}无效的选择!${NC}"
log_message "WARNING" "无效的更新选择: ${update_choice}"
;;
esac
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回菜单...${NC}"
read -n 1
}
# 安装rinetd
install_rinetd() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 安装rinetd ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}正在安装rinetd...${NC}"
smart_apt_update
sudo apt-get install -y rinetd
echo -e "${GREEN}rinetd安装完成${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回菜单...${NC}"
read -n 1
}
# 重启rinetd
restart_rinetd() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 重启rinetd ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}正在重启rinetd...${NC}"
sudo systemctl restart rinetd
echo -e "${GREEN}rinetd重启完成${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回菜单...${NC}"
read -n 1
}
# 停止rinetd
stop_rinetd() {
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 停止rinetd ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}正在停止rinetd...${NC}"
sudo systemctl stop rinetd
echo -e "${GREEN}rinetd停止完成${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回菜单...${NC}"
read -n 1
}
# 配置rinetd
configure_rinetd() {
while true; do
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 配置rinetd ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -e "${YELLOW}1. 查看当前中转配置${NC}"
echo -e "${YELLOW}2. 添加中转配置${NC}"
echo -e "${YELLOW}3. 修改中转配置${NC}"
echo -e "${YELLOW}4. 删除中转配置${NC}"
echo -e "${YELLOW}0. 返回主菜单${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}请输入您的选择 [0-4]: ${NC}"
read rinetd_choice
case $rinetd_choice in
1)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 当前中转配置 ${NC}"
echo -e "${CYAN}==========================================${NC}"
if [ -f /etc/rinetd.conf ]; then
echo -e "${YELLOW}配置内容:${NC}"
cat /etc/rinetd.conf
else
echo -e "${RED}rinetd配置文件不存在${NC}"
fi
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回rinetd配置菜单...${NC}"
read -n 1
;;
2)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 添加中转配置 ${NC}"
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}输入本地IP默认0.0.0.0: ${NC}"
read local_ip
local_ip=${local_ip:-0.0.0.0}
echo -n -e "${PURPLE}输入本地端口: ${NC}"
read local_port
echo -n -e "${PURPLE}输入目标域名: ${NC}"
read target_domain
echo -n -e "${PURPLE}输入目标端口: ${NC}"
read target_port
echo -n -e "${PURPLE}是否添加到配置文件?(y/n默认y): ${NC}"
read add_to_file
add_to_file=${add_to_file:-y}
if [ "$add_to_file" == "y" ] || [ "$add_to_file" == "Y" ]; then
echo "$local_ip $local_port $target_domain $target_port" | sudo tee -a /etc/rinetd.conf
echo -e "${GREEN}中转配置添加完成!${NC}"
# 配置修改后立即重启rinetd
echo -e "${YELLOW}正在重启rinetd...${NC}"
sudo systemctl restart rinetd
echo -e "${GREEN}rinetd重启完成${NC}"
fi
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回rinetd配置菜单...${NC}"
read -n 1
;;
3)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 修改中转配置 ${NC}"
echo -e "${CYAN}==========================================${NC}"
if [ -f /etc/rinetd.conf ]; then
# 显示当前配置并编号
echo -e "${YELLOW}当前配置:${NC}"
sudo awk '{print NR ". " $0}' /etc/rinetd.conf
echo -n -e "${PURPLE}输入要修改的配置项序号: ${NC}"
read config_num
# 获取当前配置行
current_config=$(sudo sed -n "${config_num}p" /etc/rinetd.conf)
if [ -n "$current_config" ]; then
# 解析当前配置
current_local_ip=$(echo $current_config | awk '{print $1}')
current_local_port=$(echo $current_config | awk '{print $2}')
current_target_domain=$(echo $current_config | awk '{print $3}')
current_target_port=$(echo $current_config | awk '{print $4}')
echo -n -e "${PURPLE}输入新的本地IP默认$current_local_ip: ${NC}"
read new_local_ip
new_local_ip=${new_local_ip:-$current_local_ip}
echo -n -e "${PURPLE}输入新的本地端口(默认$current_local_port: ${NC}"
read new_local_port
new_local_port=${new_local_port:-$current_local_port}
echo -n -e "${PURPLE}输入新的目标域名(默认$current_target_domain: ${NC}"
read new_target_domain
new_target_domain=${new_target_domain:-$current_target_domain}
echo -n -e "${PURPLE}输入新的目标端口(默认$current_target_port: ${NC}"
read new_target_port
new_target_port=${new_target_port:-$current_target_port}
echo -n -e "${PURPLE}是否保存修改?(y/n默认y): ${NC}"
read save_changes
save_changes=${save_changes:-y}
if [ "$save_changes" == "y" ] || [ "$save_changes" == "Y" ]; then
# 修改配置文件
sudo sed -i "${config_num}c ${new_local_ip} ${new_local_port} ${new_target_domain} ${new_target_port}" /etc/rinetd.conf
echo -e "${GREEN}中转配置修改完成!${NC}"
# 配置修改后立即重启rinetd
echo -e "${YELLOW}正在重启rinetd...${NC}"
sudo systemctl restart rinetd
echo -e "${GREEN}rinetd重启完成${NC}"
fi
else
echo -e "${RED}无效的配置项序号!${NC}"
fi
else
echo -e "${RED}rinetd配置文件不存在${NC}"
fi
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回rinetd配置菜单...${NC}"
read -n 1
;;
4)
clear
echo -e "${CYAN}==========================================${NC}"
echo -e "${GREEN} 删除中转配置 ${NC}"
echo -e "${CYAN}==========================================${NC}"
if [ -f /etc/rinetd.conf ]; then
# 显示当前配置并编号
echo -e "${YELLOW}当前配置:${NC}"
sudo awk '{print NR ". " $0}' /etc/rinetd.conf
echo -n -e "${PURPLE}输入要删除的配置项序号: ${NC}"
read config_num
# 检查配置项是否存在
current_config=$(sudo sed -n "${config_num}p" /etc/rinetd.conf)
if [ -n "$current_config" ]; then
echo -n -e "${PURPLE}是否删除该配置项?(y/n默认y): ${NC}"
read delete_config
delete_config=${delete_config:-y}
if [ "$delete_config" == "y" ] || [ "$delete_config" == "Y" ]; then
# 删除配置行
sudo sed -i "${config_num}d" /etc/rinetd.conf
echo -e "${GREEN}中转配置删除完成!${NC}"
# 配置修改后立即重启rinetd
echo -e "${YELLOW}正在重启rinetd...${NC}"
sudo systemctl restart rinetd
echo -e "${GREEN}rinetd重启完成${NC}"
fi
else
echo -e "${RED}无效的配置项序号!${NC}"
fi
else
echo -e "${RED}rinetd配置文件不存在${NC}"
fi
echo -e "${CYAN}==========================================${NC}"
echo -n -e "${PURPLE}按任意键返回rinetd配置菜单...${NC}"
read -n 1
;;
0)
break
;;
*)
echo -e "${RED}无效的选择!${NC}"
echo -n -e "${PURPLE}按任意键继续...${NC}"
read -n 1
;;
esac
done
}
# 主循环
while true; do
show_menu
read choice
case $choice in
1)
log_message "INFO" "用户选择:查看系统信息"
view_system_info
;;
2)
log_message "INFO" "用户选择:查看网络信息"
view_network_info
;;
3)
log_message "INFO" "用户选择:卸载系统防火墙"
uninstall_firewall
;;
4)
log_message "INFO" "用户选择:修改网络最大连接数"
modify_max_connections
;;
5)
log_message "INFO" "用户选择:系统配置"
system_config
;;
6)
log_message "INFO" "用户选择:系统更新"
system_update
;;
7)
log_message "INFO" "用户选择安装rinetd"
install_rinetd
;;
8)
log_message "INFO" "用户选择重启rinetd"
restart_rinetd
;;
9)
log_message "INFO" "用户选择停止rinetd"
stop_rinetd
;;
10)
log_message "INFO" "用户选择配置rinetd"
configure_rinetd
;;
11)
log_message "INFO" "用户选择:网络工具"
network_tools
;;
12)
log_message "INFO" "用户选择:脚本自动更新"
update_script
;;
0)
log_message "INFO" "用户选择:退出脚本"
clear
echo -e "${GREEN}$(__ thank_you)${NC}"
exit 0
;;
*)
log_message "WARNING" "用户输入无效选择:$choice"
clear
echo -e "${RED}$(__ invalid_choice)${NC}"
echo -n -e "${PURPLE}$(__ please_continue)${NC}"
read -n 1
;;
esac
done