前言¶
在 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 倉庫。