200字
脚本学习
2025-12-01
2025-12-01

🗑️ 完整清理脚本


#!/bin/bash

echo "==================================="
echo "🗑️  幻兽帕鲁服务器完整清理脚本"
echo "==================================="
echo ""

# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then 
    echo "❌ 请使用 sudo 运行此脚本"
    echo "用法: sudo bash cleanup.sh"
    exit 1
fi

echo "⚠️  警告:此操作将删除以下内容:"
echo "  - steam用户及其主目录"
echo "  - SteamCMD安装文件"
echo "  - 幻兽帕鲁服务器文件"
echo "  - systemd服务配置"
echo "  - 防火墙规则"
echo ""
read -p "确认要继续吗?(输入 YES 继续): " confirm

if [ "$confirm" != "YES" ]; then
    echo "❌ 已取消清理操作"
    exit 0
fi

echo ""
echo "🔄 开始清理..."
echo ""

# 1. 停止并删除systemd服务
echo "1️⃣  停止并删除systemd服务..."
systemctl stop palworld 2>/dev/null
systemctl disable palworld 2>/dev/null
rm -f /etc/systemd/system/palworld.service
systemctl daemon-reload
echo "✅ systemd服务已清理"

# 2. 删除防火墙规则
echo ""
echo "2️⃣  删除防火墙规则..."
ufw delete allow 8211/udp 2>/dev/null
ufw delete allow 25575/tcp 2>/dev/null
echo "✅ 防火墙规则已清理"

# 3. 停止steam用户的所有进程
echo ""
echo "3️⃣  停止steam用户的所有进程..."
pkill -u steam 2>/dev/null
sleep 2
pkill -9 -u steam 2>/dev/null
echo "✅ steam用户进程已停止"

# 4. 删除steam用户主目录
echo ""
echo "4️⃣  删除steam用户主目录..."
rm -rf /home/steam
echo "✅ /home/steam 已删除"

# 5. 删除steam用户
echo ""
echo "5️⃣  删除steam用户..."
userdel -r steam 2>/dev/null
echo "✅ steam用户已删除"

# 6. 清理可能的临时文件
echo ""
echo "6️⃣  清理临时文件..."
rm -f /tmp/steamcmd* 2>/dev/null
rm -f /tmp/steam* 2>/dev/null
echo "✅ 临时文件已清理"

# 7. 清理日志文件
echo ""
echo "7️⃣  清理日志文件..."
journalctl --vacuum-time=1s --user-unit=palworld 2>/dev/null
echo "✅ 日志文件已清理"

# 8. 可选:卸载32位库(如果不需要其他32位程序)
echo ""
read -p "是否卸载32位库支持?(如果有其他32位程序请输入 n) [y/N]: " uninstall_32bit

if [[ "$uninstall_32bit" =~ ^[Yy]$ ]]; then
    echo "8️⃣  卸载32位库..."
    apt-get remove --purge lib32gcc-s1 lib32stdc++6 -y 2>/dev/null
    dpkg --remove-architecture i386 2>/dev/null
    apt-get autoremove -y
    apt-get autoclean
    echo "✅ 32位库已卸载"
else
    echo "⏭️  跳过卸载32位库"
fi

echo ""
echo "==================================="
echo "✅ 清理完成!"
echo "==================================="
echo ""
echo "已删除的内容:"
echo "  ✓ steam用户"
echo "  ✓ /home/steam 目录"
echo "  ✓ SteamCMD文件"
echo "  ✓ 幻兽帕鲁服务器文件"
echo "  ✓ systemd服务配置"
echo "  ✓ 防火墙规则"
echo ""

1️⃣ if [ "$EUID" -ne 0 ]; then

这是一个条件判断语句,拆解如下:

🔹 $EUID

  • 环境变量,表示 Effective User ID(有效用户 ID)

  • 在 Linux 系统中,每个用户都有一个数字 ID

  • root 用户的 EUID 永远是 0

  • 普通用户的 EUID 是其他数字(如 1000, 1001 等)

# 查看当前用户的EUID
echo $EUID

# root用户显示:0
# 普通用户显示:1000(或其他数字)

🔹 [ ]

  • 这是测试命令的语法(等同于 test 命令)

  • 用于条件判断

🔹 -ne

  • not equal 的缩写

  • 表示 不等于(数值比较)

  • 其他常用比较符:

    • -eq:等于

    • -gt:大于

    • -lt:小于

    • -ge:大于等于

    • -le:小于等于

🔹 0

  • root 用户的 ID 值

🔹 ;

  • 命令分隔符,表示一行结束

🔹 then

  • 如果条件为真,则执行后面的代码

📝 使用方法

方法1:创建并运行脚本

# 1. 创建清理脚本
nano cleanup_palworld.sh

# 2. 复制上面的脚本内容粘贴进去

# 3. 保存并退出 (Ctrl+X, 然后 Y, 然后 Enter)

# 4. 添加执行权限
chmod +x cleanup_palworld.sh

# 5. 运行脚本
sudo ./cleanup_palworld.sh

方法2:一键执行(推荐)⚡

sudo bash -c 'cat > /tmp/cleanup.sh << "EOF"
#!/bin/bash
echo "🗑️  开始清理幻兽帕鲁服务器..."
systemctl stop palworld 2>/dev/null
systemctl disable palworld 2>/dev/null
rm -f /etc/systemd/system/palworld.service
systemctl daemon-reload
ufw delete allow 8211/udp 2>/dev/null
ufw delete allow 25575/tcp 2>/dev/null
pkill -u steam 2>/dev/null
sleep 2
pkill -9 -u steam 2>/dev/null
rm -rf /home/steam
userdel -r steam 2>/dev/null
rm -f /tmp/steamcmd* /tmp/steam* 2>/dev/null
echo "✅ 清理完成!"
echo "已删除:"
echo "  - steam用户及主目录"
echo "  - SteamCMD和服务器文件"
echo "  - systemd服务"
echo "  - 防火墙规则"
EOF
chmod +x /tmp/cleanup.sh
/tmp/cleanup.sh
rm /tmp/cleanup.sh'

🔍 验证清理结果

# 检查steam用户是否已删除
id steam
# 应该显示:id: 'steam': no such user

# 检查目录是否已删除
ls -la /home/steam
# 应该显示:cannot access '/home/steam': No such file or directory

# 检查服务是否已删除
systemctl status palworld
# 应该显示:Unit palworld.service could not be found

# 检查防火墙规则
sudo ufw status | grep 8211
# 应该没有输出

评论