#!/bin/bash set -euo pipefail echo "=== 通用 Linux 初始化脚本 ===" # 确保为 root if [ "$EUID" -ne 0 ]; then echo "请以 root 用户运行此脚本。" >&2 exit 1 fi # 检测系统信息 get_os_info() { if [ -f /etc/os-release ]; then . /etc/os-release DISTRO_ID=$ID DISTRO_NAME=$NAME DISTRO_VERSION=$VERSION_ID else echo "无法识别系统类型。" >&2 exit 1 fi } # 设置 DNS set_dns() { echo "设置 DNS..." rm -f /etc/resolv.conf cat > /etc/resolv.conf </dev/null; then chattr +i /etc/resolv.conf || echo "警告: 无法锁定 resolv.conf" fi } # 设置时区和时间同步 set_timezone_and_time() { echo "设置时区为 Asia/Shanghai..." timedatectl set-timezone Asia/Shanghai 2>/dev/null || ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo "安装 ntpdate..." $INSTALL_CMD ntpdate -y echo "正在同步时间..." ntpdate ntp.aliyun.com || echo "时间同步失败,请检查网络连接" } # 设置清华源 set_mirrors() { echo "更换软件源为清华镜像..." case "$DISTRO_ID" in debian|ubuntu|raspbian) CODENAME=$(lsb_release -cs 2>/dev/null || echo "stable") cat > /etc/apt/sources.list </dev/null; then INSTALL_CMD="apt install -y" apt update -y elif command -v dnf &>/dev/null; then INSTALL_CMD="dnf install -y" dnf makecache elif command -v yum &>/dev/null; then INSTALL_CMD="yum install -y" yum makecache else echo "不支持的包管理器。" >&2 exit 1 fi # 安装通用工具 $INSTALL_CMD curl wget lsb-release || true # 执行配置步骤 set_mirrors set_dns set_timezone_and_time echo "=== 初始化完成!系统已优化 ==="