如何恢复被 `>` 截断的文件?

如何恢复被 `>` 截断的文件?

我有一个包含大约 100 行的文本文件。我hello.txt意外地通过运行删除了所有行echo > hello.txt

现在我想恢复所有 100 行。有没有办法使用终端命令恢复该文件中的行?

答案1

内容无法取回。没有任何怜悯。

但是搜索备份文件。如果你足够幸运,在同一个目录中会有一个名为hello.txt~的文件。这些文件通常是由文本编辑器(如或 )在你编辑文件时创建的。hello.txtgeditemacs

如果您有这样的备份文件,您可以恢复内容(也可能只恢复一部分)。在终端中使用以下命令:

mv hello.txt~ hello.txt

哪怕只有一部分,也比彻底失去要好。

答案2

总结跳到最后查看可行的解决方案。

我意外地使用 gedit 截断了一个文件。它从 1800 kB 被截断为 25 kB。

我想分享一些我尝试过的恢复技术。这并不是一个明确的答案,而是一个可供尝试的答案集合。 这与这篇文章类似


第一的,将文件系统重新挂载为只读!.尽快做这件事。

sudo mount -o remount,ro /

就我而言,我无法以只读方式重新挂载,所以......

命令mount失败。错误为mount: / is busy

我建议采取更激进的措施,直接关闭你的机器。是的,非常激进!但我不知道截断文件的残留会存在多久。它们可能随时被覆盖。启动 Ubuntu LiveCD。

根据此处的评论,我运行了telinit 1它,它下降到了初始级别 1。这只会使事情变得复杂,所以我不建议这样做telinit 1。我建议硬关闭电源。

尝试使用 ex3grep

关注此博客文章此电子邮件主题,尝试使用ext3grep
但是,ext3grep对我来说失败了。我只能恢复被截断的文件。

尝试使用 sleuthkit

sleuthkit很酷的工具集。你可能必须安装它。同样,如果截断的文件是/挂载文件,这会变得很棘手。同样,我建议强制关闭电源,然后运行 ​​LiveCD。 使用这篇博文, 和这篇博文,说明基本上是

  1. apt-get install sleuthkit
  2. stat truncated-file | grep Inode
    记住 inode 编号(称之为INODE_NUMBER
  3. 备份文件,然后删除它:
    cp -a truncated-file truncated-file.old
    rm truncated-file
    1. debugfs /dev/disk-device
    2. stats
      寻找每组块数
      这很有可能32768。 (叫它BLOCKS_PER_GROUP
    3. imap 获取块并
      imap <$INODE_NUMBER>
      记住块号(调用它BLOCK_NUMBER
  4. 用于blkls将块复制到文件
    blkls /dev/disk-device $BLOCK_NUMBER-$(echo '$BLOCK_NUMBER+$BLOCKS_PER_GROUP-1' | bc) > recovered-file
  5. 使用一些编辑程序手动检查并清理恢复的文件

sleuthkit对我不起作用。只有截断的文件被恢复了。

尝试使用 extundelete

来自这个论坛帖子

尝试使用 grep

来自这篇文章,在截断的文件中 grep 一些已知字符串。这是唯一对我有用的方法。

grep -a -A 1000 -F 'some known string' \
    /dev/disk-device > recovered-file


出奇的简单,是吧?

答案3

对不起朋友,这是不可能的......

您可以恢复已删除的文件,但无法恢复已删除内容的文件。

相关内容