我正在尝试创建一个可以放在.bash_profile
文件中的函数,该函数将用0x00
替换给定目录中每个文件中的每个字节。程序将循环遍历给定目录中的所有文件$(1)
(循环),并在每个文件中遍历所有字节并将其替换为{{1} (替换)。
我得到了循环,但我无法弄清楚如何更换。请你帮助我好吗?如果我可以使用此功能,我可能会将其作为擦除数据的有效方法进行分发。非常感谢你的帮助!
还有一个帖子,有人想用另一个字节替换一组字节。我的不同,但也许它会使用0x00
命令。
答案 0 :(得分:1)
使用dd
:
hd targetfile # optionally look at hex dump to see original file contents
SIZE=$(stat -f%z targetfile) # get file size
dd if=/dev/zero of=targetfile count=1 bs="$SIZE" # overwrite file contents
hd targetfile # optionally look at hex dump to see it's all zeros
注意,在Linux上, stat 的文件大小开关将是-c%s
,我测试过它。以上-f%z
基于this answer,我没有对其进行测试。
在使用 dd 之前,您可能还需要为 stat 添加返回值检查并验证文件大小是否大于零。类似的东西:
SIZE=$(stat -f%z targetfile) &&
test "$SIZE" -gt 0 &&
dd if=/dev/zero of=targetfile count=1 bs="$SIZE"
答案 1 :(得分:0)
sed -i "s/./\x00/g;" file # sets any char to 0 except returns
无论如何,类似的方法可能会创建相同名称的文件,相同的大小用零填充,但不确定,如果这些文件在光盘上占据的空间与原件相同,那么原件的字节可能是可能的稍后在“文件之间的空闲空间”中找到
正确的方法是使用更复杂的东西,或者是用于重写扇区内容的专用工具,或者至少是以二进制模式打开文件并用零覆盖每个字节的程序。
仍然可能有光盘上某处隐藏的那些“秘密字节”,如果这些文件在某种程度上被操纵(编辑,复制,......)所以为了摆脱“证据”,你还需要重写所有“未被占用的”光盘上的空间
并且希望,有些扇区的重新映射已经发生(因为硬盘可以自动映射出有缺陷的扇区,后来可以恢复这些扇区,并且SSD也会通过耗损均衡和重新映射扇区来做一些肮脏的技巧)
所以你仍然需要考虑价格和风险。好老白蚁是这里的银弹:)
答案 2 :(得分:0)
如果您需要更改某个目录后面的所有文件,find
+ dd
是可行的方法。以下脚本应该可以解决问题。
注意:您需要从hyde已经指出的stat -c%s
更改为stat -f%z
。
#!/bin/bash
[ ! -d "$1" ] && echo "Usage: $0 <directory>" && exit 1
find "$1" -type f ! -empty | while read f; do
dd if=/dev/zero of="$f" count=1 bs=`stat -c%s "$f"` > /dev/null 2>&1 || echo "$f failed"
done