假设我们使用标准的bash术语来编写for循环,循环srm以安全地擦除驱动器上的项目。
现在假设我们将它设置为迭代10次,在第一次迭代完成后,它如何仍然可以在文件上工作?该文件应该不再存在,那么如何删除呢?不是特定于srm的问题,任何事情都可以运行。甚至像mv这样的东西,即使文件不再可用。
答案 0 :(得分:3)
它将循环运行10次,但除了第一次迭代之外,您正在执行的命令将失败(并返回-1)。该命令还会写出它通常写出的任何错误消息(到stdout,stderr或文件)。
#!/bin/bash
for i in {1..5}
do
rm something
done
现在,假设有一个名为something
的文件,你得到:
rm: something: No such file or directory
rm: something: No such file or directory
rm: something: No such file or directory
rm: something: No such file or directory
请注意,自第一次rm
成功运行以来,这种情况发生了4次,而不是5次。
答案 1 :(得分:3)
你做不到。一旦srm返回,文件就会消失。
而不是编写循环,您将需要调整srm的参数以在返回之前覆盖数据更多次。
根据Wikipedia writeup on srm,默认模式为35 pass Gutmann。这真的不够吗?
答案 2 :(得分:2)
srm为你做循环,然后删除驱动器,没有必要或能力从bash做你想要的。您必须使用某些特定于操作系统的API在C / C ++中编写一些与文件系统直接对话的内容。
答案 3 :(得分:2)
矫枉过正。只需使用shred --remove <file>
;它容易了十几次。
如果你试图擦拭你的整个驱动器,那么系统性地证明了没有什么能比dd
更让你感到沮丧并用零写你的驱动器。