初始化linux
#!/usr/bin/env bashset -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,跳过"
fielse
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 "=============================="
评论已关闭