Answers:
通常,当编辑者保存文件时,他们会删除或截断为0,从而释放分配的空间,然后写入,从而分配新的空间。这导致文件系统将数据放置在完全不同的物理位置。因此,您的想法可能行不通。
您可以使用filefrag
或来获取文件的物理位置hdparm --fibmap
,然后使用dd
来直接读取该物理位置。我在这里在不同的上下文中描述了此过程:https : //unix.stackexchange.com/a/85880/30851
在您的情况下,您更有可能需要用于查找文本数据的通用方法……例如:
strings -n 12 -t d /dev/partition | grep -F 'text snippet'
strings
会寻找连续的ASCII数据(也支持其他一些编码,不确定UTF-8。如果是代码或英语,则不需要它),并且还会在找到的位置打印偏移量。
text snippet
应该是一个精确的,唯一的文本示例,您记得该文件位于要查找的文件的一部分中(单行)。(如果您不太清楚,则可以使用正则表达式进行grep代替。)
-n 12
是strings
将要寻找的最小长度。12
应该是你的长度text snippet
。该参数是可选的,如果提供的话它可能有助于strings | grep
加快速度。
读取整个分区将花费很长时间,但如果成功,您将获得一个偏移量,可以dd
获取以获取常规区域,然后删除不属于该区域的内容。
自该目录以来,我没有做任何事情
如果您的目录不是碰巧是挂载点,那么大多数文件系统实际上都不会“按目录”保留空间,因此...整个文件系统中的所有写入都可能会覆盖您要查找的位。在数据恢复情况下,通常会将整个对象切换为只读模式。
strings -n16
或使用一些合理的最小长度,以使其运行更快。
strings
我就可以在分区的其他地方找到整个文件。这几乎是我两个月不必做的工作,这是一个很好的提醒,始终将版本控制用于任何重要的事情。
strings
,除非您非常幸运,否则将仅定位文件的某些部分。