从命令行将文件清零

从命令行将文件清零

Windows 7 或更高版本中是否有内置命令来用零/NULL 字节填充文件

处理应该发生到位(即它应该修改文件的实际磁盘扇区/字节),而不是创建新文件。

就像是:

zero c:\temp\*.*

或者

zero hello.bin

这样就可以了:

Before: hello.bin (500 MB)
5D 1A CB FF FF C0 ... AA CD 0F FF


After: hello.bin (500 MB)
00 00 00 00 00 00 ... 00 00 00 00

如果没有内置解决方案,还有其他解决方案吗?还是我必须用 C 语言来做?

答案1

Windows 中是否有内置命令可以用零/NULL 字节填充文件?

是的。你可以使用fsutil以下方法:

> fsutil file setzerodata /?
Usage : fsutil file setzerodata offset=<val> length=<val> <filename>
   offset : File offset, the start of the range to set to zeroes
   length : Byte length of the zeroed range
   Eg : fsutil file setzerodata offset=100 length=150 C:\Temp\sample.txt

要用零填充完整的文件,您将需要使用偏移量,0并且需要知道文件的长度。


我们可以使用批处理文件来自动计算大小吗?

当然。

使用以下批处理文件(zero.cmd):

@echo off
setlocal enabledelayedexpansion
for %%a in (%1) do (
  fsutil file setzerodata offset=0 length=%%~za %%a
)
endlocal

用法:

  • 您可以将单个文件名作为参数传递:zero test.txt或通配符:zero *.txt

例子:

> type test.txt
abc
foo$
foo
bar

> zero test.txt
Zero data is changed

> type test.txt

>

在此处输入图片描述


进一步阅读

答案2

这不是一个解决方案,但如果你有赛格威安装后,你只需执行以下操作(例如,对于 500000000 字节的文件):

dd if=/dev/zero of=MyFile.zero bs=1 count=500000000

这与你在任何类Unix操作系统。

答案3

我知道这个问题/帖子已经很老了,而且提供的回复完美地回答了问题。但我认为,这个问题本身是严重错误的,因为它问的是如何将“解决方案”应用于 OP 自己“设计/想到”的问题。

这个问题本身就是一个很好的例子不是着手解决问题,至少在数据隐私/安全/保密性如此关键的背景下,任何缺陷或仅仅忽视问题的任何方面都可能导致严重后果。

基本上,原始发帖人所做的就是尝试重新独立地解决一个问题,只使用他/她自己(显然)有限的资源和知识,这个问题不仅既不新也不未知,而且实际上可能(几乎)和计算本身一样古老(如果没有碎纸机那么古老的话)。

总而言之,这简直是自找麻烦。

这个问题在很多讨论计算/数据安全性和保密性的地方都得到了充分的讨论、记录和背景解决,如果不从至少一些基本问题开始,那就太愚蠢了,甚至更好——由于问题的重要性——从一些严肃的研究,这是严重错误的。

突然想到,永久删除文件与实际情况密切相关:当然首先取决于操作系统,但也取决于正在使用的文件系统,它的工作方式可能非常复杂,并且极有可能使用比标准用户可能假设的更加多样化和多样化的结构。

因此,‘就地’‘覆盖’文件(修改文件的实际磁盘扇区/字节,而不是创建新文件),‘用零/NULL 字节‘填充’它’可能根本无法解决问题,并且/或者可能比想象的要困难得多。执行此操作,然后检查文件的内容,绝不能保证旧数据本身(即旧块/扇区/簇,或保存它的任何其他结构)实际上已被覆盖,并且不会保持原样和原样。

此外,甚至在集中精力处理文件之前,就必须在更高层次上进行检查,确保存储文件的驱动器(云、备用驱动器或媒体、磁带备份等)上没有任何类型的活动备份或复制,而这些驱动器本身可能仍保存着目标文件的副本。

那么首先创建或修改文件的应用程序又如何呢?必须确保它们自己不会创建自己的备份文件(.bak 或其他扩展名),这些文件可能存储在另一个驱动器/另一个目录中。

在检查完所有这些问题并解决之后,在 Windows 的特定环境中,要了解此问题的问题和复杂性,请参阅优秀的 Mark Russinovich 撰写的“SDelete”工具简介(出版日期:2023 年 9 月 29 日,截至 2024 年 4 月):
https://learn.microsoft.com/en-us/sysinternals/downloads/sdelete
请确保不要错过‘SDelete 的工作原理’部分。

最后,存储介质本身的性质也很重要。即使假设文件位于本地驱动器上,我们谈论的是硬盘驱动器 (HDD) 还是固态驱动器 (SSD)?

SSD 的工作方式与 HDD 截然不同。

关于这一点,请以超级用户身份检查以下页面:
如何安全地删除存储在 SSD 上的文件?
如何安全地从 SSD 中删除特定文件夹?

此外,虽然这个页面可能有点旧并且涉及不同的问题(覆盖已删除的文件和驱动器上的可用空间),但它提出并讨论的问题与尝试覆盖和/或永久删除仍然存在的文件时完全相同的问题:
如何以正确的方式完全覆盖已删除的文件
具体请查看“jww 2018 年 10 月 6 日 10:29”的回答及其提供的优秀链接。

有问题的两个链接如下。请务必不要错过第一个,这是一份关于删除固态硬盘数据问题的优秀白皮书,其中发现某些 SSD 安全擦除命令存在错误,在某些情况下,会导致驱动器上的所有数据完好无损,并且“单文件清理技术 (...) 始终无法从 SSD 中删除数据”:
https://www.usenix.org/legacy/event/fast11/tech/full_papers/Wei.pdf

但第二个也很有趣:
如何安全地格式化固态硬盘?
在上面的页面上,检查提供给这个的‘源’链接:
https://www.ghacks.net/2009/04/08/ssd-security-erase-solid-state-drives-data/

请记住,随着存储技术的不断发展(确实相当迅速),该问题可能很快就会面临新的问题,并需要不同的解决方案和行动。

相关内容