diff --git a/init.sh b/init.sh index f0ba60f..b3d38a2 100644 --- a/init.sh +++ b/init.sh @@ -1,7 +1,7 @@ #!/bin/bash ################################################################################ -# Linux 系统初始化脚本 v1.1 +# Linux 系统初始化脚本 v1.2 # 功能: 镜像源切换 | 基础工具安装 | 系统优化配置 # 支持: Ubuntu/Debian, CentOS/RHEL, Rocky Linux, AlmaLinux # 作者: 自动化运维工具 @@ -19,79 +19,90 @@ CYAN='\033[0;36m' PURPLE='\033[0;35m' NC='\033[0m' # No Color -# 日志文件定义 -LOG_FILE="/var/log/system-init-$(date +%Y%m%d-%H%M%S).log" +# 日志文件路径 - 使用用户可写目录 +LOG_DIR="$HOME/.system-init-logs" +LOG_FILE="$LOG_DIR/system-init-$(date +%Y%m%d-%H%M%S).log" + +# 初始化日志系统 +init_logging() { + # 创建日志目录 + mkdir -p "$LOG_DIR" + + # 设置日志文件 + exec > >(tee -a "$LOG_FILE") 2>&1 +} # 输出函数定义 print_info() { - echo -e "${BLUE}[INFO]${NC} $1" | tee -a "$LOG_FILE" + echo -e "${BLUE}[INFO]${NC} $1" } print_success() { - echo -e "${GREEN}[SUCCESS]${NC} $1" | tee -a "$LOG_FILE" + echo -e "${GREEN}[SUCCESS]${NC} $1" } print_warning() { - echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE" + echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { - echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE" - echo "详细日志请查看: $LOG_FILE" >&2 + echo -e "${RED}[ERROR]${NC} $1" } # 错误处理函数 error_exit() { print_error "$1" + echo "详细日志请查看: $LOG_FILE" exit 1 } -# 检查命令是否存在 -check_command() { - if ! command -v "$1" &> /dev/null; then - print_warning "命令 $1 未找到,正在安装..." - case $OS in - ubuntu|debian) - sudo apt-get update && sudo apt-get install -y "$1" || { - print_error "安装 $1 失败" - return 1 - } - ;; - centos|rhel|rocky|almalinux) - sudo yum install -y "$1" || { - print_error "安装 $1 失败" - return 1 - } - ;; - esac - fi - return 0 -} - # 脚本横幅显示 print_banner() { clear echo -e "${PURPLE}" echo "==================================================" - echo " Linux 系统初始化脚本 v1.1" + echo " Linux 系统初始化脚本 v1.2" echo "==================================================" echo "功能: 镜像源切换 | 基础工具安装 | 系统优化配置" echo "支持: Ubuntu/Debian, CentOS/RHEL, Rocky, AlmaLinux" echo "==================================================" echo -e "${NC}" - echo "日志文件: $LOG_FILE" | tee -a "$LOG_FILE" - echo "开始时间: $(date)" | tee -a "$LOG_FILE" - echo "==================================================" | tee -a "$LOG_FILE" } # 检查脚本运行权限 check_permissions() { - if [[ $EUID -ne 0 ]] && ! sudo -n true 2>/dev/null; then + print_info "检查运行权限..." + + # 检查是否可以使用 sudo + if [[ $EUID -eq 0 ]]; then + print_success "当前为 root 用户" + return 0 + fi + + # 检查是否有 sudo 权限 + if sudo -n true 2>/dev/null; then + print_success "当前用户有 sudo 权限" + return 0 + fi + + # 如果没有 root 权限也没有 sudo 权限,尝试获取 + print_info "尝试获取 sudo 权限..." + if ! sudo -v; then error_exit "此脚本需要 root 权限或 sudo 权限\n请使用: sudo $0" fi + print_success "权限检查通过" } +# 检查命令是否存在 +check_command() { + if ! command -v "$1" &> /dev/null; then + print_warning "命令 $1 未找到" + return 1 + fi + return 0 +} + # 检测操作系统类型和版本 detect_os() { print_info "正在检测操作系统..." @@ -121,39 +132,22 @@ detect_network() { print_info "正在检测网络环境..." # 测试多个网站,增加检测准确性 - local test_sites=( - "www.baidu.com" - "www.google.com" - "github.com" - "mirrors.aliyun.com" - ) - + local test_sites=("www.baidu.com" "mirrors.aliyun.com") local china_count=0 - local international_count=0 for site in "${test_sites[@]}"; do if timeout 3 curl -s --head "$site" > /dev/null 2>&1; then - case "$site" in - *baidu.com*|*aliyun.com*) - ((china_count++)) - ;; - *google.com*|*github.com*) - ((international_count++)) - ;; - esac + ((china_count++)) fi done # 根据检测结果判断网络环境 - if [[ $china_count -gt $international_count ]]; then + if [[ $china_count -gt 0 ]]; then NETWORK_ENV="china" print_info "检测到国内网络环境,建议使用国内镜像源" - elif [[ $international_count -gt 0 ]]; then + else NETWORK_ENV="international" print_info "检测到国际网络环境" - else - NETWORK_ENV="unknown" - print_warning "网络环境检测失败,请检查网络连接" fi } @@ -161,13 +155,11 @@ detect_network() { backup_sources() { print_info "正在备份原始软件源..." - local backup_dir="/etc/apt/backup-$(date +%Y%m%d)" + local backup_dir="$LOG_DIR/backup-$(date +%Y%m%d)" + mkdir -p "$backup_dir" case $OS in ubuntu|debian) - # 创建备份目录 - sudo mkdir -p "$backup_dir" - # 备份 sources.list if [[ -f /etc/apt/sources.list ]]; then sudo cp /etc/apt/sources.list "$backup_dir/sources.list.bak" @@ -182,9 +174,6 @@ backup_sources() { ;; centos|rhel|rocky|almalinux) - backup_dir="/etc/yum.repos.d/backup-$(date +%Y%m%d)" - sudo mkdir -p "$backup_dir" - # 备份所有 .repo 文件 if ls /etc/yum.repos.d/*.repo &> /dev/null; then sudo cp /etc/yum.repos.d/*.repo "$backup_dir/" @@ -215,11 +204,11 @@ configure_ubuntu_mirrors() { "20.04") ubuntu_codename="focal" ;; "18.04") ubuntu_codename="bionic" ;; "16.04") ubuntu_codename="xenial" ;; - *) ubuntu_codename="jammy" ;; # 默认使用最新 LTS + *) ubuntu_codename="jammy" ;; esac fi - # 如果指定了镜像源参数,直接使用 + # 选择镜像源 local mirror_url="" local mirror_name="" @@ -237,14 +226,6 @@ configure_ubuntu_mirrors() { mirror_url="https://mirrors.ustc.edu.cn" mirror_name="中国科技大学" ;; - huawei) - mirror_url="https://repo.huaweicloud.com" - mirror_name="华为云" - ;; - nju) - mirror_url="https://mirrors.nju.edu.cn" - mirror_name="南京大学" - ;; *) print_warning "未知的镜像源参数,使用交互式选择" MIRROR_ARG="" @@ -252,19 +233,17 @@ configure_ubuntu_mirrors() { esac fi - # 如果没有通过参数指定镜像源,则进行交互式选择 - if [[ -z "$mirror_url" ]]; then + # 交互式选择镜像源 + if [[ -z "$mirror_url" ]] && [[ -z "${NON_INTERACTIVE:-}" ]]; then echo "" echo "请选择镜像源:" echo "1) 阿里云 (推荐国内用户)" echo "2) 清华大学" echo "3) 中国科技大学" - echo "4) 华为云" - echo "5) 南京大学" - echo "6) 官方源 (推荐国际用户)" + echo "4) 官方源 (推荐国际用户)" echo "" - read -rp "请选择 [1-6, 默认: 1]: " mirror_choice + read -rp "请选择 [1-4, 默认: 1]: " mirror_choice mirror_choice=${mirror_choice:-1} case $mirror_choice in @@ -281,52 +260,36 @@ configure_ubuntu_mirrors() { mirror_name="中国科技大学" ;; 4) - mirror_url="https://repo.huaweicloud.com" - mirror_name="华为云" - ;; - 5) - mirror_url="https://mirrors.nju.edu.cn" - mirror_name="南京大学" - ;; - 6) - print_info "使用官方源" mirror_url="http://archive.ubuntu.com" mirror_name="官方源" ;; *) - print_warning "无效选择,使用阿里云镜像" mirror_url="http://mirrors.aliyun.com" mirror_name="阿里云" ;; esac + elif [[ -z "$mirror_url" ]]; then + # 非交互模式默认使用阿里云 + mirror_url="http://mirrors.aliyun.com" + mirror_name="阿里云" fi print_info "正在配置 $mirror_name 镜像源..." # 生成新的 sources.list if [[ "$mirror_url" == "http://archive.ubuntu.com" ]]; then - # 官方源配置 sudo tee /etc/apt/sources.list > /dev/null < /dev/null < /dev/null < /dev/null < /dev/null < /dev/null < /dev/null < /dev/null && ! systemctl is-active ssh &> /dev/null; then - print_warning "SSH 服务未安装,正在安装..." + # 检查 SSH 是否已安装 + if ! command -v sshd &> /dev/null; then + print_warning "SSH 服务未安装" case $OS in ubuntu|debian) sudo apt-get install -y openssh-server @@ -654,7 +495,6 @@ configure_ssh() { esac fi - # 询问是否配置 SSH if [[ -z "${NON_INTERACTIVE:-}" ]]; then read -rp "是否优化 SSH 配置? [y/N]: " config_ssh config_ssh=${config_ssh:-N} @@ -666,50 +506,20 @@ configure_ssh() { fi # 备份 SSH 配置 - local ssh_config_backup="/etc/ssh/sshd_config.backup-$(date +%Y%m%d)" - sudo cp /etc/ssh/sshd_config "$ssh_config_backup" - print_success "SSH 配置已备份到 $ssh_config_backup" - - # SSH 优化配置参数 - local ssh_config_changes=( - "# 优化 SSH 配置 - 修改于 $(date)" - "UseDNS no" - "GSSAPIAuthentication no" - "ClientAliveInterval 60" - "ClientAliveCountMax 3" - "MaxAuthTries 3" - "LoginGraceTime 60" - "PermitRootLogin prohibit-password" - "PasswordAuthentication yes" - "PubkeyAuthentication yes" - "AllowTcpForwarding yes" - "X11Forwarding no" - "PrintMotd no" - "PrintLastLog yes" - ) - - # 应用 SSH 配置 - print_info "应用 SSH 优化配置..." + sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak - # 删除旧配置并添加新配置 - for config_line in "${ssh_config_changes[@]}"; do - if [[ $config_line =~ ^[^#] ]]; then - local config_key=$(echo "$config_line" | awk '{print $1}') - sudo sed -i "/^$config_key/d" /etc/ssh/sshd_config - fi - done + # 优化 SSH 配置 + sudo sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config + sudo sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config - # 添加新配置 - for config_line in "${ssh_config_changes[@]}"; do - echo "$config_line" | sudo tee -a /etc/ssh/sshd_config > /dev/null - done + if ! grep -q "ClientAliveInterval" /etc/ssh/sshd_config; then + echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config + echo "ClientAliveCountMax 3" | sudo tee -a /etc/ssh/sshd_config + fi # 重启 SSH 服务 - print_info "重启 SSH 服务..." if command -v systemctl &> /dev/null; then - sudo systemctl daemon-reload sudo systemctl restart sshd 2>/dev/null || sudo systemctl restart ssh 2>/dev/null - sudo systemctl enable sshd 2>/dev/null || sudo systemctl enable ssh 2>/dev/null else sudo service sshd restart 2>/dev/null || sudo service ssh restart 2>/dev/null fi @@ -721,16 +531,6 @@ configure_ssh() { configure_timezone() { print_info "正在配置时区..." - local current_tz="" - - # 获取当前时区 - if command -v timedatectl &> /dev/null; then - current_tz=$(timedatectl | grep "Time zone" | awk '{print $3}') - fi - - print_info "当前时区: ${current_tz:-未知}" - - # 询问是否设置时区 if [[ -z "${NON_INTERACTIVE:-}" ]]; then read -rp "是否设置为中国时区 (Asia/Shanghai)? [Y/n]: " set_tz set_tz=${set_tz:-Y} @@ -739,79 +539,19 @@ configure_timezone() { fi if [[ $set_tz =~ ^[Yy]$ ]]; then - # 尝试使用 timedatectl if command -v timedatectl &> /dev/null; then sudo timedatectl set-timezone Asia/Shanghai else - # 备选方案:直接链接时区文件 sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime - if [[ -f /etc/redhat-release ]]; then - echo "ZONE=\"Asia/Shanghai\"" | sudo tee /etc/sysconfig/clock > /dev/null - fi fi - - # 同步硬件时钟 - sudo hwclock --systohc 2>/dev/null || true - print_success "时区已设置为 Asia/Shanghai" fi } -# 配置语言环境 -configure_locale() { - print_info "正在配置语言环境..." - - # 询问是否配置中文语言环境 - if [[ -z "${NON_INTERACTIVE:-}" ]]; then - read -rp "是否配置中文语言环境? [y/N]: " set_locale - set_locale=${set_locale:-N} - - if [[ ! $set_locale =~ ^[Yy]$ ]]; then - print_info "跳过语言环境配置" - return - fi - fi - - case $OS in - ubuntu|debian) - # 安装中文语言包 - sudo apt-get install -y language-pack-zh-hans - - # 生成语言环境 - sudo locale-gen zh_CN.UTF-8 - sudo locale-gen zh_CN.GBK - sudo locale-gen zh_CN.GB2312 - - # 设置系统语言环境 - sudo update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 - ;; - - centos|rhel|rocky|almalinux) - # 安装中文语言包 - sudo yum install -y glibc-langpack-zh - - # 设置语言环境 - local lang_conf="/etc/locale.conf" - if [[ -f "$lang_conf" ]]; then - sudo sed -i 's/^LANG=.*/LANG="zh_CN.UTF-8"/' "$lang_conf" - else - echo 'LANG="zh_CN.UTF-8"' | sudo tee "$lang_conf" > /dev/null - fi - ;; - esac - - # 设置临时环境变量 - export LANG=zh_CN.UTF-8 - export LC_ALL=zh_CN.UTF-8 - - print_success "中文语言环境配置完成" -} - # 系统优化配置 optimize_system() { print_info "正在应用系统优化配置..." - # 询问是否进行系统优化 if [[ -z "${NON_INTERACTIVE:-}" ]]; then read -rp "是否应用系统优化配置? [Y/n]: " do_optimize do_optimize=${do_optimize:-Y} @@ -822,160 +562,34 @@ optimize_system() { fi fi - # 1. 优化文件描述符限制 - optimize_file_descriptors - - # 2. 优化内核参数 - optimize_kernel_params - - # 3. 优化系统服务 - optimize_services - - # 4. 优化交换分区 - optimize_swap - - print_success "系统优化配置完成" -} - -# 优化文件描述符限制 -optimize_file_descriptors() { - print_info "优化文件描述符限制..." - - local limits_conf="/etc/security/limits.conf" - - # 备份原配置 - sudo cp "$limits_conf" "${limits_conf}.backup-$(date +%Y%m%d)" - - # 设置文件描述符限制 - if ! grep -q "^\* soft nofile" "$limits_conf"; then - echo "* soft nofile 65535" | sudo tee -a "$limits_conf" > /dev/null - echo "* hard nofile 65535" | sudo tee -a "$limits_conf" > /dev/null - echo "root soft nofile 65535" | sudo tee -a "$limits_conf" > /dev/null - echo "root hard nofile 65535" | sudo tee -a "$limits_conf" > /dev/null - print_success "文件描述符限制已优化" - else - print_info "文件描述符限制已经配置" + # 优化文件描述符限制 + if ! grep -q "^* soft nofile 65535" /etc/security/limits.conf; then + echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf + echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf fi - # 对于 systemd 系统 - if [[ -d /etc/systemd/system ]]; then - local systemd_conf="/etc/systemd/system.conf" - sudo sed -i 's/^#DefaultLimitNOFILE=.*/DefaultLimitNOFILE=65535/' "$systemd_conf" - sudo sed -i 's/^#DefaultLimitNPROC=.*/DefaultLimitNPROC=65535/' "$systemd_conf" - fi -} - -# 优化内核参数 -optimize_kernel_params() { - print_info "优化内核参数..." - - local sysctl_conf="/etc/sysctl.d/99-custom.conf" - - # 创建优化配置文件 - sudo tee "$sysctl_conf" > /dev/null <<'EOF' -# ======================== -# 系统内核优化配置 -# 生成时间: $(date) -# ======================== - -# 网络优化 -# 最大连接数 -net.core.somaxconn = 65535 -net.core.netdev_max_backlog = 65535 - -# 缓冲区大小 + # 优化内核参数 + sudo tee /etc/sysctl.d/99-custom.conf > /dev/null < /dev/null 2>&1 || { - print_warning "部分内核参数优化失败,可能需要在重启后生效" - } + sudo sysctl -p /etc/sysctl.d/99-custom.conf 2>/dev/null || true - print_success "内核参数优化完成" -} - -# 优化系统服务 -optimize_services() { - print_info "优化系统服务..." - - # 禁用不必要的服务(根据实际情况调整) - local services_to_disable=( - "postfix" # 邮件服务,如果不是邮件服务器 - "avahi-daemon" # mDNS 服务 - ) - - for service in "${services_to_disable[@]}"; do - if systemctl is-enabled "$service" &> /dev/null; then - sudo systemctl disable "$service" 2>/dev/null || true - sudo systemctl stop "$service" 2>/dev/null || true - print_info "已禁用服务: $service" - fi - done -} - -# 优化交换分区 -optimize_swap() { - print_info "优化交换分区..." - - # 检查交换分区是否存在 - if [[ $(swapon --show | wc -l) -eq 0 ]]; then - print_warning "未找到交换分区,如需创建请运行: sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile" - return - fi - - # 调整 swappiness 值(如果已经在内核参数中设置过,这里不会重复设置) - local current_swappiness=$(cat /proc/sys/vm/swappiness 2>/dev/null || echo "60") - print_info "当前 swappiness 值: $current_swappiness" + print_success "系统优化配置完成" } # 清理系统 clean_system() { print_info "正在清理系统..." - # 询问是否清理系统 if [[ -z "${NON_INTERACTIVE:-}" ]]; then read -rp "是否清理系统缓存和无用包? [Y/n]: " do_clean do_clean=${do_clean:-Y} @@ -988,36 +602,16 @@ clean_system() { case $OS in ubuntu|debian) - print_info "清理 APT 缓存..." sudo apt-get autoremove -y sudo apt-get autoclean -y - sudo apt-get clean - - # 清理旧内核 - sudo apt-get purge -y $(dpkg -l | awk '/^ii linux-image-*/ && $2 !~ /'$(uname -r)'/ {print $2}') 2>/dev/null || true - - # 清理日志文件(保留最近7天) - sudo find /var/log -type f -name "*.log" -mtime +7 -delete 2>/dev/null || true ;; centos|rhel|rocky|almalinux) - print_info "清理 YUM 缓存..." sudo yum autoremove -y sudo yum clean all - - # 清理旧内核(保留最近2个) - sudo package-cleanup --oldkernels --count=2 -y 2>/dev/null || true - - # 清理日志文件 - sudo journalctl --vacuum-time=7d 2>/dev/null || true ;; esac - # 清理临时文件 - print_info "清理临时文件..." - sudo rm -rf /tmp/* 2>/dev/null || true - sudo rm -rf /var/tmp/* 2>/dev/null || true - print_success "系统清理完成" } @@ -1027,62 +621,31 @@ show_system_info() { print_success "==================== 系统信息 ====================" echo "" - # 操作系统信息 - if [[ -f /etc/os-release ]]; then - echo "操作系统: $(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2)" - fi - - # 内核信息 + echo "操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)" echo "内核版本: $(uname -r)" echo "系统架构: $(uname -m)" - # CPU 信息 if command -v nproc &> /dev/null; then echo "CPU 核心: $(nproc)" fi - # 内存信息 if command -v free &> /dev/null; then echo "内存大小: $(free -h | awk '/^Mem:/ {print $2}')" - echo "可用内存: $(free -h | awk '/^Mem:/ {print $7}')" fi - # 磁盘信息 if command -v df &> /dev/null; then - echo "根目录空间: $(df -h / | awk 'NR==2 {print $2 " 已用: " $3 " (" $5 ")"}')" - fi - - # 系统负载 - if [[ -f /proc/loadavg ]]; then - load=$(cat /proc/loadavg) - echo "系统负载: ${load:0:16}" - fi - - # 运行时间 - if command -v uptime &> /dev/null; then - echo "运行时间: $(uptime -p | sed 's/up //')" + echo "磁盘空间: $(df -h / | awk 'NR==2 {print $2}')" fi - # 用户信息 echo "当前用户: $(whoami)" echo "主机名称: $(hostname)" - # IP 地址信息 - if command -v ip &> /dev/null; then - echo "IP 地址: $(ip route get 1 | awk '{print $7; exit}')" - elif command -v hostname &> /dev/null; then - echo "主机名: $(hostname -I 2>/dev/null | awk '{print $1}')" - fi - - # 时区信息 if command -v timedatectl &> /dev/null; then echo "时区设置: $(timedatectl | grep "Time zone" | awk '{print $3}')" - echo "NTP 同步: $(timedatectl | grep "NTP synchronized" | awk '{print $3}')" fi echo "" print_success "==================================================" - echo "" } # 显示主菜单 @@ -1101,10 +664,8 @@ show_menu() { echo "2) 仅更换镜像源" echo "3) 仅安装基础工具" echo "4) 仅系统优化" - echo "5) 仅配置 SSH" - echo "6) 显示系统信息" - echo "7) 查看日志文件" - echo "8) 退出脚本" + echo "5) 显示系统信息" + echo "6) 退出" echo "" } @@ -1138,18 +699,13 @@ full_initialization() { # 4. 配置时区 configure_timezone - # 5. 配置语言环境(可选) - if [[ -z "${NON_INTERACTIVE:-}" ]]; then - configure_locale - fi - - # 6. 配置 SSH + # 5. 配置 SSH configure_ssh - # 7. 系统优化 + # 6. 系统优化 optimize_system - # 8. 系统清理 + # 7. 系统清理 clean_system print_success "系统初始化完成!" @@ -1157,40 +713,27 @@ full_initialization() { # 显示系统信息 show_system_info - # 显示后续建议 echo "" - print_info "建议执行以下操作:" - echo "1. 重启系统使所有配置生效: sudo reboot" - echo "2. 检查系统更新: sudo apt-get upgrade 或 sudo yum update" - echo "3. 查看详细日志: cat $LOG_FILE" + print_info "日志文件: $LOG_FILE" + print_info "建议重启系统使所有配置生效" echo "" } -# 查看日志文件 -view_log_file() { - echo "" - print_info "日志文件内容 (最后50行):" - echo "==================================================" - tail -50 "$LOG_FILE" - echo "==================================================" - echo "" - print_info "完整日志文件路径: $LOG_FILE" -} - # 显示帮助信息 show_help() { echo "" - echo "Linux 系统初始化脚本 v1.1" + echo "Linux 系统初始化脚本 v1.2" echo "" echo "用法: $0 [选项]" echo "" echo "选项:" echo " --auto 自动模式 (非交互式,使用默认配置)" - echo " --mirror=SOURCE 指定镜像源 (aliyun, tsinghua, ustc, huawei)" + echo " --mirror=SOURCE 指定镜像源 (aliyun, tsinghua, ustc)" echo " --non-interactive 非交互模式 (跳过所有确认)" echo " --help 显示此帮助信息" echo "" echo "示例:" + echo " sudo $0" echo " sudo $0 --auto" echo " sudo $0 --mirror=aliyun --non-interactive" echo "" @@ -1229,6 +772,13 @@ parse_arguments() { # 主函数 main() { + # 初始化日志系统 + init_logging + + print_info "脚本开始执行" + print_info "日志文件: $LOG_FILE" + print_info "开始时间: $(date)" + # 解析命令行参数 parse_arguments "$@" @@ -1241,10 +791,6 @@ main() { # 检测操作系统 detect_os - # 检查必要命令 - check_command "curl" || error_exit "curl 安装失败" - check_command "wget" || print_warning "wget 安装失败,部分功能可能受限" - # 自动模式直接执行完整初始化 if [[ -n "${AUTO_MODE:-}" ]]; then full_initialization @@ -1254,7 +800,7 @@ main() { # 交互式菜单 while true; do show_menu - read -rp "请选择操作 [1-8]: " choice + read -rp "请选择操作 [1-6]: " choice case $choice in 1) @@ -1279,15 +825,9 @@ main() { optimize_system ;; 5) - configure_ssh - ;; - 6) show_system_info ;; - 7) - view_log_file - ;; - 8) + 6) print_info "退出脚本" echo "详细日志请查看: $LOG_FILE" exit 0 @@ -1298,7 +838,7 @@ main() { esac # 询问是否继续 - if [[ $choice -ne 8 ]]; then + if [[ $choice -ne 6 ]]; then echo "" read -rp "是否继续其他操作? [Y/n]: " continue_choice continue_choice=${continue_choice:-Y}