shred 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
shred——文件与目录命令族(见文件与目录命令族)。当你不希望别人从磁盘里把删掉的文件"捡"回来时,它会派上用场。
shred 通过反复用随机数据覆写文件内容,让原始数据无法通过常规手段恢复。和 rm 只把文件名从目录里摘掉(数据块还在磁盘上)不同,shred 动的是数据本身。
一、为什么 rm 不够
bash
rm secret.txt # 只是解除文件名→数据块的链接,数据仍留在磁盘很多人以为 rm 之后文件就没了,其实它只是删掉了目录项。数据块没被覆盖,用
extundelete、testdisk这类工具很容易恢复——这在你卖掉旧硬盘、处理敏感日志时是个隐患。shred就是为"真正抹掉"而生的。
二、基本用法
bash
shred secret.txt # 默认覆写 3 次(Gutmann 之前的简单模式)
shred -n 7 secret.txt # -n 指定覆写次数
shred -u secret.txt # -u 覆写完成后删除文件
shred -v -n 3 -u secret.txt # -v 显示进度,边覆写边看
-n控制覆写遍数,越多越保险也越慢;-u在覆写完后帮你在文件系统层面删掉文件名。把-v(verbose)加上能看到每遍的进度,删大文件时不至于以为卡死了。
三、擦除整个磁盘 / 分区
bash
shred -v -n 1 /dev/sdb # 对整块磁盘做一遍随机覆写(快但非最严)
shred -v -n 3 /dev/sdb1 # 对某个分区覆写 3 遍处理要退役的 U 盘、磁盘时,直接对设备文件覆写比逐文件快得多。注意别写错设备名——
shred可没有"确认"提示,写错就覆写了别的盘。
四、局限与踩坑
bash
# 以下情况 shred 可能"擦不干净":
# 1. 使用了日志型文件系统(ext4 的 journal)、COW 文件系统(btrfs/ZFS)
# 2. 磁盘启用了坏块重映射(SSD 的磨损均衡会把写入分散到不同物理块)
# 3. 文件所在块被文件系统做了快照这是
shred最容易被忽视的点:在 SSD、btrfs、有快照/日志的文件系统上,覆写不一定落在"原来的物理位置",于是数据可能残留在别处。对这种场景,更可靠的是全盘加密(删除密钥即等于删除数据)或blkdiscard对 SSD 下 TRIM。机械盘 + 普通 ext4 上shred才最接近"彻底"。
五、实战:退役磁盘前的安全处理
bash
# 先确认设备(务必核对!)
lsblk
# 整盘覆写 3 遍后删除(针对机械盘 / 非 COW 场景)
shred -v -n 3 -u /dev/sdX
# SSD 更推荐直接下 TRIM 让控制器回收,而不是逐块覆写
blkdiscard /dev/sdX一句话总结
shred = 多次覆写让文件无法恢复:-n 设遍数、-u 覆写后删除、-v 看进度;适合机械盘/普通文件系统彻底销毁敏感文件。但在 SSD、btrfs、ZFS 等带磨损均衡或 COW 的设备上它擦不干净,那种情况优先全盘加密或 blkdiscard(见磁盘与存储命令族)。日常删除仍用 rm。