From 131477229a53f09cd67fd0a15afeb685f14baaee Mon Sep 17 00:00:00 2001 From: ert Date: Sat, 20 Dec 2025 15:00:12 +0800 Subject: [PATCH] first commit --- README.md | 64 ++++++++ TODO.md | 19 +++ linux_tool.sh | 426 ++++++++++++++++++++++++++++++++++++++++++++++++++ 需求.md | 35 +++++ 4 files changed, 544 insertions(+) create mode 100644 README.md create mode 100644 TODO.md create mode 100755 linux_tool.sh create mode 100644 需求.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..c7910b4 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# Ubuntu 命令行工具 + +一个适用于Ubuntu的多功能命令行工具,提供系统管理、网络配置和rinetd管理等功能。 + +## 功能特点 + +### 1. 系统管理 +- 查看系统信息(操作系统、内核版本、CPU、内存、磁盘) +- 查看网络信息(IP地址、网关、DNS服务器、网络接口) +- 卸载系统防火墙(ufw) +- 修改网络最大连接数到最大 + +### 2. 系统更新 +- 自动选择系统版本更新 +- 手动选择系统版本更新(包含版本匹配检查) +- 强制更新和清理无用更新 + +### 3. rinetd管理 +- 安装rinetd +- 重启rinetd +- 停止rinetd +- 配置rinetd + - 查看当前中转配置 + - 添加中转配置 + - 修改中转配置 + - 删除中转配置 + +## 安装和使用 + +### 1. 克隆或下载脚本 + +### 2. 赋予执行权限 +```bash +chmod +x linux_tool.sh +``` + +### 3. 运行脚本 +```bash +sudo ./linux_tool.sh +``` + +## 使用说明 + +1. 运行脚本后,会显示主菜单 +2. 输入对应功能的数字编号,按回车执行 +3. 根据提示进行操作 +4. 按任意键返回菜单 + +## 注意事项 + +- 建议使用sudo权限运行脚本,因为部分功能需要管理员权限 +- 系统更新功能会自动处理不同Ubuntu版本的更新 +- rinetd配置修改后需要重启rinetd才能生效 +- 使用前请确保了解各功能的作用,避免误操作 + +## 支持的Ubuntu版本 + +- Ubuntu 20.04 LTS (Focal Fossa) +- Ubuntu 22.04 LTS (Jammy Jellyfish) +- Ubuntu 24.04 LTS (Noble Numbat) + +## 许可证 + +MIT License \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..779ebe5 --- /dev/null +++ b/TODO.md @@ -0,0 +1,19 @@ +# TODO List + +## 已完成 +- [x] 创建bash脚本主文件 +- [x] 实现查看系统信息功能 +- [x] 实现查看网络信息功能 +- [x] 实现卸载系统防火墙功能 +- [x] 实现修改网络最大连接数到最大功能 +- [x] 实现系统更新功能(自动和手动选择版本) +- [x] 实现rinetd安装、重启、停止功能 +- [x] 实现rinetd配置管理功能(查看/添加/修改/删除) +- [x] 实现分屏显示和配色模式 + +## 待优化 +- [ ] 添加更多系统版本的支持 +- [ ] 优化错误处理机制 +- [ ] 添加日志记录功能 +- [ ] 支持更多网络工具的集成 +- [ ] 实现脚本的自动更新功能 \ No newline at end of file diff --git a/linux_tool.sh b/linux_tool.sh new file mode 100755 index 0000000..49e3f10 --- /dev/null +++ b/linux_tool.sh @@ -0,0 +1,426 @@ +#!/bin/bash + +# 版权信息 +# 四喜科技 免费提供 +# 官方网址:https://xi.plus + +# 定义颜色变量 +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 + +# 清除屏幕 +clear + +# 主菜单函数 +show_menu() { + clear + echo -e "${CYAN}==========================================${NC}" + echo -e "${GREEN} Ubuntu 命令行工具 ${NC}" + echo -e "${CYAN}==========================================${NC}" + echo -e "${PURPLE} 四喜科技 免费提供 ${NC}" + echo -e "${BLUE} 官方网址:https://xi.plus ${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}5. 系统更新${NC}" + echo -e "${YELLOW}6. 安装rinetd${NC}" + echo -e "${YELLOW}7. 重启rinetd${NC}" + echo -e "${YELLOW}8. 停止rinetd${NC}" + echo -e "${YELLOW}9. 配置rinetd${NC}" + echo -e "${YELLOW}0. 退出${NC}" + echo -e "${CYAN}==========================================${NC}" + echo -n -e "${PURPLE}请输入您的选择 [0-9]: ${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 +} + +# 系统更新功能 +system_update() { + clear + echo -e "${CYAN}==========================================${NC}" + echo -e "${GREEN} 系统更新 ${NC}" + echo -e "${CYAN}==========================================${NC}" + + # 获取当前系统版本 + CURRENT_VERSION=$(lsb_release -c | cut -f2) + echo -e "${YELLOW}当前系统版本: ${CURRENT_VERSION}${NC}" + + echo -e "${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}" + sudo apt-get update + sudo apt-get upgrade -y + sudo apt-get dist-upgrade -y + sudo apt-get autoremove -y + echo -e "${GREEN}系统更新完成!${NC}" + ;; + 2) + echo -n -e "${PURPLE}请输入要更新的系统版本代号(如:jammy, focal): ${NC}" + read selected_version + + if [ "$selected_version" == "$CURRENT_VERSION" ]; then + echo -e "${YELLOW}正在使用选择的系统版本 ${selected_version} 进行更新...${NC}" + sudo apt-get update + sudo apt-get upgrade -y + sudo apt-get dist-upgrade -y + sudo apt-get autoremove -y + echo -e "${GREEN}系统更新完成!${NC}" + else + echo -e "${RED}错误:选择的系统版本 ${selected_version} 与当前系统版本 ${CURRENT_VERSION} 不匹配!${NC}" + fi + ;; + *) + echo -e "${RED}无效的选择!${NC}" + ;; + 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}" + sudo apt-get 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}" + 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}" + 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}" + 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) + view_system_info + ;; + 2) + view_network_info + ;; + 3) + uninstall_firewall + ;; + 4) + modify_max_connections + ;; + 5) + system_update + ;; + 6) + install_rinetd + ;; + 7) + restart_rinetd + ;; + 8) + stop_rinetd + ;; + 9) + configure_rinetd + ;; + 0) + clear + echo -e "${GREEN}感谢使用,再见!${NC}" + exit 0 + ;; + *) + clear + echo -e "${RED}无效的选择,请重新输入!${NC}" + echo -n -e "${PURPLE}按任意键继续...${NC}" + read -n 1 + ;; + esac +done \ No newline at end of file diff --git a/需求.md b/需求.md new file mode 100644 index 0000000..290a57e --- /dev/null +++ b/需求.md @@ -0,0 +1,35 @@ +# 一个适用于ubuntu的命令行 + +- 建立一个bash工具。 +- 功能菜单如下 + - 查看系统信息 + - 查看网络信息 + - 卸载系统防火墙 + - 修改网络最大连接数到最大 + - 系统更新,强制更新,remove无用更新(自动选择系统版本后用对应的代码,手动选择系统版本再更新(要判断系统版本和选择的是否匹配并给出提示)) + - 安装rinetd + - 重启rinetd + - 停止rinetd + - 配置rinetd + - 查看当前中转配置 + - 添加中转配置 + - 输入本地IP(默认0.0.0.0) + - 输入本地端口 + - 输入目标域名 + - 输入目标端口 + - 是否添加到配置文件(默认添加) + - 修改中转配置 + - 输入要修改的配置项(序号) + - 输入新的本地IP(默认不修改) + - 输入新的本地端口(默认不修改) + - 输入新的目标域名(默认不修改) + - 输入新的目标端口(默认不修改) + - 是否添加到配置文件(默认添加) + - 删除中转配置 + - 输入要删除的配置项(序号) + - 是否删除配置文件中的配置(默认删除) + 退出 +- 代码内无感刷新显示 +- 漂亮的配色模式 +- 分屏显示,上面显示菜单(下面显示对应功能的提示)输入关键点只存在于上面显示。当一个任务没完成的时候,输入无效并提示。 +- 建立TODO.md建立README.md \ No newline at end of file