# Mole 安全吗：会删什么，拒绝碰什么

> Mole 会删什么、拒绝碰什么、删掉的文件去哪，以及这些答案在 Mac 应用和命令行工具之间有何不同。

Published: 2026-08-17 | Updated: 2026-10-04

Mole 是两个程序，而网上关于它安不安全的说法，几乎都只讲了其中一个。Mole for Mac 是
mole.fit 上卖的原生应用，`mo` 是 GitHub 上免费开源的命令行工具，两边共用用户白名单和日志路径，
但删除方式并不一样。判断哪一种适合你，先看这个差别。

本文里的 Mole 只指 mole.fit 上的 Mole for Mac，以及它自己的 `mo` 命令行工具。其他同名的
应用或命令行工具是不同产品，不在这份安全说明的范围内。

Mac 应用会先列出完整的待删清单，应用卸载进废纸篓，缓存默认永久删除，也可以在设置中改为移入废纸篓。命令行版永久删除缓存，`--dry-run` 用来预览，不是撤销；两边都会拒绝删除受保护的路径。

## 每一次删除最后去了哪

| 操作 | Mac 应用 | 命令行版 | 事后能不能找回 |
|---|---|---|---|
| 缓存清理 | 默认永久删除，可在设置中改为废纸篓 | 永久删除 | 仅移入废纸篓且尚未清空时可恢复 |
| 卸载应用与残留 | 废纸篓 | 废纸篓 | 清空废纸篓之前都能 |
| 移除启动项（用户 plist） | 废纸篓 | 废纸篓 | 清空废纸篓之前都能 |
| 优化维护 | 只直接处理明确列出的项目 | 直接删除 | 不提供撤销 |
| 构建产物清扫（`mo purge`） | 仅可本地重建的部分，按缓存删除设置处理 | 永久删除 | 需重新构建或安装依赖，可能需要联网 |
| 废纸篓本身 | 按定义就是永久 | 永久删除 | 不能 |

有两行得说清楚。优化不走废纸篓、直接处理的是明确列出的系统维护项目，包括保存的应用状态、
隔离事件数据库中的记录、过期的预写日志、失效的 LaunchAgent 属性列表，还有空的 `.sfl`，每一项都要过
自己的存放时间、大小或存在性检查。这些操作不提供撤销，系统之后生成新数据也不等于恢复原内容。应用只列出可本地重建的部分项目产物，`mo purge` 的范围更广，下面第二张图讲的就是这个区别。

<figure class="blog-diagram">
  <img src="https://mole.fit/img/blog/deletion-gates.webp" width="1360" height="454" loading="lazy" alt="待删项目依次经过授权检查和路径验证，执行器再按删除方式处理：移入废纸篓后，文件仍在其中时可恢复；缓存默认永久删除，指定的维护项目也直接删除。">
  <figcaption>每个候选都过同样三道门，每一道都独立重新判一次。中间那道门的拒绝是硬停止，不是改成删得少一点。</figcaption>
</figure>

## 三道门，中间那道才是要紧的

候选不是从扫描结果一步走到磁盘上的，它要先过授权门，再过路径校验，最后才到执行器，而且这几层
互不信任，每一层都自己重新查一遍，不假设上一层已经判对了。

安全真正落脚的地方是路径校验，它跑在删除的那一刻而不是扫描的那一刻。这点要紧，因为两个时刻中间
可能隔了几分钟，磁盘不会在这几分钟里停下来等你，文件在你看过之后换了身份，删除就不该凭一个过期
的判断继续走。写这篇文章的这台机器上，日志里就有这么一行：

```
2026-08-17T02:13:55Z	uninstall	SKIPPED	/Applications/Quiet.app	updated since the scan, please scan again
```

整套安全模型都在这一行里，答案不确定的时候 Mole 拒绝并且写下原因，而不是删掉一个差不多的东西。

这道门还有一个性质，拒绝是整体的，落到保护清单上的路径会被拒绝，不会缩小成里面某一小块再删，
这一项就到此为止。

## Mole 拒绝删什么

清理工具值不值得信，看的是它不做什么，所以这份清单写的是具体路径和具体理由，而不是一句「我们会
小心」。下面这些在任何删除开始之前就被挡下来：

