这是一个专门用于彻底清理哪吒探针的安全工具。v2.2 支持通过交互式菜单选择卸载 Agent(被控端)、Dashboard(主控端)或同时卸载两者 — 每项都有独立的安全清理流程,新增使用统计计数器及多项 Bug 修复。
This is a specialized and safe tool for completely removing Nezha monitoring components. v2.2 provides an interactive menu to uninstall the Agent (controlled endpoint), Dashboard (control panel), or both — each with its own dedicated safety pipeline, now with usage statistics counter and multiple bug fixes.
新增使用统计计数器 + 7项Bug修复!
Added usage statistics counter + 7 bug fixes!
v2.2 更新内容 (What's New):
- 📊 可选使用统计计数器: 设置
NEZHA_CLEANER_USAGE_STATS=1后在主菜单显示累计运行次数;默认不访问第三方统计服务 - 🐛 Bug修复: trap覆盖、符号链接保护、ExecStart前缀、crontab边界、竞态条件、Docker匹配
修复致命bug:全局扫描不再误删用户媒体/文档文件!
Critical bug fix: global scan no longer deletes user media/document files!
v2.1 更新内容 (What's New):
- 🐛 致命修复:
safe_remove()新增文件类型保护——自动跳过图片/文档/媒体文件(.png,.jpg,.pdf,.md,.mp4等 27 种扩展名),防止误删用户文章配图等内容 - 📝 文档更新: CLAUDE.md 和 README 同步更新至 v2.1
交互式菜单,支持安全卸载 Dashboard(主控端)和 Agent(被控端)!
v2.0 更新内容:
- 🆕 交互式主菜单: 启动时选择 1)卸载Agent 2)卸载Dashboard 3)同时卸载两者 4)退出
- 🆕 Dashboard 安全清理: 12步独立流程,覆盖裸机 + Docker Compose + 独立容器部署
- 🆕 Docker 镜像删除 + 容器归属分类 + 四层 Docker 纵深防御
- 🔧 函数化重构:
cleanup_agent()和cleanup_dashboard()独立函数,变量隔离
修复 Docker 误删风险,三层防御体系保障安全!
Docker Safety Release — three-layer defense to prevent accidental container removal!
修复了多项关键问题,强烈建议升级!
Critical fixes — strongly recommend upgrading!
v1.3 更新内容 (What's Fixed):
- ✅ 修复 pkill 误匹配脚本自身进程(使用
[n]ezha-agent括号技巧) - ✅ 系统目录保护精准化为叶子目录级别(允许清理
/usr/local/nezha-agent,同时保护/usr/bin) - ✅ 修复 curl-pipe 场景下交互提示失效(
read重定向自/dev/tty) - ✅ 修复 ExecStart 前缀修饰符(
-,@,+,!)正确剥离 - ✅ 修复文件名匹配大小写不一致(
find -iname替代find | grep) - ✅ 修复 WorkingDirectory 空白字符导致路径解析失败
- ✅ 新增
safe_remove()统一安全删除包装函数 - ✅ 新增 SIGINT 陷阱确保临时文件清理
- ✅ 扩大搜索范围至
/var/log和/var/lib
v1.2 新特性 (Previous):
- 🔍 智能路径追踪 — 通过
/proc/{pid}/exe和 systemd 服务文件自动发现非标准安装路径 - 🛡️ 系统目录保护 — 防止误删系统关键目录
v1.0 → v1.1 用户务必升级! v1.0 存在误删风险。
- 🆕 双模式菜单 - v2.2 交互式菜单,可选卸载 Agent / Dashboard / 两者
- 🛡️ 安全可靠 - v2.2 四层 Docker 纵深防御 + 媒体文件保护 + 精准叶子目录保护 +
safe_remove()统一安全删除,杜绝误删 - 🔍 智能路径追踪 - 通过
/proc/{pid}/exe和 systemd 服务文件自动发现非标准安装路径 - 🌐 双语支持 - 同时显示中文和英文提示信息
- 🧹 彻底清理 - Agent 和 Dashboard 各执行 12 步流程全面清理
- 🔄 交互式操作 - 对于重要操作会请求用户确认,curl-pipe 场景下正常工作
- 🎨 彩色输出 - 使用不同颜色区分信息类型,提高可读性
- 🐳 Docker支持 - 检测并提供清理相关Docker容器和镜像的选项
- ✅ 最终验证 - 完成后进行最终检查确保彻底清理
- 🔒 精确匹配 - 使用严格的模式匹配,避免影响其他软件
bash <(curl -s https://raw.githubusercontent.com/everett7623/Nezha-cleaner/main/nezha-agent-cleaner.sh)bash <(wget -qO- https://raw.githubusercontent.com/everett7623/Nezha-cleaner/main/nezha-agent-cleaner.sh)wget -O nezha-agent-cleaner.sh https://raw.githubusercontent.com/everett7623/Nezha-cleaner/main/nezha-agent-cleaner.sh
chmod +x nezha-agent-cleaner.sh
sudo ./nezha-agent-cleaner.sh脚本将执行以下步骤来彻底清理哪吒探针Agent:
The script will perform the following steps to thoroughly clean up the Nezha Agent:
| 步骤 | 说明 | Step | Description |
|---|---|---|---|
| 1️⃣ | 检查进程 | Check Processes | Identify all running Nezha Agent processes |
| 🔍 | 智能路径追踪 | Smart Path Tracking | Trace binary paths via /proc and systemd for non-standard installs |
| 2️⃣ | 检查定时任务 | Check Cron Jobs | Find and remove related crontab entries |
| 3️⃣ | 停止服务 | Stop Services | Stop and disable all Nezha-related systemd services |
| 4️⃣ | 终止进程 | Kill Processes | Forcefully terminate all related processes |
| 5️⃣ | 删除服务文件 | Remove Service Files | Clean up all service configuration files |
| 6️⃣ | 删除二进制文件 | Remove Binaries | Remove all executable files and installation directories |
| 🎯 | 清理追踪路径 | Clean Tracked Paths | Remove non-standard paths discovered in smart tracking |
| 7️⃣ | 查找相关文件 | Find Related Files | Comprehensive scan and removal of all related files |
| 8️⃣ | 重载系统配置 | Reload systemd | Refresh systemd configuration |
| 9️⃣ | 检查Docker容器 | Check Docker | Identify and offer to clean related Docker containers |
| 🔟 | 最终验证 | Final Verification | Confirm everything has been cleaned |
- ✅ 此脚本必须以 root 权限运行
- ✅ 使用前请确保备份任何重要数据
- ✅ 建议先在测试环境中运行
- 🔔 脚本有交互式步骤,需要人工确认某些操作
- 🔔 步骤7会列出所有包含"nezha"的文件,请仔细检查后再确认删除(媒体/文档文件会自动跳过)
- 🔔 步骤9会检测Docker容器,根据需要选择是否删除
- 🔄 如果清理后问题仍然存在,建议重启系统
- 🔄 可运行脚本中的"最终检查"部分确认清理效果
- ✅ Docker 内部存储 (
/var/lib/docker,/var/lib/containerd) — 被全局扫描显式排除 - ✅ 用户媒体/文档文件 (
.png,.jpg,.pdf,.md,.mp4等 27 种格式) — 即使文件名含"nezha"也自动跳过 - ✅ 其他 Docker 容器 — 四层防御(原生过滤 → 归属分类 →
docker inspect验证 → 镜像二次确认),非 nezha 容器自动跳过 - ✅ Dashboard 模式下 Agent 容器 — 容器名含
nezha-agent的自动跳过 - ✅ Agent 模式下 Dashboard 容器 — 原生过滤仅匹配
*nezha-agent* - ✅
ssh-agent- SSH密钥代理 - ✅
1panel-agent- 1Panel管理面板 - ✅
tailscale-agent- Tailscale VPN客户端 - ✅
packagekit- 系统包管理工具 - ✅
mail-agent- 邮件代理 - ✅ 任何其他不包含"nezha"的agent软件
脚本使用以下严格的匹配模式:
- Dashboard 进程:
nezha-dashboard - Agent 进程:
nezha-agent - Dashboard 服务:
nezha-dashboard.service或nezha.service(排除 Agent) - Agent 服务:
nezha-agent.service或nezha.service - 文件:文件名必须包含
nezha(Docker/containerd 内部存储已被排除) - Dashboard Cron:
nezha-dashboard或/nezha/dashboard - Agent Cron:
nezha-agent或/nezha/ - Agent Docker 容器:Docker 原生
--filter "name=*nezha-agent*"过滤 - Dashboard Docker 容器:
--filter "name=*nezha*"+ 分类跳过*nezha-agent* - Docker 镜像:
grep -iE "nezha"匹配,删除前二次确认 - Docker 纵深防御: 原生过滤 → 归属分类 →
docker inspect验证 → 镜像二次确认
- 📊 新增: 可选使用统计计数器 — 设置
NEZHA_CLEANER_USAGE_STATS=1后显示累计运行次数,默认不联网统计 - 🐛 修复: trap覆盖 — Both模式下临时文件不再泄漏(全局数组追踪)
- 🐛 修复: 符号链接保护 —
safe_remove()检测指向保护目录的 symlink - 🐛 修复: ExecStart前缀 — 扩展剥离字符类支持
:修饰符 - 🐛 修复: crontab边界 — 空 crontab 使用
crontab -r,无 crontab 命令时跳过 - 🐛 修复: 竞态条件 — pgrep 路径追踪增加
/proc/$pid存在性检查 - 🐛 修复: Docker匹配 — Agent模式 grep 收窄为
nezha-agent,不再误匹配 Dashboard - 📝 文档: README 和脚本版本号更新至 v2.2
- 🐛 致命修复:
safe_remove()新增文件类型保护 — 自动跳过图片/文档/媒体文件(27 种扩展名) - 🐛 修复: 全局 find 扫描不再误删用户文章配图等非哪吒监控组件的用户内容
- 📝 文档: CLAUDE.md 和 README 同步更新至 v2.1
- 🆕 新增: 交互式主菜单 — 可选 Agent、Dashboard 或同时卸载
- 🆕 新增: Dashboard (主控端) 12步安全清理流程
- 🆕 新增: Docker 镜像删除 — 容器清理后二次确认删除 nezha 镜像
- 🆕 新增: 容器归属分类 — Agent/Dashboard 模式互不干扰
- 🛡️ 升级: Docker 纵深防御从三层升级为四层(+ 镜像二次确认)
- 🔧 重构: 清理逻辑函数化,变量隔离,支持 Both 模式
- 📝 文档: CLAUDE.md 和 README 同步更新至 v2.0
- 🛡️ 修复: Step 7 find 扫描排除
/var/lib/docker和/var/lib/containerd,防止误伤容器数据 - 🛡️ 修复: Step 9 Docker 检测使用原生
--filter "name=*nezha*"+ 关联数组,消除脆弱降级逻辑 - 🔐 新增: 删除前通过
docker inspect逐容器验证,非 nezha 容器自动跳过并警告 - 🔧 修复: Step 5 裸
rm -f统一替换为safe_remove(),享受完整三重保护 - 🎯 纵深防御: 三层防护(原生过滤 → grep 补充 → inspect 验证)杜绝 Docker 误删
- 📝 文档: README 和 CLAUDE.md 同步更新至 v1.4
- 🐛 修复: pkill 不再误匹配脚本自身进程(
[n]ezha-agent括号技巧) - 🐛 修复:
is_protected_dir转为精准叶子目录保护(/usr/bin而非/usr) - 🐛 修复: curl-pipe 场景下交互提示失效(
read重定向自/dev/tty) - 🐛 修复: ExecStart 前缀修饰符(
-,@,+,!)正确剥离 - 🐛 修复: 文件名匹配大小写不一致(
find -iname) - 🐛 修复: WorkingDirectory 空白字符导致路径解析失败
- 🐛 修复: mktemp 失败处理
- ✨ 新增:
safe_remove()统一安全删除包装函数 - ✨ 新增: SIGINT 陷阱确保临时文件清理
- ✨ 新增: 搜索范围扩展至
/var/log和/var/lib
- ✨ 新增: 智能路径追踪 — 通过
/proc/{pid}/exe发现非标准安装路径 - ✨ 新增: 通过 systemd 服务文件分析
ExecStart和WorkingDirectory - ✨ 新增: 系统目录保护机制(
is_protected_dir()) - ✨ 新增: 去重显示所有发现的安装路径
- 🐛 修复严重bug: 步骤7文件搜索从
*agent*改为*nezha* - ✅ 优化所有grep/find命令的匹配模式
- ✅ 移除危险的通用目录(
/opt/agent,/usr/local/agent) - ✅ 添加二次确认机制
- ✅ 改进Docker容器识别逻辑
- 📝 更新文档,添加安全说明
- 🎉 首次发布
⚠️ 已知问题:步骤7可能误删其他agent软件(已在v1.1修复)
| 功能 | v1.0 | v1.1 | v1.2 | v1.3 | v1.4 | v2.0 | v2.1 | v2.2 |
|---|---|---|---|---|---|---|---|---|
| 基础清理功能 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 精确匹配nezha文件 | ✅ 完全 | ✅ 完全 | ✅ 完全 | ✅ 完全 | ✅ 完全 | ✅ 完全 | ✅ 完全 | |
| 避免误删系统文件 | ❌ 有风险 | ✅ 安全 | ✅ 安全 | ✅ 安全 | ✅ 安全 | ✅ 安全 | ✅ 安全 | ✅ 安全 |
| 二次确认机制 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 媒体/文档文件保护 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ 27种格式 | ✅ 27种格式 |
| Docker容器精确识别 | ✅ 精确 | ✅ 精确 | ✅ 精确 | ✅ 原生过滤+验证 | ✅ 四层防御 | ✅ 四层防御 | ✅ 四层防御 | |
| 智能路径追踪 | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 系统目录保护 | ❌ | ❌ | ✅ | ✅ (精准叶子级) | ✅ (精准叶子级) | ✅ (精准叶子级) | ✅ (精准叶子级) | ✅ (精准叶子级) |
| curl-pipe 交互支持 | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
统一安全删除 safe_remove() |
❌ | ❌ | ❌ | ✅ | ✅ (全覆盖) | ✅ (全覆盖) | ✅ (全覆盖) | ✅ (全覆盖) |
| Docker 内部存储排除 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
| docker inspect 逐容器验证 | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Dashboard (主控端) 卸载 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| Docker 镜像删除 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| 容器归属分类 (Agent/Dashboard) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| 交互式主菜单 | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| 使用统计计数器 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ 可选启用 |
| 推荐使用 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ 强烈推荐 |
此项目采用 MIT License 开源许可协议。
This project is licensed under the MIT License.
欢迎提交问题报告和功能请求!如果您想贡献代码,请随时提交拉取请求。
Feel free to submit issue reports and feature requests! If you want to contribute code, please submit pull requests at any time.
- Fork 本项目
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature) - 提交您的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启一个 Pull Request
如果您遇到问题,请通过 GitHub Issues 反馈,提供以下信息:
If you encounter any issues, please report them via GitHub Issues with the following information:
- 操作系统版本 (OS version)
- 脚本版本 (Script version)
- 错误信息截图或日志 (Error screenshots or logs)
- 复现步骤 (Steps to reproduce)
Q: 为什么需要root权限?
A: 因为需要操作systemd服务、删除系统目录和终止进程,这些操作都需要管理员权限。
Q: 会影响其他软件吗?
A: v2.2 版本已加入四层 Docker 纵深防御体系 + 媒体文件保护,Dashboard 模式会自动跳过 Agent 容器(反之亦然)。Docker 内部存储目录被显式排除,删除前通过 docker inspect 逐容器验证,图片/文档等用户文件即使文件名含"nezha"也会自动跳过。其他软件完全不受影响。
Q: 清理后如何确认?
A: 脚本结束时会进行最终检查,显示是否还有残留的进程或服务。您也可以重新运行脚本来验证。
Q: 支持哪些Linux发行版?
A: 支持所有使用systemd的Linux发行版,包括Ubuntu、Debian、CentOS、Fedora、Arch Linux等。
Q: Dashboard 和 Agent 有什么区别?该选哪个?
A: Dashboard(主控端)是监控面板,通常部署在一台服务器上;Agent(被控端)安装在被监控的每台 VPS 上。想卸载监控面板选 2,想卸载某台 VPS 上的探针选 1,想全部清除选 3。脚本会自动识别并根据选择跳过不属于当前模式的容器。
如果您觉得这个项目有用,请考虑:
If you find this project useful, please consider:
- ⭐ 给项目一个星标 (Give it a star)
- 🔀 Fork 并分享给其他人 (Fork and share with others)
- 💬 在社区中推荐 (Recommend in your community)
- 🐛 提交问题和建议 (Submit issues and suggestions)
- 👨💻 GitHub: @everett7623
- 💬 Issues: 报告问题
- VPSKnow — 专注 VPS 运维的中文知识平台。提供 30+ 运维教程、60+ 服务商评测、工具箱及代理搭建指南,内容永久免费,真实测试优先。
- 哪吒探针 — 优秀的 Linux 服务器监控工具(本脚本清理的目标软件)
感谢所有为本项目做出贡献的开发者!
Thanks to all contributors who have helped this project!
- 所有提交Issue和PR的贡献者
- 哪吒探针社区的用户反馈与测试
🎉 感谢使用哪吒探针Agent清理工具!
Thank you for using Nezha Agent Cleaner!
Made with ❤️ by everett7623
