前言¶
在 DSH 环境中运行自动化脚本或对话时,rm 命令的误触常导致不可逆的数据丢失。nattocb/dsh-safe-delete 是一个 DSH 插件,它拦截所有 bash 会话中的 rm 操作,将其重写为移动到 macOS 回收站,而不是直接删除,从而提供可恢复的删除方式。
定位¶
这是一个宿主端的 DSH 插件,由 NattoCB 维护,使用 MIT 许可证。它的核心作用是在 DSH 工具注册表层面注册一个守卫,拦截所有 rm 命令执行。
核心功能¶
插件具备以下能力:
1. 可恢复删除:拦截 rm 并重写为 /usr/bin/trash,模型会收到被移动目标的报告。
2. 全局覆盖:在 DSH 工具注册表注册一次,覆盖 GUI 聊天、自动化运行、无头桥接和子代理会话。
3. Shell 感知拦截:能处理 sudo rm、xargs rm 以及复合命令(&&、||、;、|)中的 rm。
4. 容错设计:对于可能隐藏 rm 的构造(子 shell、backticks、heredoc、eval),插件会拒绝执行并给出提示,而不是静默处理。
5. 运行时开关:支持通过 Web GUI、HTTP API 或文件配置来启用或禁用。
安装与启用¶
安装插件需要重启 DSH Web 进程才能生效。
dsh plugin --profile web add github:NattoCB/dsh-safe-delete
启动后,日志中会显示 rm guard active,表示守卫已就绪。
典型用法¶
插件默认启用。用户可以直接使用 rm 命令,系统会自动将目标移动到回收站而非删除。
* Web GUI 切换:进入 Settings → General → Safe Delete 开关状态。
* HTTP API 配置:发送 POST 请求到 /safe-delete/config,传入 { "enabled": true/false }。
* 检查配置状态:查看文件 $DSH_HOME/storages/safe-delete 或 $DSH_HOME/storages/safe-delete.json。
适用场景与注意¶
- 适用场景:适合需要防止误删的系统管理、自动化部署和脚本编写场景。
- 覆盖范围:拦截
rm、sudo rm、绝对路径rm以及xargs rm。 - 未覆盖场景:不覆盖
find -delete、unlink、git clean以及语言运行时的文件 API。 - 权限限制:虽然
sudo rm会被拦截,但如果文件需要 root 权限,trash操作可能会失败,错误信息会被原样报告。
结尾¶
该插件通过零依赖的 guard 模式实现了对最常见删除命令的保护。相关文档与源码可参考下方的目录页与 GitHub 仓库。