互联网上的文章真TM不靠谱 还是自己来的好 --只写靠谱的文档

初始化linux

#!/usr/bin/env bash

set -e

echo "=============================="
echo " Linux Workstation Setup (Interactive Final)"
echo "=============================="

confirm() {

read -rp "$1 (y/n): " ans
[[ "$ans" == "y" || "$ans" == "Y" ]]

}

=========================================================

1. ZSH + OH-MY-ZSH

=========================================================

if confirm "[1/5] 安装 zsh + oh-my-zsh + 设置默认 shell"; then

sudo apt update
sudo apt install -y zsh curl git xdg-user-dirs wget

if [ ! -d "$HOME/.oh-my-zsh" ]; then
    RUNZSH=no CHSH=no KEEP_ZSHRC=yes \
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
fi

if [ "$SHELL" != "$(which zsh)" ]; then
    chsh -s "$(which zsh)" || true
fi

echo "✔ ZSH 完成"

else

echo "✘ 跳过 ZSH"

fi

=========================================================

2. PROXY (proxy on/off)

=========================================================

if confirm "[2/5] 配置 proxy (proxy on / proxy off)"; then

read -rp "请输入代理地址 (如 http://192.168.1.78:4780): " PROXY_URL

if [ -n "$PROXY_URL" ]; then

cat > ~/.proxy.zsh << EOF

=========================

Proxy CLI

=========================

PROXY_URL="$PROXY_URL"

proxy() {

case "\$1" in

    on)
        export http_proxy="\$PROXY_URL"
        export https_proxy="\$PROXY_URL"
        export all_proxy="\$PROXY_URL"
        export no_proxy="localhost,127.0.0.1,::1"

        git config --global http.proxy "\$PROXY_URL"
        git config --global https.proxy "\$PROXY_URL"

        echo "[proxy] ON -> \$PROXY_URL"
        ;;

    off)
        unset http_proxy https_proxy all_proxy no_proxy

        git config --global --unset http.proxy 2>/dev/null || true
        git config --global --unset https.proxy 2>/dev/null || true

        echo "[proxy] OFF"
        ;;

    *)
        echo "Usage:"
        echo "  proxy on"
        echo "  proxy off"
        ;;
esac

}

EOF

    if ! grep -q "proxy.zsh" ~/.zshrc; then
        echo "source ~/.proxy.zsh" >> ~/.zshrc
    fi

    echo "✔ Proxy 完成"
else
    echo "✘ 未输入 proxy,跳过"
fi

else

echo "✘ 跳过 proxy"

fi

if confirm "[3/5] 切换英文用户目录 + 迁移 + 删除旧中文目录"; then

sudo apt install -y xdg-user-dirs rsync

# =====================================================
# 1. 强制切换为英文 XDG
# =====================================================
LANG=en_US.UTF-8 xdg-user-dirs-update --force

echo "已切换为英文用户目录"

# =====================================================
# 2. 中文 -> 英文映射
# =====================================================
declare -A MAP=(
    ["桌面"]="Desktop"
    ["下载"]="Downloads"
    ["文档"]="Documents"
    ["图片"]="Pictures"
    ["音乐"]="Music"
    ["视频"]="Videos"
    ["公共"]="Public"
    ["模板"]="Templates"
)

echo "开始迁移文件..."

for zh in "${!MAP[@]}"; do
    en="${MAP[$zh]}"

    src="$HOME/$zh"
    dst="$HOME/$en"

    if [ -d "$src" ]; then
        mkdir -p "$dst"

        echo "迁移: $src -> $dst"

        # 安全复制(不覆盖已有文件)
        rsync -a --ignore-existing "$src/" "$dst/"

        echo "完成: $zh → $en"
    fi
done

echo "迁移完成,开始删除旧目录..."

# =====================================================
# 3. 删除旧中文目录(关键步骤)
# =====================================================
for zh in "${!MAP[@]}"; do
    src="$HOME/$zh"

    if [ -d "$src" ]; then
        echo "删除: $src"
        rm -rf "$src"
    fi
done

echo "===================================="
echo "完成:中文目录已迁移并删除"
echo "建议重新登录会话"
echo "===================================="

else

echo "跳过目录迁移"

fi

=========================================================

4. GO (国内镜像 + fallback)

=========================================================

if confirm "[4/5] 安装 Golang(国内镜像)"; then

GO_VERSION="1.22.5"
GO_TAR="go${GO_VERSION}.linux-amd64.tar.gz"

cd /tmp

echo "尝试国内镜像下载..."

if ! wget -q https://mirrors.aliyun.com/golang/$GO_TAR; then
    echo "阿里云失败,切换官方源..."
    wget -q https://go.dev/dl/$GO_TAR
fi

sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf $GO_TAR

if ! grep -q "/usr/local/go/bin" ~/.zshrc; then
    cat >> ~/.zshrc << 'EOF'

Go

export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
EOF

fi

echo "✔ Go 完成"

else

echo "✘ 跳过 Go"

fi

=========================================================

5. NVM + NODE

=========================================================

if confirm "[5/5] 安装 nvm + node"; then

export NVM_DIR="$HOME/.nvm"

if [ ! -d "$NVM_DIR" ]; then
    curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
fi

if ! grep -q "nvm.sh" ~/.zshrc; then
    cat >> ~/.zshrc << 'EOF'

NVM

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
EOF

fi

echo "✔ NVM 完成"

else

echo "✘ 跳过 NVM"

fi

=========================================================

echo "=============================="
echo "全部完成"
echo "请执行:source ~/.zshrc"
echo "=============================="

标签: none

评论已关闭