rm删除后能恢复,是因为它仅解除文件链接(unlink),不擦除磁盘数据块;只要未被覆盖,即可用extundelete、photorec等工具恢复。

rm 命令本身不提供“彻底删除”能力——它只是把文件的 inode 引用计数减 1,数据块仍保留在磁盘上,直到被新数据覆盖。真要擦除内容,得配合其他工具。
为什么 rm 删除后还能恢复?
Linux 的 rm 默认只是解除链接(unlink),不碰实际数据块。只要没被覆盖,用 extundelete、photorec 等工具就可能找回。
-
rm file.txt→ 只删目录项,data block 未清零 - SSD 上更难“覆盖”,因 TRIM 和写入放大机制让实际物理位置不可控
- 加密文件系统(如 ecryptfs、fscrypt)下,删密钥比删文件更有效
安全擦除单个文件:用 shred 而不是 rm
shred 会多次覆写文件内容(默认 3 次),再 rm 掉它。适用于普通 HDD,不推荐 SSD(TRIM 可能绕过覆写)。
- 基本用法:
shred -u filename(-u表示覆写后自动rm) - 加
-n 7指定覆写次数:shred -n 7 -u config.json - 注意:
shred对日志型文件系统(ext4/xfs)或快照/备份卷效果有限,因为旧数据副本可能还存在
递归擦除整个目录:别直接 rm -rf,先用 find + shred
shred 不支持目录,需先处理所有普通文件,再删空目录。跳过符号链接、设备文件等非数据项。
- 安全擦除目录内所有常规文件:
find /path/to/dir -type f -exec shred -u {} \; - 再删空目录结构:
rm -rf /path/to/dir - 避免误操作:先用
find /path/to/dir -type f | head -5确认目标范围 - 注意:
shred对稀疏文件、内存映射文件、NFS 挂载点行为不可靠,慎用
替代方案:用 srm(来自 secure-delete 包)
srm 是专为安全删除设计的封装工具,比手拼 shred 更鲁棒,支持目录、通配符、进度提示。
- 安装:
sudo apt install secure-delete(Debian/Ubuntu)或sudo yum install secure-delete(RHEL/CentOS) - 删文件:
srm -v confidential.log - 删目录:
srm -rv sensitive_data/ - 警告:
srm在 Btrfs、ZFS 或启用 CoW 的文件系统上仍可能留副本;对 SSD 效果同样受限
真正难的不是执行命令,而是判断「在哪种存储介质和文件系统上,哪种擦除方式才实际起效」——HDD 上 shred 可信,SSD 上物理销毁或全盘加密后弃置更可靠。











