说实话,我第一次卸 OpenClaw(就是大家常叫的“龙虾”)的时候,以为跑一句npm uninstall -g openclaw就完事了。结果过了两周,某台机器的终端配置里还躺着它的环境变量,WSL 里还蹲着一个旧版实例,Windows 那边连 Companion 的托盘进程都还活着。这次经历让我彻底明白:卸载一个现代命令行工具,从来不是“删掉主程序”这么简单。OpenClaw 可能通过 npm 全局包、源码目录、WSL 子系统、Windows Companion 四种方式分别留下痕迹,任何一条漏掉,都会在你下次打开终端或者重启服务时猝不及防地跳出来。
这篇文章就把我从命令行到残留清理的完整排查链路写出来。不管你是装完试了两天就想删的新手,还是部署了 skill、配过记忆库、改过环境变量的进阶用户,都能按图索骥,一次卸干净,别像我一样返工。
1. 卸载前先摸清安装方式:三种常见路径的区别
很多人上来就执行卸载命令,结果要么提示“找不到包”,要么删了主程序但配置文件还在,最尴尬的是删到一半才发现自己根本不记得当初是怎么装的了。所以第一步不是动手删,而是花三分钟搞清楚 OpenClaw 到底以什么形式存在于你的系统里。
1.1 判别方法:命令、目录、包管理器三管齐下
先做最基础的定位。打开终端,依次执行下面几条命令,把输出记下来:
# 查看可执行文件的实际路径(macOS/Linux) which openclaw # Windows PowerShell Get-Command openclaw | Select-Object Source # 查看 npm 全局包列表里有没有它 npm ls -g --depth=0 | grep openclaw # Windows 下没有 grep 就用 npm ls -g --depth=0 | findstr openclaw # 看看是不是通过 Homebrew 装的 brew list | grep openclaw这一步的输出能直接告诉你第一重身份。如果which openclaw返回的路径在/usr/local/bin或者 npm 的全局 bin 目录下,基本可以确定是 npm 全局安装;如果路径指向某个你手动 clone 的目录,比如~/projects/openclaw,那就是源码部署;如果命令根本找不到,但你在终端里明明能用,多半是 WSL 内部安装,或者 Windows Companion 的可执行文件路径被加进了 PATH。
1.2 区分 npm 全局安装与源码部署的影响范围
这两种安装方式最大的区别在于:npm 全局包的文件分散在 node_modules 和全局 bin 目录里,删除后还需要确认没有别的项目依赖它;而源码部署通常把代码、配置、数据都集中在同一个目录下,看起来好删,但风险反而是数据目录和配置目录可能散落到用户目录的其他位置。
我自己见过最典型的翻车场景:有人从 GitHub 上 clone 了一份 OpenClaw 源码放在~/dev/lobster,运行时它会在~/.config/openclaw/和~/.local/share/openclaw/下写入配置和数据。后来他直接rm -rf ~/dev/lobster,以为删干净了,其实~/.config里的 skill 配置和对话历史原封不动地躺在那里。所以卸载前,一定要把“程序主目录”和“配置数据目录”分开来看。
1.3 WSL 场景的特殊判别:先看发行版状态
如果你是在 Windows 上用 WSL 跑 OpenClaw,情况又复杂一层。热词里那句“OpenClaw 无法安全验证 SL2 环境。请在 PowerShell 中运行 wsl -- status”我见过很多次,这是典型的 WSL 版本或发行版状态异常导致的报错。卸载前先在 PowerShell 里跑一下:
wsl --status wsl --list --verbose输出会告诉你当前默认版本是 WSL 1 还是 WSL 2,以及你装了几个发行版、分别是 Running 还是 Stopped 状态。如果 OpenClaw 是装在某个发行版内部的,那你要处理的对象不是 Windows 应用,而是那个发行版环境——要么进入发行版内部卸载,要么直接把整个发行版注销。两种做法的后果差异很大,后面我会专门展开。
1.4 别忘了 Windows Companion 这种“看起来不像命令行”的安装
很多开源工具为了让普通用户能用起来,会额外提供一个桌面伴侣程序。OpenClaw 的 Windows Companion 就是这种角色。它本身可能是一个独立安装包,也可能只是把 Node.js 服务和托盘图标绑定在一起。你在命令行里搜不到它的身影,但它在任务栏右下角、启动管理器里都占着位置。所以判别安装方式时,别只盯着终端,还要去“设置—应用”里搜一下 openclaw 相关条目,同时打开任务管理器看一下有没有相关后台进程。
2. 命令行卸载主流程:四类安装场景的分路操作
确定好安装方式之后,就可以各走各的卸载路径了。下面是四类最常见场景的完整命令和操作细节,每一步我都会解释为什么这么做,而不是只丢给你一条命令。
2.1 npm 全局包的标准卸载与权限坑
这是最简单也最容易出幺蛾子的一类。标准命令只有一条:
npm uninstall -g openclaw但这里有个非常典型的坑:如果你当初安装时用了sudo,那么卸载时大概率也需要sudo,否则你会看到一堆EACCES: permission denied的报错。我见过太多人卡在这一步,然后就误以为“卸不掉”。其实正确的做法是保持安装时的权限一致性:
# 如果之前用 sudo 安装,卸载也用 sudo sudo npm uninstall -g openclaw另外一个细节是:如果你用的是 pnpm 或 yarn 这类替代包管理器,不要混用。用 pnpm 安装的全局包,npm 是删不掉的。先确认到底是哪个包管理器装的:
pnpm ls -g | grep openclaw yarn global list | grep openclaw确认之后再对应用pnpm uninstall -g openclaw或yarn global remove openclaw来卸载。这一步容易被忽略,因为命令行里输入openclaw能跑,大家就默认是 npm 装的,实际上底层的符号链接可能来自 pnpm 的全局仓库,混用包管理器会导致删完 npm 侧的数据后,命令依然能执行。
卸载完成后不要急着走,顺手把全局目录里的符号链接确认一下:
# 查看 openclaw 命令是否还存在 which openclaw如果提示not found,说明主程序已经摘干净了。
2.2 源码部署目录的处理:停进程、删目录、查数据三连击
源码部署卸起来步骤多一些。核心逻辑有三步:先把正在跑的进程停下来,再把代码目录删掉,最后去查它运行时写出去的数据。
第一步,停进程。很多人直接删目录,结果进程还占着端口,过一会儿目录又自己冒出来,甚至报“Text file busy”。正确做法是:
# 找到 openclaw 相关进程 ps aux | grep openclaw # 或者 Windows 下用 tasklist 和 taskkill tasklist | findstr openclaw拿到 PID 之后用kill -9 <PID>或者taskkill /PID <PID> /F强制结束。
第二步,删目录。把当初 clone 或者解压出来的主目录整个删掉。如果你不记得目录在哪,可以回到 1.1 节用which openclaw溯源,顺着符号链接找到真实路径,再往上回退到项目根目录。
第三步也是最重要的一步,查数据。源码部署的 OpenClaw 几乎一定会往用户目录写入配置和数据,常见位置包括:
~/.openclaw/~/.config/openclaw/~/.local/share/openclaw/~/.cache/openclaw/
这些目录不会因为主程序删除而自动消失。删不删取决于你的需求:如果只是不想用这个工具了,我建议把配置和数据一起清掉,真正做到“干净卸载”;如果以后可能还会装回来,可以把整个~/.openclaw目录打包备份,而不是直接删空。
2.3 WSL 内部的卸载:进子系统删,还是直接注销发行版?二选一的决策
WSL 场景是 OpenClaw 卸载里最需要谨慎的。你要先想清楚一个问题:OpenClaw 是装在一个独立的发行版里,还是和你日常使用的 Ubuntu/Debian 混在一起。
如果是混在常用发行版里,那就不能把发行版整个注销,而是进入 WSL 环境内部,按 Linux 的方式卸载。假设你在 WSL 的 Ubuntu 里用 npm 装的:
# 先进入 WSL wsl # 然后在 WSL 内部执行 npm uninstall -g openclaw rm -rf ~/.openclaw ~/.config/openclaw如果你当初是为了跑 OpenClaw 专门装了一个发行版,或者发现这个发行版里几乎没有其他用途,那直接注销整个发行版更省事。方法是在 PowerShell 里执行:
# 先看发行版列表和名称 wsl --list --verbose # 注销指定发行版,注意大小写和名称要完全一致 wsl --unregister <DistroName>这个命令会把整个发行版的文件系统删除,包括里面所有数据,执行前系统也会给你警告。如果你在乎里面的任何数据,先备份再注销。注销之后再用wsl --list --verbose确认列表里已经空了。
这里要特别解释热词里提到的那个场景——“OpenClaw 无法安全验证 SL2 环境,请在 PowerShell 中运行 wsl -- status”。我遇到过用户反馈:OpenClaw 装好后提示 WSL 环境验证失败,结果他以为是 OpenClaw 有问题,跑去重装 WSL,最后才发现是系统里存在多个发行版,OpenClaw 的启动脚本检测到的默认版本不是它运行所需要的那个。类似这种报错,卸载时也可能复现。遇到这种情况,优先处理 WSL 本身的版本一致性,再谈卸载 OpenClaw;否则你即使卸了 OpenClaw,WSL 里的残留环境依然可能干扰其他工具。
2.4 macOS 与 Homebrew 场景的补充说明
如果你是在 macOS 上通过 Homebrew 安装的 OpenClaw,卸载就多一条分支:
brew uninstall openclaw但 Homebrew 卸载后同样会残留缓存。你可以顺手用brew cleanup清掉旧的下载缓存,再手动检查/usr/local/Caskroom(如果当初是通过brew install --cask装的)里有没有对应的应用残留。另外 macOS 下很多人的 shell 是 zsh,PATH 配置写在了~/.zshrc里,后面清理环境变量时要注意这个差异。
3. 残留清理:配置目录、缓存、环境变量与 PATH 的全面排查
主程序卸完之后,真正的重头戏才开始。OpenClaw 这种带 skill 机制、记忆库和配置系统的工具,运行时会在系统里埋下不少“地雷”,一个不拆,将来轻则占用磁盘,重则导致其他命令行工具的行为异常。
3.1 配置文件到底散落在哪:按平台逐一排查
先给出一份按操作系统的排查清单,你可以照着逐个检查:
| 平台 | 配置目录 | 数据目录 | 缓存目录 |
|---|---|---|---|
| Linux | ~/.config/openclaw/ | ~/.local/share/openclaw/ | ~/.cache/openclaw/ |
| macOS | ~/Library/Application Support/openclaw/ | ~/Library/Application Support/openclaw/ | ~/Library/Caches/openclaw/ |
| Windows | %APPDATA%\openclaw\ | %APPDATA%\openclaw\ | %LOCALAPPDATA%\openclaw\ |
这份清单是基于大多数 Node.js 命令行工具遵循的目录规范推断的,具体到你机器上,可能名称稍有出入,但搜索方法是一致的。在 Linux/macOS 上可以用一条命令快速摸清所有相关目录:
find ~ -maxdepth 4 -iname "*openclaw*" 2>/dev/nullWindows 上则推荐用 PowerShell:
Get-ChildItem -Path $env:USERPROFILE -Recurse -Depth 3 -Filter "*openclaw*" -ErrorAction SilentlyContinue | Select-Object FullName搜索出来的结果,你要区分哪些是必须删的配置,哪些是日志和缓存。配置目录里面通常有config.yaml、skills/、memory/之类的结构;缓存目录里则多半是临时文件、日志、模型调用的中间产物。我的原则是:配置和数据目录按需备份或删除,缓存目录直接删掉,不需要任何心理负担。
3.2 环境变量和 PATH:删不干净的隐形残留
很多人在卸载后遇到“明明卸了,终端一打开还是会加载 OpenClaw 相关的东西”或者“提示找不到 openclaw 命令,但某条 PATH 里还有它的路径”,问题就出在环境变量上。
你需要检查以下几类位置:
- Shell 配置文件:
~/.bashrc、~/.zshrc、~/.profile、~/.config/fish/config.fish - 系统级 PATH:macOS 的
/etc/paths和/etc/launchd.conf,Windows 的“系统环境变量” - 启动脚本:Linux 的
~/.bash_profile,macOS 的~/Library/LaunchAgents/下的 plist 文件,Windows 的“启动”文件夹和注册表 Run 键
排查方法很简单,用搜索命令把这些文件里包含 openclaw 或相关路径的行找出来:
# Linux/macOS grep -n -i "openclaw\|lobster" ~/.bashrc ~/.zshrc ~/.profile ~/.bash_profile 2>/dev/null # Windows PowerShell Select-String -Path "$env:USERPROFILE\.bashrc","$env:USERPROFILE\.zshrc" -Pattern "openclaw" -SimpleMatch找到之后,手动删除对应的export PATH=...openclaw...或alias openclaw=...行。这里有个容易手滑的坑:如果你只是删除了命令,但没有删掉导出 PATH 的那一行,终端启动时不会报错,但每次打开新终端都会多一次“查找不存在的路径”的无效操作,积少成多,终端的启动速度会明显变慢。
Windows 用户还需要额外检查一下 PowerShell 的 profile 文件,可能藏在:
$PROFILE这个路径因人而异,但通常位于Documents\WindowsPowerShell\或Documents\PowerShell\下。打开之后搜索 openclaw,删掉相关初始化代码。
3.3 开机自启任务和系统服务的清理
OpenClaw 这类常驻型工具,安装时很可能顺手注册了自启任务。卸载主程序后,如果你的系统每次开机依然会尝试拉起某个 openclaw 后台进程,或者某个端口还是被占用,问题就出在自启项上。
按平台排查:
- Linux (systemd):
systemctl --user list-unit-files | grep openclaw,有输出就执行systemctl --user disable openclaw.service并删除对应的 service 文件。 - macOS (LaunchAgent):检查
~/Library/LaunchAgents/下面有没有com.openclaw.plist之类的文件,有就launchctl unload之后直接rm。 - Windows (任务计划程序):在“任务计划程序”里搜索 openclaw;同时按下
Win + R输入shell:startup查看启动文件夹。
这一块很多人会漏掉,但它恰恰是“卸了还复蹦”的头号根源。尤其是 Windows 上有些工具会注册一个“在用户登录时运行”的任务,你删了程序文件,任务计划还指向原路径,虽然会报错,但进程管理列表里看起来依然有 openclaw 的踪迹,很容易造成“根本没卸干净”的错觉。
3.4 浏览器扩展和其他联动物:最后再扫一遍
如果你在浏览器里装过 OpenClaw 配套的扩展(比如用于唤起本地命令行的工具),需要在浏览器扩展管理页把它禁用一个一个移除。同时,检查一下 IDE 或终端软件里是否配置了与 OpenClaw 集成的插件或快捷键。具体表现为:你在 VS Code 的命令面板里还能搜到 openclaw 相关命令,或者终端美化工具(比如 Starship、Oh My Zsh)的配置里还有一行command = "openclaw --version"。
这类联动的残留不影响系统稳定性,但会影响使用体感。每次打开终端,你都会看到一行红色提示“command not found: openclaw”,非常烦人。解决方式就是沿着配置文件的引用关系往回找,把对应的配置项删掉。
4. WSL 集成与 Windows Companion:最容易漏掉的两个角落
前文提到过这两个入口,但它们的坑实在太典型,值得单独拿出来展开讲。如果你在 Windows 上用过 OpenClaw,我强烈建议你把这一节看完。
4.1 WSL 环境残留的判定方法
很多人在 Windows 上卸载了所有可见的 OpenClaw 程序后,却发现wsl --status的输出依然异常,或者某个端口被未知进程占用,这时最可能的原因就是 WSL 内部还有一套 OpenClaw 环境。判定方法很简单:
# 查看所有 WSL 发行版 wsl --list --verbose # 进入疑似装有 OpenClaw 的发行版检查 wsl -d <DistroName> -- which openclaw如果which openclaw输出了一个路径,说明这个发行版内部确实装了 OpenClaw。接下来你要决定是只删内部包,还是注销整个发行版。我在 2.3 节已经给过两种做法的详细命令,这里补充一个决策标准:如果你平时还会用这个 WSL 发行版跑其他开发任务,就进入内部卸载;如果这个发行版是当初为了跑 OpenClaw 专门装的,里面已经没什么值得保留的数据了,就直接注销。注销这件事本身也能顺便清理掉很多 Windows 和 WSL 之间的关联配置。
4.2 wsl --unregister 背后的驱动器和数据影响
wsl --unregister这个命令很强大,它会把整个发行版的虚拟磁盘文件(通常是一个.vhdx文件)连同内部所有文件系统数据删除。所以执行前你需要知道三件事:
- 你的
.vhdx文件占了多大空间,删除后会被释放。 - 发行版内部有没有你还没备份的数据。
- 卸载后是否会影响 Docker Desktop 或其他依赖 WSL 的工具。
我建议任何人在注销之前先跑一次wsl --export到外部磁盘,哪怕是临时的安全备份:
wsl --export <DistroName> D:\backup\distro.tar注销之后如果后悔了,还能用wsl --import恢复回来。这个操作成本很低,但能在关键时刻救命。
另外,卸载 OpenClaw 不一定非要注销整个发行版。如果当初只是在一个通用发行版里通过 npm 装的,那:
npm uninstall -g openclaw rm -rf ~/.openclaw ~/.config/openclaw ~/.cache/openclaw就足够了,完全没必要动发行版本身。别把“彻底卸载”理解成“要把与之相关的所有东西全部暴力删除”,精准打击才是效率最高的。
4.3 Windows Companion 的卸载路径与隐藏组件
Windows Companion 这类伴生程序,它的卸载入口通常隐藏在“设置—应用—已安装的应用”里,搜索 openclaw 就能看到。点卸载后,程序主体会消失,但有几类东西它会悄悄留下:
- 当前用户目录下的
.openclaw配置文件夹(如果 Companion 和命令行工具共用配置目录) - 注册表里
HKCU\Software\OpenClaw相关的键 - 任务计划程序里名为 OpenClaw Updater 之类的更新任务
- 防火墙规则里指向 OpenClaw 的入站/出站规则
前两类按照第 3 节的方法清理即可。注册表项可以用regedit手动搜索删除,但操作前一定要先备份注册表或者至少导出对应分支。防火墙规则可以在“高级安全 Windows Defender 防火墙”里找到后右键删除。
一个比较冷门但真实存在的情况:Companion 可能会把自己的数据写到%PROGRAMDATA%\OpenClaw\(系统级 ProgramData),这个位置默认隐藏,普通用户根本不会去看。删除时如果权限不足,可能需要管理员权限,路径是C:\ProgramData\OpenClaw。在资源管理器地址栏直接输入这个路径,能进去就说明还在,删掉它,不然下次装新版 OpenClaw,它连配置和登录状态都能给你保留下来,说不定还会和你新装的版本起冲突。
4.4 与终端和 IDE 的关联配置:Git Bash、VS Code、Windows Terminal 的场景
最后提醒一个非常容易被忽略的角落:如果 OpenClaw 为 Windows Terminal 或 VS Code 添加过自定义配置(比如自定义 profile、集成终端的 shell 路径),你卸载后打开 Windows Terminal 的下拉菜单,可能还能看到一个名为“OpenClaw”的独立标签页配置。清理方法是打开 Windows Terminal 的设置 JSON 文件,搜索 openclaw,把对应的 profile 配置块删掉。VS Code 的话,在settings.json里搜索 openclaw 路径,把相关的终端配置项一并清掉。
5. 验证卸载是否彻底:三条命令、两个目录、一个端口
很多人卸载完就以为大功告成,直到某天需要排查问题时才被残留文件打脸。我习惯在卸载完成后做一套标准验证流程,全部通过才算真正结束。这套流程总共分五步,每一步都对应一类最容易被遗漏的残留。
5.1 第一步:命令层级验证
回到终端,执行:
# 检查 openclaw 是否还能被找到 which openclaw # Windows PowerShell 用 Get-Command openclaw # 直接尝试执行 openclaw --version如果输出是command not found或者无法将“openclaw”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,第一层通过。
这里我额外加一条:如果你的 shell 之前加载过 openclaw 的补全脚本(很多工具安装时会往~/.bash_completion.d/或 zsh 的compinit里塞补全文件),删除后补全系统里可能仍然缓存着旧命令。验证方法就是打开一个新的终端标签页,输入openclaw再按两下 Tab,如果没有任何补全提示,说明干净了。如果没有,就得去.bash_completion.d/或 zsh 的补全目录里把 openclaw 相关文件删掉。
5.2 第二步:目录层级验证
按第 3.1 节的清单逐一访问这些路径:
~/.openclaw或~/.config/openclaw~/.local/share/openclaw或~/Library/Application Support/openclaw~/.cache/openclaw或%LOCALAPPDATA%\openclaw%APPDATA%\openclaw
在文件管理器地址栏直接输入这些路径,如果提示“找不到路径”或目录不存在,第二层通过。如果目录还在但里面是空的,说明残留了空壳目录,顺手删掉即可。
5.3 第三步:进程与端口验证
OpenClaw 拉起的后台服务通常会监听某个本地端口。虽然具体端口号可能因配置而异,但你可以用一个通用方案来排查:
# Linux/macOS lsof -i :<端口号> 2>/dev/null # 或者直接搜索进程 ps aux | grep -i openclaw # Windows netstat -ano | findstr :<端口号> tasklist | findstr -i openclaw如果没有任何进程和端口占用,第三层通过。如果你不确定 OpenClaw 用的是什么端口,可以观察netstat -ano | findstr LISTENING的输出里有没有陌生的本地地址,结合进程名判断。
5.4 第四步:自启项与计划任务验证
这一步针对 3.3 节的清理做复检:
- Linux:
systemctl --user list-unit-files | grep openclaw输出为空 - macOS:
ls ~/Library/LaunchAgents | grep openclaw输出为空 - Windows:任务计划程序里搜索 openclaw 无结果,“启动”文件夹里也没有相关快捷方式
全部为空,第四层通过。
5.5 第五步:注册表与配置引用验证(Windows 专项)
Windows 用户最后在注册表里搜一遍 openclaw:
reg query HKCU\Software /f "openclaw" /s reg query HKLM\Software /f "openclaw" /s如果提示“找不到”,说明注册表层面的残留也清理干净了。这一项对通过 Companion 安装过 OpenClaw 的机器特别重要,因为部分版本会把已安装路径写到注册表的 App Paths 键里,这个键不清掉,你在“运行”对话框里输入 openclaw 依然可能会触发错误弹窗。
五步走完,这台机器才算真正和 OpenClaw 撇清关系。这个验证流程看起来繁琐,但顶多花五分钟,能帮你省掉后续无数“奇怪的报错”排查时间。
6. 我踩过的坑:权限、误删数据、清理过度
最后分享几个我在实际卸载过程中踩过的坑,希望你别在同一个地方跌倒。这里没有大道理,全是真实操作的教训。
6.1 第一个坑:sudo 安装的包,普通权限卸载
我第一次卸载 npm 全局包时,直接敲了npm uninstall -g openclaw,刷了满屏的EACCES错误。当时以为是包损坏,还跑去重装了 Node.js。后来才反应过来,安装时用了sudo,卸载也必须用sudo。记住一句话:安装时的权限等级就是卸载时的权限等级。另外用sudo npm本身就是个不太好的习惯,很容易污染全局目录的归属权限。如果你已经这么干了,卸载后顺手chown -R $(whoami) /usr/local/lib/node_modules /usr/local/bin把目录归属改回来,不然以后装别的全局包还会遇到权限问题。
6.2 第二个坑:把配置目录当缓存目录一把梭
清理残留时我把~/.config/openclaw整个删了,当时想着反正不用了,全删干净。结果后来项目需要提取之前的对话历史和 skill 配置时才发现没了。其实配置目录里的数据并不是一堆垃圾,有些是你投入过时间调出来的东西。现在我的原则是:清理前先看一眼目录大小和内容结构,凡是和“学习痕迹”相关的(比如skills/、memory/、agents/)全部先打包备份,放到一个固定的 backup 目录里,确认三个月内用不到再删。备份的命令很简单:
tar -czf openclaw-backup.tar.gz ~/.openclaw ~/.config/openclaw磁盘上多一个几百 MB 的压缩包,远好过失去不可再生的数据。
6.3 第三个坑:清理过度,误删了共享的 Node 模块
有一次我为了“彻底卸载”,手动去node_modules目录里把所有带 openclaw 字样的文件夹都删了,结果顺手删掉了一个被其他工具共同依赖的公共模块。第二天另一个 CLI 工具直接跑不起来,那个报错让我排查了一个下午。所以我的建议是:不要让手动删除成为第一选择,能用npm uninstall这类标准流程就用标准流程。标准卸载命令比手动rm -rf聪明得多,它会处理依赖关系和全局软链,不会伤及无辜。
6.4 第四个坑:卸载后命令还在的原因——Shell 哈希缓存
删完主程序后,我打开终端执行openclaw,居然还能找到命令。当时一度以为没删干净,反复检查了好几遍。后来才明白,shell 会把命令路径缓存到哈希表里,尤其是 zsh 和 bash。解决办法很简单,跑一下hash -r,或者直接关闭当前终端重新开一个,哈希缓存就会刷新。如果你用的是现代终端工具,比如 Windows Terminal 或 Warp,它们为了加快启动速度会预存一批命令路径,这个缓存要稍微等一会儿或者重启终端才能刷新。
6.5 第五个坑:Windows 上卸载工具和注册表清理的顺序
如果你在 Windows 上用了第三方卸载工具(比如各种“卸载大师”或wintoolbox这类工具)来清理 OpenClaw,我的建议是:先手动用官方卸载入口卸掉 Companion,再用卸载工具扫描残留,最后手动清理注册表。顺序反过来的话,卸载工具可能会把主程序强制删除,但注册表里的卸载入口信息还留着,下次在“应用”列表里看到一条已经打不开的卸载项,强迫症直接被逼疯。
写在最后:一次卸载的完整时间线
回顾整篇文章,一次合格的 OpenClaw 卸载,应该包括这样的时间线:先在终端里摸清安装方式,再按对应的 npm、源码、WSL 或 Companion 路径分别卸载主程序,然后清理配置、缓存、环境变量和自启项,最后用命令、目录、进程、自启项四类验证手段确认清理结果。整个过程熟练的话十五分钟能搞定,不熟练也别急,按步骤来,每一步的输出和判断我都写清楚了。
我个人现在的习惯是,无论装什么新工具,都会先在终端里跑一次which确认安装方式,然后在笔记里记下安装日期和方式。这样将来卸载的时候,不用再来一次“全系统大搜索”。这个习惯帮我省下来的时间,远比当初记录那两分钟多得多。