| 拒绝 | 为什么在清单上 |
|---|---|
| `/System`、`/usr`、`/bin`、`/sbin` | 操作系统，不是用户数据 |
| `/private/var/folders` | 保护根目录，卸载时只允许核实归属的少数应用缓存子目录 |
| `/Library/Audio/Plug-Ins/{Components,VST,VST3}` | 可能仍有工程依赖这些插件 |
| iZotope 与 LaserSoft 的支持目录 | 长得像无用支持数据的授权音频与扫描仪工具 |
| `~/.ollama/models`、`~/.lmstudio/models` | 下载来的模型权重，动辄几十 GB |
| `~/.cache/huggingface`、`~/.cache/torch`、`~/.cache/whisper` | 路径长得像缓存，装的是下载物不是派生文件 |
| `~/.cache/tensorflow`、`~/.cache/wandb` | 数据集和本地运行记录，可能还没上传 |
| `~/.cache/pypoetry/virtualenvs` | 正在用的解释器；Poetry 可重建的子目录仍然可清 |
| Apple Neural Engine 编译模型库 | 删了会让识别一直坏到下次重启 |
| 系统设置、控制中心、音频服务 | 系统配置，不是缓存 |
| 隐私数据库、登录项、后台任务注册 | 权限与启动状态 |
| 最近项目菜单背后的共享文件列表 | 又小又看不见，丢了却很烦 |
| `~/.config/mole` | 免得一次清理把约束下一次清理的白名单也抹了 |

这份清单背后其实只有一句话，路径长得像缓存不等于里面装的是缓存。模型权重和 Python 环境待在
`~/.cache` 底下，只是因为工具习惯往那儿放，不是因为它们是谁都能免费重算一遍的派生物。白名单是
同一件事里由你说了算的那一半，你在任何一边保护的路径两边都认，因为两边读的是同一个
`~/.config/mole/whitelist`。

<figure class="blog-diagram">
  <img src="https://mole.fit/img/blog/same-or-safer-review.webp" width="1360" height="454" loading="lazy" alt="三个嵌套的集合：磁盘上的全部内容，里面是命令行工具会删除的较小集合，再里面是 Mac 应用愿意提供的更小集合，两者之间的差额标着那些需要联网才能重新拿回来的目录。">
  <figcaption>同等或更安全，绝不更宽。Mac 应用刻意放掉只有网络才能还原的那部分，所以有的东西只存在于终端，永远不出现在应用里。</figcaption>
</figure>

## 应用比命令行版窄，而且一直朝同一个方向窄

两边的激进程度不一样，差异永远朝同一边。最清楚的例子是依赖目录，`mo purge` 会删 `node_modules`、
`Pods`、`venv` 和 `vendor`，而应用把它们全部剔掉，只提供本地编译就能重建的东西。应用还把应用数据
扫描挡在完全磁盘访问权限后面，把能恢复但代价高的项目做成默认不勾的复查行，并且像上面说的那样在
删除当下重新校验一次路径。

所以在 `mo clean` 里看到一类应用从来不提供的东西，是预期之内，不是功能少了；想要更宽的清扫就去
终端，而 `--dry-run` 是你在它真的发生之前先看一眼的办法。

## 读懂到底发生了什么

两个程序使用同一个日志路径 `~/Library/Logs/mole/operations.log`。App 用制表符分隔字段，命令行版
把时间和命令放在方括号里，后面写状态、路径和补充说明，两边的状态名称也有区别：

| 状态 | 含义 |
|---|---|
| `TRASHED` | 当时已移进废纸篓 |
| `DELETED` | 已永久删除 |
| `REMOVED` | 命令行版已永久删除 |
| `SKIPPED` | 拒绝了，原因在下一个字段 |
| `SKIPPED_RUNNING` | 所属应用当时在运行 |
| `SKIPPED_MISSING` | 执行器处理到时路径已经不在了 |
| `SKIPPED_ACTIVE_UPDATE` | 那个应用当时正在更新 |
| `FAILED` | 试过了，没成功 |

日志记录的是当时发生了什么，不是文件现在在哪里。标为 `TRASHED` 的文件只要还在废纸篓里，通常就能
还原，但之后也可能已被还原、移走或清空。要确认能不能找回，仍需打开废纸篓查看。

## 复查这一步

<figure class="blog-diagram">
  <img src="https://mole.fit/img/blog/mole-clean-review.webp" width="2584" height="1741" loading="lazy" alt="Mole 清理审查页按类别列出缓存和各自大小，每类都有勾选框，底部是永久清理已选 5.14 GB 的按钮。">
  <figcaption>扫描本身不删任何东西，审查页列出每个类别和大小，只清理勾选的行。</figcaption>
</figure>

Mac 应用里的扫描免费，不需要购买许可证，也不限时间；扫描受保护的数据仍需要相应的系统权限。每个工具都会显示扫描结果，破坏性操作需要
许可证或剩余试用次数，每个破坏性工具可以先试用两次，所以付钱之前你完全可以拿 Mole 的判断和自己对
这块磁盘的了解对一遍。

卸载会在动手之前给出一份带路径、归属和体积的计划。复查本身就是产品，不是一个确认弹窗，一个你没法
判断的项目本来就不适合一键清扫，所以恢复代价高的那些留成不勾选，而不是把判断藏在一个总数后面。

