我有一个包含大约 100 行的文本文件。我hello.txt
意外地通过运行删除了所有行echo > hello.txt
现在我想恢复所有 100 行。有没有办法使用终端命令恢复该文件中的行?
答案1
内容无法取回。没有任何怜悯。
但是搜索备份文件。如果你足够幸运,在同一个目录中会有一个名为hello.txt~
的文件。这些文件通常是由文本编辑器(如或 )在你编辑文件时创建的。hello.txt
gedit
emacs
如果您有这样的备份文件,您可以恢复内容(也可能只恢复一部分)。在终端中使用以下命令:
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。
使用这篇博文, 和这篇博文,说明基本上是
apt-get install sleuthkit
stat truncated-file | grep Inode
记住 inode 编号(称之为INODE_NUMBER
)- 备份文件,然后删除它:
cp -a truncated-file truncated-file.old
rm truncated-file
debugfs /dev/disk-device
stats
寻找每组块数
这很有可能32768。 (叫它BLOCKS_PER_GROUP
)- imap 获取块并
imap <$INODE_NUMBER>
记住块号(调用它BLOCK_NUMBER
)
- 用于
blkls
将块复制到文件
blkls /dev/disk-device $BLOCK_NUMBER-$(echo '$BLOCK_NUMBER+$BLOCKS_PER_GROUP-1' | bc) > recovered-file
- 使用一些编辑程序手动检查并清理恢复的文件
但sleuthkit
对我不起作用。只有截断的文件被恢复了。
尝试使用 extundelete
尝试使用 grep
来自这篇文章,在截断的文件中 grep 一些已知字符串。这是唯一对我有用的方法。
grep -a -A 1000 -F 'some known string' \
/dev/disk-device > recovered-file
出奇的简单,是吧?
答案3
对不起朋友,这是不可能的......
您可以恢复已删除的文件,但无法恢复已删除内容的文件。