Linux 命令速查
文件管理 man shred

shred

反复覆写文件,尽量使内容无法恢复

返回

补充说明

shred 是 GNU coreutils 中的安全删除工具。它按指定次数用随机数据覆写文件内容,可选再补一遍全零,最后删除文件,目的是让被删除的数据难以从磁盘上还原。默认覆写 3 次。

必须理解它的局限:在日志式文件系统(ext3/ext4)、写时复制文件系统(btrfs、ZFS)、RAID、SSD 的磨损均衡层之上,覆写不一定落在原来的物理块上,因此 shred 的保证会失效。GNU 官方文档明确建议:在 ext3 及更新的文件系统上,用 shred 不如直接对整个分区或整块磁盘操作可靠。

另一个常见误区是拿它删目录或删单个链接:shred 只处理普通文件,目录要先清空,符号链接要用 -u 加 --remove 或先删链接本身。对 SSD 上的敏感数据,更可靠的做法是使用全盘加密并在丢弃前销毁密钥。

语法

shred [选项] 文件...

选项

  • -n, --iterations=N:覆写次数,默认 3
  • -s, --size=N:只覆写前 N 字节,可用 K、M、G 后缀
  • -z, --zero:最后再写一遍全零,掩盖覆写痕迹
  • -u, --remove:覆写后截断并删除文件
  • -f, --force:必要时修改权限以允许写入
  • -v, --verbose:显示进度
  • --random-source=文件:指定随机数据来源

实例

# 用 5 遍随机数据覆写文件并删除
shred -n 5 -u secret.txt

# 覆写后补一遍零,再删除
shred -z -u backup.tar.gz

# 只覆写文件的前 1MB,保留文件本身
shred -s 1M -v disk-image.bin

# 覆写整块磁盘(极其耗时且不可逆,务必确认设备名)
shred -n 1 -v /dev/sdb

参考链接