我在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在文件列表而不是单个文件列表上执行的脚本?谢谢.
我用来shred做这个。
以下是我通常使用的选项。
shred -n 3 -z <filename>- 这将进行 3 遍以用随机数据覆盖文件。然后它将进行最后一次用零覆盖文件。该文件将保留在磁盘上,但它会将所有内容都保留0在磁盘上。
shred -n 3 -z -u <filename>- 与上面类似,但也取消链接(即删除)文件。默认删除选项是wipesync,这是最安全但也是最慢的。检查手册页以获取更多选项。
注意: -n此处用于控制随机数据覆盖的迭代次数。增加此数字将导致shred操作需要更长的时间才能完成并更好地粉碎。我认为 3 就足够了,但也许是错的。
这样的东西,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调用,以避免当它打开了写作,这将导致它覆盖之前发布的相关存储截断文件.