首页/系统/Linux 运维命令速查/shred 安全擦除文件
文件与目录76 条

shred 安全擦除文件

多次覆写后删除文件,降低恢复软件找回的可能性;对机械盘有效,SSD 与 CoW 文件系统效果打折。

Linux 运维命令速查系统更新于 2026-10-13

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、系统审计日志。评估风险时要把这些痕迹一起算进去。

易错点

  • 把设备名写错会毁掉整盘数据,甚至擦掉系统盘:执行前用 readlink -f、lsblk 核对,最稳的是改用 /dev/disk/by-id/ 路径
  • 只对单文件覆写对 ext3/ext4 这类日志型文件系统并不彻底,旧副本可能仍在日志区
  • 在 SSD 上依赖 shred 会得到虚假的安全感,应改为全盘加密加销毁密钥的路线
  • 覆写是慢 IO,对整盘做大次数覆写可能跑上数小时;动手前留出维护窗口并确认没有业务在写该盘

数据来源与参考

  • man 1 shred(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