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

File 用零覆盖一系列文件的最简单方法,file,overwrite,File,Overwrite,我在Linux上。我有一个文件列表,我想用零覆盖它们并删除它们。我试着用 srm file1 file2 file3 ... 但是速度太慢了,我必须覆盖和删除约50 GB的数据,我不需要那种安全性,我知道srm会进行大量的传递,而不是一次带零的传递 我知道我可以用这个命令覆盖每个文件 cat /dev/zero > file1 然后用rm删除它,但我不能为每个文件手动删除 是否有一个像srm这样的命令可以执行一次零传递,或者可能有一个脚本可以对文件列表而不是单个文件执行cat/dev/

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

srm file1 file2 file3 ...
但是速度太慢了,我必须覆盖和删除约50 GB的数据,我不需要那种安全性,我知道srm会进行大量的传递,而不是一次带零的传递

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

cat /dev/zero > file1
然后用rm删除它,但我不能为每个文件手动删除

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

srm的目的是在释放文件块之前销毁文件中的数据

cat/dev/null>文件根本不等同于srm,因为 它不会破坏文件中的数据:块将在原始数据完整的情况下释放

使用/dev/zero而不是/dev/null甚至不起作用,因为/dev/zero永远不会结束

将程序的输出重定向到文件将永远无法工作,原因与cat/dev/null中给出的相同

您需要一个特殊用途的程序来打开给定的文件进行写入,在文件的所有字节上写入零,然后删除该文件。srm就是这样做的。

srm的目的是在释放文件块之前销毁文件中的数据

cat/dev/null>文件根本不等同于srm,因为 它不会破坏文件中的数据:块将在原始数据完整的情况下释放

使用/dev/zero而不是/dev/null甚至不起作用,因为/dev/zero永远不会结束

将程序的输出重定向到文件将永远无法工作,原因与cat/dev/null中给出的相同


您需要一个特殊用途的程序来打开给定的文件进行写入,在文件的所有字节上写入零,然后删除该文件。这就是srm所做的。

您可能需要这样的东西,使用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
使用/dev/uradom而不是/dev/zero可以获得更好的擦除语义


编辑:在dd调用中添加了conv=notrunc选项,以避免在文件打开写入时截断文件,这将导致相关存储在被覆盖之前被释放。

类似的内容,使用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
使用/dev/uradom而不是/dev/zero可以获得更好的擦除语义

编辑:在dd调用中添加了conv=notrunc选项,以避免在文件打开写入时截断文件,这将导致相关存储在被覆盖之前被释放。

我使用shred来完成此操作

以下是我通常使用的选项

shred-N3-z-这将进行3次传递以用随机数据覆盖文件。然后,它将进行最后一次传递,用零覆盖文件。但该文件仍将保留在磁盘上,但它将保留磁盘上的所有0

shred-N3-z-u-与上面类似,但也会取消链接,即删除文件。删除的默认选项是wipesync,它是最安全也是最慢的。查看手册页以了解更多选项

注意:-n在这里用于控制用随机数据覆盖的迭代次数。增加此数量将导致粉碎操作需要更长的时间才能完成,并且粉碎效果更好。我认为3个就足够了,但可能是错的。

我用“碎片”来做这件事

以下是我通常使用的选项

shred-N3-z-这将进行3次传递以用随机数据覆盖文件。然后,它将进行最后一次传递,用零覆盖文件。但该文件仍将保留在磁盘上,但它将保留磁盘上的所有0

shred-N3-z-u-与上面类似,但也会取消链接,即删除文件。删除的默认选项是wipesync,它是最安全也是最慢的。查看手册页以了解更多选项

注意:-n在这里用于控制用随机数据覆盖的迭代次数。增加此数量将导致粉碎操作需要更长的时间才能完成,并且粉碎效果更好。我认为3个就够了,但可能错了

有没有像srm这样的命令只传递一次零

对。SRM使用正确的参数执行此操作。来自man srm: srm-llz

-我降低了安全性。只写入两个过程:一个模式为 0xff和最终模式随机值

-l-l第二次更加深刻地感受到了安全:只有一个 写随机通行证

-z用零而不是随机数据擦除最后一次写入 如果擦除目录,srm-llzr将递归地执行相同的操作

您甚至可以使用'srm-llz[file1][file2][file3]通过一个命令以这种方式擦除多个文件

有没有像srm这样的命令可以执行一次零传递,

对。SRM使用正确的参数执行此操作。来自man srm: srm-llz

-我降低了安全性。只写入两个过程:一个模式为 0xff和最终模式随机值

-l-l第二次更加深刻地感受到了安全:只有一个 写随机通行证

-z用零而不是随机数据擦除最后一次写入 如果擦除目录,srm-llzr将递归地执行相同的操作


您甚至可以使用'srm-llz[file1][file2][file3]通过一个命令以这种方式擦除多个文件

您应该检查xargs;您应该检查xargs;对不起,你是对的,我的意思是/dev/zero而不是/dev/null。我已经更正了问题中的错误。对不起,你是对的,我指的是/dev/zero而不是/dev/null。我已经纠正了问题中的错误。我怀疑这是否有效,因为在dd中,它将只是开放供编写,而不是更新。@lhf Good call。。。这将截断文件,在覆盖之前释放存储。我将添加正确的选项以避免出现这种情况……我怀疑这是否有效,因为在dd中,它将只是开放供编写,而不是更新。@lhf Good call。。。这将截断文件,在覆盖之前释放存储。我将添加一个正确的选项来避免这种情况……shred的默认迭代是3,因此在没有-n3yes@Monica的情况下它将是相同的,你是正确的。但是我是所有东西代码中显式而非隐式的粉丝。shred的默认迭代是3,所以没有-n3yes@Monica,它将是相同的,你是对的。但我是所有代码中显式而非隐式的粉丝。