## 什么是真的找不回来

两个版本的缓存清理默认都是永久删除。Mac 应用可以在设置中改为移入废纸篓，清空前仍可恢复；重新生成缓存不等于还原原来的文件。

`mo purge` 永久删除构建产物，所以它是最该先跑一次 `--dry-run` 的命令，上面列的那批优化删除也是立刻
生效的。重新生成缓存或构建产物不等于还原被删文件，要找回原文件，应检查 Time Machine 或其他备份。

## 这些说法你自己怎么核

- **读日志。** `~/Library/Logs/mole/operations.log`，哪个前端干的活就由哪个前端写，状态词表在上面。
- **让终端工具空跑一次。** clean、uninstall 和 optimize 命令支持 `--dry-run`，可以先查看计划删除的项目。
- **读代码。** 命令行版按 GPL-3.0 开源，删除逻辑也在里面。
- **验一下你下载的那份。** Mac 应用有 Developer ID 签名并且过了公证，
  `spctl -a -t exec -vv /Applications/Mole.app` 检查的是这份应用是否通过 Gatekeeper 评估，不是逐字节核对它与发布文件是否相同。
- **看网络。** 两个程序都不发遥测。

## 别处可能看到的说法

有三种描述流传得很广，都来自把终端工具和应用当成同一个产品。

**「这是个终端工具，没有预览也没有撤销。」** `mo clean` 有 `--dry-run` 预览，但缓存删除是永久的。 Mac 应用提供图形界面的清单预览，卸载进废纸篓，缓存默认永久删除，也可以在设置中更改。

**「Mole 是免费的。」** 命令行版免费且开源，Mole for Mac 是一次性 $19，覆盖两台 Mac，含持续更新和
14 天退款。

**「命令行版是 MIT 许可。」** 是 GPL-3.0。

## 延伸阅读

- [Mole CLI 还是 Mole for Mac](https://mole.fit/zh/blog/mole-cli-vs-mac-app)：两个前端各自能做什么
  对方做不了的事，以及同时装会怎样。
- [Mac 清理工具永远不该删什么](https://mole.fit/zh/blog/what-mac-cleaners-should-never-delete)：同一个
  问题，问的是整个品类而不是某一个工具。

## 常见问题

### Mole 会把删掉的文件放进废纸篓吗？

Mac 应用的缓存默认永久删除，可在设置中改为移入废纸篓。应用卸载和磁盘分析中的删除使用废纸篓，包括需要管理员权限的操作，恢复的前提是文件仍在其中。清空废纸篓和优化中明确列出的直接删除无法撤销，重新生成不等于还原。命令行版永久删除缓存，卸载应用与残留则使用废纸篓。

### Mole 会删掉 macOS 需要的东西吗？

系统根目录、隐私与登录项数据库这类受保护的系统状态、音频插件、下载来的模型权重、正在用的 Python
环境，都会在任何删除开始之前被拒绝，而且应用会在删除当下重新校验每条路径，不信任扫描时的结论。

### 免费的命令行版和 Mac 应用是同一个程序吗？

不是。两套独立实现，共享一套清理用语、一份白名单和一份日志，应用是用 Swift 重写的，不是命令行版的
壳，在会删什么这件事上刻意更窄。

### Mole 需要完全磁盘访问权限吗，为什么？

应用数据扫描挡在这个权限后面，没有它 Mole 照样能跑，只是看到的更少，而它会把这件事说出来，不会把
一个偏小的数字当成全貌报给你。

完全磁盘访问权限能做什么、不能说明什么，值得分开看。它让扫描能看到受保护的用户数据位置，扫描和复查的结果才准确，但它不是随便删除的许可，每一次删除仍由上面那几道门决定。它也证明不了一个工具可信：它不是杀毒软件认证，不是「Apple 认可的清理工具」标志，也不能说明工具安全，拿到完全磁盘访问权限的清理工具照样可能删错东西。只把它授予你本来就信任的工具，用本页讲的删除前复查、对受保护路径的拒绝和日志去判断它们，任何工具的这项权限都可以在「系统设置 > 隐私与安全性 > 完全磁盘访问权限」里撤销。

### 怎么看 Mole 上次删了什么？

读 `~/Library/Logs/mole/operations.log` 的末尾，`TRASHED` 表示当时移入了废纸篓，能否还原要看文件是否
仍在那里；`DELETED` 和命令行版的 `REMOVED` 表示永久删除，`SKIPPED` 类状态说明哪些项目没有删除。

### 授权会改变删除范围吗？

不会。授权只决定破坏性操作能不能跑，从不决定它有多宽，扫描、候选清单和保护规则在激活前后完全一样。

---

Canonical HTML page: https://mole.fit/zh/blog/is-mole-safe
Blog index for agents: https://mole.fit/zh/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
