Codex 把我电脑文件都删了

kneo 2026-08-09 10:56 1

昨天为了赶在额度重置前把额度用完,出门前交代 codex 自己去远程验证整个项目脚本和文档的正确性,开了 full access ,回来一看悲剧了,把我 C 盘和 D 盘文件全删了……估计删了我两三百 G 的数据,上百万个文件……


用的模型是 gpt-5.6-sol xhigh fast 。真他妈快啊,除了少数被进程占用的文件,全给我删了。


让 Claude Code 分析了下 codex 的记录:


  wsl.exe bash -lc 'set -e; d=$(mktemp -d); cd "$d";
apt-get download sshpass >/dev/null;
dpkg-deb -x sshpass_*.deb extracted;
cp extracted/usr/bin/sshpass /tmp/xxx-semantic-bin/sshpass;
chmod 700 /tmp/xxx-semantic-bin/sshpass;
cd /; find "$d" -depth -delete; # ← 这一句
/tmp/xxx-semantic-bin/sshpass -V'

它的本意只是:下个 sshpass 二进制,然后把 mktemp -d 建的临时目录删掉。目标本该是 /tmp/tmp.XXXXXX 。


关键证据在 file:4249 —— Win32_Process 记录的操作系统层面真实命令行里,$d 两侧的双引号已经没了( PowerShell 把参数传给原生 exe 时没有转义内层的 ")。


我极少在 Windows 上原生执行 claude/codex ,更从来没给过 full access ,没想到第一次给它 full access 就翻船了……


太倒霉了。有一万个如果可以让这件事不要发生。如果不是我有云备份,我大概已经去自首了。

最新回复 (56)
  • noahliaszn 08-09 11:01
    1
    正常我用 Claude 也这样狗屎哈
  • zjvbqla 08-09 11:10
    2
    是不是可以理解为在 Windows 下,这种可能性会更大一些?
  • Solix 08-09 11:16
    3
    windows 上 vibe coding 软件很容易删硬盘,有很多案例哈哈
  • kneo 楼主 08-09 11:20
    4
    @zjvbqla Windows 命令行老坑了。虽然 Linux 和 Mac 上也有这种问题,但是 Windows 出这种问题的概率应该是其他平台的十倍以上……

    实际上绝大多数误删文件都是命令行引号和转义导致的。毕竟,Bash is all you need !
  • heywitt 08-09 11:20
    5
    > 我极少在 Windows 上原生执行 claude/codex

    我猜测你使用的是 WSL 的沙盒隔离方式,codex 支持使用 windows 原生沙盒,你这个问题与 WSL 沙盒运行方式也有关系。

    - SL 默认把固定盘挂到 /mnt/c 、/mnt/d 之类的,你的 find 没有使用 -xdev/-mount ,从 / 遍历时会进入这些挂载点,这是导致其他盘受影响的主要原因
    - 跨 PowerShell + 原生 exe + WSL + Bash ,这类转移引号错误非常常见
    - Windows + WSL 本身可能存在 "路径拼装错误" 的风险,我在多个 Agent 中都遇到过

    给你的几个建议:

    - 避免再次犯同样的错误:find ... -delete 本身就是高危命令,建议你后续最好对这类行为做一个 skill 限制,find 缺少参数或者参数错误时有默认行为
    - 我建议禁止 bash -lc 的拼装,用 wsl.exe --exec bash ... 的方式进行执行,这会去磁盘绕一圈,但是更安全
    - 不要使用 WSL:改为 Windows 的原生隔离方式,在 Codex 的设置里面可以选择,这会让 Codex 在你的系统创建 2 个特殊用户,并且隔离执行代码,这可以避免大多数的 WSL 路径拼装或路径寻找错误
    - 作为全权限自动值守任务,我建议你使用一个独立的 Windows 账户 (或是在独立的容器)里执行
    - 我自己有一个 skill 是硬要求全局禁止删除,并且将新增、修改最后在任务完成后列出来展示,无人值守为了确保安全性推荐这样,你可以让 Agent 引导做一个类似的 skill ,即便是 cleanup 也应当使用指定的脚本进行安全确认路径后再删除
  • heywitt 08-09 11:24
    6
    @kneo 这和 Windows 命令行,PowerShell 并没有直接关系,Bash 不能直接避免这个问题。
    PowerShell 拼接 bash -lc 确实是有风险的,但这次事故应该集中在 WSL 挂载盘符导致向上搜索、find -delete 高危命令、非隔离执行、非隔离删除这几件事情上。
  • sskycn 08-09 11:25
    7
    我这出现过把我手机上的 app 删掉的情况,它认为这个 app 干扰了它的分析,直接删掉了。
  • kneo 楼主 08-09 11:28
    8
    @heywitt >我猜测你使用的是 WSL 的沙盒隔离方式,codex 支持使用 windows 原生沙盒,你这个问题与 WSL 沙盒运行方式也有关系。

    用的原生 codex.exe ,在 powershell 里执行的。说实话我不知道它有什么必要调用 wsl.exe 运行 bash 。可能它训练数据就是习惯用 bash ,所以哪怕 powershell 可以完成的大多数任务它也要用 wsl 执行 bash ,中间多一层调用就多一层转义的问题。

    我这次是因为要外出,又急着想在重置前把 token 用光,不想让它卡住等我确认,就给了 full access 。应该是没有沙盒的。即使有沙盒,我怀疑它也会尝试调用 wsl.exe 之类的绕过。不太了解,纯猜测。

    主要这也不是我平常的开发环境,这次就是临时起意,真是自杀式 vibe 。
  • liuzhihang 08-09 11:33
    9
    我 mac 一直用的 full access 看来以后得改改了。
  • heywitt 08-09 11:47
    10
    @kneo 不是,Codex 有两种运行方式,一种是 WSL 沙盒,一种是 Windows 原生沙盒,看你的情况应该是默认的 WSL 沙盒模式。我所说的原生指的是 Native Sandbox.

    另外你说的有道理,大部分 Agent 训练数据就是 Unix 生态,一旦你的机器上有 WSL 很有可能会优先使用,此外如果你的工作、下载的包里面包含 `/tmp` 这种 Unix 生态常见路径,也会引导 Agent 转向 WSL 。除非后续手动指示优先级。

    把 PowerShell / ssh.exe 等等原生方案声明为默认处理器或者全程只在 WSL 内部处理是有必要的,每次绕 wsl.exe bash -lc 这种是有风险的。
  • keenkiller 08-09 11:48
    11
    我一直开的是替我审批。

    然后,我的 windows 已经沦为游戏机。
  • testsb 08-09 11:49
    12
    vibe coding → wild coding😁
  • bbbblue 08-09 11:58
    13
    感觉是每个头铁不听劝 隔离不做好就在那 yolo/full access 的最终结局了
    每隔一段时间就能看到一个
  • likuku 08-09 13:11
    14
    各种硬件加速虚拟化技术挺普及了,虚拟机性能真很好,创建个本地虚拟机,只能被单向访问,把 aiagent 关起来用
  • watzds 08-09 13:38
    15
    可怕,这种情况不开 full access 能避免吗,如果是双引号,转义什么的,会不会我自己也看不出来
  • hefmt137 08-09 13:41
    16
    万事加备份
  • msg7086 08-09 13:42
    17
    所以我是开个 VM 专门给 codex ,代码都用 syncthing 同步,炸了就炸了。
  • techmale 08-09 13:59
    18
    + Time Machine
    + SOP (trash instead of rm (take macOS for example))
    + SOP (move things to somewhere instead of direct removal)
    + pack important dirs and files into zip files and copy/sync to a cloud drive
  • cz5424 08-09 14:22
    19
    我一般给他个虚拟机,删掉就删了,pve 提前打个快照🥲
  • Admstor 08-09 14:29
    20
    GPT 自己都建议我在 ubuntu 这样的系统里使用它
  • cskeleton 08-09 15:20
    21
    我的所有 agent 都是 full access ,算了我还是不立 flag ,我觉得我这习惯得改改。
  • dfly0603 08-09 15:24
    22
    自带的 powershell 害人不浅(
  • mmdsun 08-09 15:26
    23
    claude code 我也是最大权限,windows 感觉是 codex 非要在 wsl 执行命令的问题。
  • lianyue 08-09 15:33
    24
    为什么要开 full 啊 自动审批就好了
    几乎每天我都会遇见越权问题


    我 AGENTS.override.md 是这样的

    ........

    ## 脚本和命令范围

    - 修改项目文件必须直接编辑目标文件本身,每处改动可见、可逐条核对、可回溯。
    - 禁止用临时脚本、heredoc 、解释器内联代码、`sed`/`awk`/`perl` 就地改写、重定向覆盖或批量替换命令间接修改项目文件;多文件同类修改也逐个直接编辑。
    - 命令行只用于读取、检查、构建、测试等不改写项目文件的用途。代码生成、格式化等本来就会写入项目文件的既有流程按目标目录已有约定执行,并说明产物范围。
    - 确有无法直接编辑的场景时,先说明原因、影响范围和验证方式并取得用户确认,不得先执行再补充说明。
    - 执行脚本、解释器或 shell 命令前,必须检查脚本内容、最终参数、工作目录和所有路径展开范围。
    - 搜索内容、文档文本或用户原话包含 shell 元字符时,必须使用固定字符串、正确引用、参数化或文件输入,禁止让展示文本进入可执行位置。
    - 默认读写范围限于当前任务相关目录以及系统、用户或项目的临时目录和常规缓存;工具链、可执行文件和依赖缓存可按需读取。范围外访问必须先取得用户明确确认。
    - 禁止列出或递归扫描与任务无关的宽泛系统路径或用户目录。
    - 优先使用工具默认缓存和项目既有约定;只有出现权限、污染或隔离需求时才指定任务内稳定缓存,并说明原因。
    - 路径、通配符、符号链接、环境变量或相对路径可能越界时,必须先停止并等待确认。

    ## 额外问题和高风险修改

    - 发现可能影响安全、权限、隐私、数据完整性、可用性、资源、并发或线上兼容的问题时,先说明证据和影响。
    - 判断并发问题前必须确认公开并发契约和真实可达调用路径;没有实际并发入口或证据时只能记录为待验证假设。
    - 与当前任务直接相关的问题,说明原因后再一起修;与当前任务无关的问题,不要擅自修复,只说明位置、影响和建议。
    - 安全、资产、数据删除或迁移、存储或通信契约、加密与凭据、并发与事务、外部服务和生产环境相关修改属于高风险;必须明确影响范围,补充相称验证,不做无关重构,不擅自改变默认安全或兼容语义。

    .........
  • john1024 08-09 15:53
    25
    太吓人了。我后面装了个钩子,叫 dcg ,删除前都会让我确认
  • xubeiyou 08-09 17:42
    26
    全靠 ai 肯定不行的除非是新的东西 我觉得很适合 纯 vibe coding
  • cellsyx 08-09 17:49
    27
    开个虚拟机, full access + 及时提交 + 定期快照
  • Ryanzlab 08-09 18:01
    28
    换 claude 就好了,听到最多被删文件 删盘的,一看都在用 GPT 模型,口碑就是如此
  • fanhed 08-09 18:16
    29
    @Ryanzlab claude 一样有删了别人文件的案例, 自己不设防中招是迟早的
  • kneo 楼主 08-09 18:25
    30
    @john1024 >太吓人了。我后面装了个钩子,叫 dcg ,删除前都会让我确认

    其实确认也很难避免这类问题。

    现在 AI 执行的命令都超级长,人很难看出来这是在干嘛。我执行一次长任务经常会半个小时就让我确认几十个命令执行。鬼能看出来是干嘛的。毕竟 AI 都看不出来问题,更别说人了。光看这几十个命令,半个小时都不够你看的。

    另外像这个 find "$d",他这个命令让你确认前好像是有引号的,但他真正执行的时候引号在哪一步就掉了。
  • taotaodaddy 08-09 18:27
    31
    不管是 claude 还是 codex 都有删文件删盘发生的
    关键是不要 yolo ,不要给 full
    如果非要 Yolo ,非要给 full->虚拟机
    否则->为我审批
    还可以加个 Hook 来人工阻拦高危操作
  • signal 08-09 19:00
    32
    所以我 windows 下都是自己用的自己修改过打包的 codex cli 哪个 EXE,强制让它默认就用 git bash 然后 AGENTS.md 里带上这一句:
    # 终端只能使用 git bash,我的工具环境已经是 Bash 不要用 PowerShell 包裹命令
  • aloxaf 08-09 19:07
    33
    这种问题确实防不胜防,就算人来 review 也未必能发现问题,只能说做好备份/快照

    不过说起来,我觉得对于 vibe coding 来说,set -ue 应该是执行 shell 命令时的默认值……
  • wesker1999 08-09 19:08
    34
    备份是唯一后悔药。这钱省不得。
  • xuejianxianzun 08-09 19:53
    35
    我是指定 codex 使用 PS7 ,这样误删文件的可能性会小一些吧(心虚
  • john1024 08-09 20:14
    36
    @kneo #30 唉,只能说尽人事吧,我把重要东西都做备份
  • syh2 08-09 20:20
    37
    想问下到底是执行什么命令。。
    我现在都是让 AI 先备份,再执行操作,确保操作可恢复
    我试过一次用阶跃星辰的 API ,让他帮我移动文件,结果告诉我东西删了没办法恢复,气死我
  • davidqw 08-09 20:35
    38
    windows 下 vibe coding 经常出这种符号问题
  • kneo 楼主 08-09 21:09
    39
    @syh2 >想问下到底是执行什么命令。。

    原帖有啊。

    cd /; find "$d" -depth -delete; # ← 这一句

    >我现在都是让 AI 先备份,再执行操作

    我觉得让 AI 备份没啥用……它要真知道备份啥就不会删错了……除非是沙盒或者 time machine 那种全局备份。
  • tiezlk443 08-09 21:44
    40
    甲级战犯 powershell
  • lefer 08-09 22:49
    41
    感觉最好还是用虚拟机,只放项目用得到的文件。

    再删也不会太过分。

    直接在本地环境下太冒险了...
  • otakustay 08-09 22:53
    42
    Power!!Shell!!!
  • deplives 08-09 22:53
    43
    以前我都是嘲讽: "谁家好人用 powershell"
    现在 powershell 的含金量更高了,
    "powershell 不仅不是给人用的,也不是给 ai 用的"
    以后要是能见到有人说精通 powershell 我高低得给站起来敬他一杯
  • wclebb 08-09 23:29
    44
    我好几次看到因为 Windows 误删了。
  • PolarBears 08-09 23:31
    45
    一直不敢尝试在 Windows 上使用 AI 来帮我运行命令,毕竟不管是 cmd 还是 powershell 肯定远远不如 bash 训练充足,等什么时候 LLM 的能力提升到我敢相信的时候才会使用吧
  • badreamm 08-10 00:13
    46
    windows 上的 codex 用过几次,一直出现 powershell 的转码问题
  • jgh004 08-10 08:19
    47
    吓的赶紧把权限收了
  • Renix 08-10 08:55
    48
    我 mac 上也被删过用户主目录,用 vibe coding 还是要时常备份
  • Oo0 08-10 09:02
    49
    我 pi 加了个扩展,删除文件一律人工确认
  • SelFree 08-10 09:02
    50



    巧了不是,幸亏我的 WSL 不是 root 用户启动,不然也 G 了。
  • ttsh 08-10 09:13
    51
    看见标题没点进来我就知道是 Windows
  • Cruzz 08-10 09:50
    52
    我都怀疑大家上班真都没出过错么?刚上班一家小公司,一共 8w 用户,让我删了 7w 。找回来 5w 。之后任何有关删除的操作都很谨慎。怕了
  • gdfsjunjun 08-10 09:54
    53
    我想问,可以限制 AI 只用回收站功能吗?禁止执行删除命令。
  • andforce 08-10 10:03
    54
    @gdfsjunjun #53 必然可以

    58 unalias rm 2>/dev/null
    59 function rm {
    60 local args=()
    61 for arg in "$@"; do
    62 case "$arg" in
    63 -*) ;; # 跳过所有 flag ,只保留文件路径
    64 *) args+=("$arg") ;;
    65 esac
    66 done
    67 if [[ ${#args[@]} -eq 0 ]]; then
    68 echo "rm: missing operand"
    69 return 1
    70 fi
    71 trash "${args[@]}"
    72 }

    放入 ~/.zshrc
  • mightofcode 08-10 10:33
    55
    哈人 我都是在服务器上直接 codex --yolo 目前还没出事
  • andyC 08-10 11:06
    56
    win 出过非常多次这种删文件问题,基本 PowerShell 转义符导致的
* 帖子来源V2EX
返回