用零覆盖一系列文件的最简单方法

use*_*949 1 file overwrite

我在Linux上.我有一个文件列表,我想用零覆盖它们并删除它们.我试过用

srm file1 file2 file3 ...
Run Code Online (Sandbox Code Playgroud)

但它太慢了(我必须覆盖并删除~50 GB的数据)并且我不需要那种安全性(我知道srm会执行大量的传递,而不是使用零传递).

我知道我可以使用该命令覆盖每个文件

cat /dev/zero > file1
Run Code Online (Sandbox Code Playgroud)

然后用rm删除它,但我不能为每个文件手动执行此操作.

是否有像srm这样的命令可以执行单个零传递,或者可能是一个可以cat /dev/zero在文件列表而不是单个文件列表上执行的脚本?谢谢.

kap*_*pad 8

我用来shred做这个。

以下是我通常使用的选项。

  1. shred -n 3 -z <filename>- 这将进行 3 遍以用随机数据覆盖文件。然后它将进行最后一次用零覆盖文件。该文件将保留在磁盘上,但它会将所有内容都保留0在磁盘上。

  2. shred -n 3 -z -u <filename>- 与上面类似,但也取消链接(即删除)文件。默认删除选项是wipesync,这是最安全但也是最慢的。检查手册页以获取更多选项。

注意: -n此处用于控制随机数据覆盖的迭代次数。增加此数字将导致shred操作需要更长的时间才能完成并更好地粉碎。我认为 3 就足够了,但也许是错的。

  • shred 的默认迭代次数是 3,因此如果没有“-n 3”,它会是相同的 (2认同)
  • 是的@Monica,你是对的。但我喜欢在所有代码中显式而不是隐式。 (2认同)

twa*_*erg 7

这样的东西,stat用于获得正确的写入大小,以及dd覆盖文件,可能是你需要的:

for f in $(<list_of_files.txt)
do
  read blocks blocksize < <(stat -c "%b %B" ${f})
  dd if=/dev/zero bs=${blocksize} count=${blocks} of=${f} conv=notrunc
  rm ${f}
done
Run Code Online (Sandbox Code Playgroud)

使用/dev/urandom而不是/dev/zero(稍微)更好的擦除语义.

编辑:添加conv=notrunc选项dd调用,以避免当它打开了写作,这将导致它覆盖之前发布的相关存储截断文件.