shred 在做什么
shred 是 GNU coreutils 里的覆写式删除工具:先用随机数据把文件内容反复覆写,再按需删除,让恢复工具难以还原。它针对的事实是,普通 rm 只删除目录项,数据块仍留在盘上,取证软件能直接读出原文。适合机械硬盘上清理敏感文件,但对固态盘与写时复制文件系统效果有限。
基本信息
| 适用平台 | Linux(GNU coreutils);BSD / macOS 自带版本选项较少 |
|---|---|
| 语法 | shred [-n 次数] [-z] [-u] [-v] 文件 |
| 关键选项 | -n 覆写次数(默认 3)、-z 末尾补零、-u 覆写后删除、-f 强制改写权限、-v 显示进度 |
| 权限要求 | 自有文件用普通用户;擦整块设备必须 root |
典型使用场景
- 设备退役或送修前,先覆写盘上留存的敏感数据再交付
- 删除导出目录里的密钥、口令、身份证件等临时文件
- 清理压测或排障时落盘的完整数据副本,减少外泄面
- 脚本收尾阶段擦除中间产物,避免凭证残留在构建机上
- 对 USB 移动盘、备份盘做一次性清空
常用示例
常用示例
shred -n 3 -z -u secret.key # 覆写 3 次 + 末尾补零 + 删除
shred -v -n 5 old-dump.sql # 打开进度显示,观察每一步
shred -f -u /var/tmp/*.bak # 权限不足时强制改写再删除
shred -n 1 -z -u /dev/sdb1 # 擦整块设备(危险,务必核对设备名)
lsblk -o NAME,SIZE,MODEL,UUID # 动手前先确认目标盘的身份
readlink -f /dev/disk/by-id/ata-XXXX # 用 by-id 路径避免盘符漂移选项逐项读法
| 选项 | 作用 | 使用注意 |
|---|---|---|
| -n | 覆写次数,默认 3 | 次数越多越慢;机械盘 1 到 3 次即足以让常规恢复手段失效 |
| -z | 最后一轮用全零覆写 | 隐藏覆写痕迹,避免文件看起来还是随机数据 |
| -u | 覆写完成后删除文件 | 不加 -u 只是覆写,文件名仍在 |
| -f | 必要时改为可写再覆写 | 对只读文件、属主为其他用户的文件有效 |
| -v | 打印每一轮进度 | 长任务排障时用,会显著增加输出量 |
SSD 因磨损均衡与预留空间,覆写往往落在新的物理块上,原数据块仍可读;写时复制文件系统(btrfs、ZFS)与日志型文件系统同样可能留有旧副本。真正敏感的数据应先全盘加密(LUKS),销毁时直接销毁密钥。
shred 只处理文件内容,不清理文件名、时间戳与 shell history、系统审计日志。评估风险时要把这些痕迹一起算进去。