Gab*_*ira 53
以下是恢复文本文件的一般步骤。
首先使用 wall 命令告诉用户系统在单用户模式下宕机:
# wall
System is going down to .... please save your work.
Run Code Online (Sandbox Code Playgroud)
按 CTRL+D 发送消息。
接下来使用 init 1 命令使系统进入单用户模式:
# init 1
Run Code Online (Sandbox Code Playgroud)使用 grep(传统的 UNIX 方式)恢复文件
使用以下 grep 语法:
grep -b 'search-text' /dev/partition > file.txt
Run Code Online (Sandbox Code Playgroud)
或者
grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt
Run Code Online (Sandbox Code Playgroud)
在哪里,
-i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character.
-a : Process a binary file as if it were text
-B Print number lines/size of leading context before matching lines.
-A: Print number lines/size of trailing context after matching lines.
Run Code Online (Sandbox Code Playgroud)
要恢复 /dev/sda1 上以“nixCraft”字样开头的文本文件,您可以尝试以下命令:
# grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
Run Code Online (Sandbox Code Playgroud)接下来使用 vi 查看 file.txt。
此方法仅在删除的文件是文本文件时有用。如果您使用的是 ext2 文件系统,请尝试恢复命令。
位于http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html
几年前我这样做了。我的做法是直接,不耽误时间,卸载分区然后
dd if=/dev/hda1 of=backup_image.ext3
Run Code Online (Sandbox Code Playgroud)
有一个分区的确切状态的备份文件。然后您可以再次挂载分区并继续照常工作,因为您在创建的映像中搜索已删除的文件。图像可能会非常大,因为您需要所有“空”空间,因此存储它可能是一个实际问题。
然后它只是在文本片段之后执行无聊的搜索,我希望在分区内容的某个地方。例如,为了找到 .tex 文件,我跑了
grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles
Run Code Online (Sandbox Code Playgroud)
它在短语“subsection”周围打印了一个大上下文,并将输出保存到一个文件中以供手动搜索。我打印了如此大的上下文,因为搜索图像需要很长时间,我宁愿不做比不得不做的更多次。
此外,该命令strings有助于从输出中删除二进制垃圾,但如果我没记错的话,它还删除了所有换行符,这可能是一个问题。
要以同样的方式查找二进制文件,人们可能会成功找到某个文件的特征头或某些内容,但我认为这是一次相当大的冒险。
简要技术说明:磁盘恢复和 Ext3/4 存在技术困难。解释起来很长,但要简短(且不充分):Ext3/4 删除了“标记”,当您删除文件时,这些“标记”会告诉操作系统文件在磁盘上的位置。文件不会被清理,但没有人知道它们在磁盘上的开始和结束位置,有时它们甚至在几个地方碎片化。其他一些文件系统只是将文件的状态设置为“已删除”,但保留位置数据。然后取消删除并不比用这个标志查看文件指针更难(如果没有发生太多活动,它们应该仍然可用),然后希望它们的内容没有被覆盖。
什么是最好的?修辞,在我看来。频繁备份是所有这些问题的答案。恕我直言,没有自动备份系统的重要数据是等待发生的事故。
强制性的个人轶事:我打算foo\ foo*从~. 我写
rm -r foo<Tab>*
Run Code Online (Sandbox Code Playgroud)
,可悲的是,由于foo显然是一个符号链接,并且是唯一与此匹配的文件,因此外壳变成了
rm -r foo\ foo *
Run Code Online (Sandbox Code Playgroud)
我按下 Enter 并坐在那里看着命令,这最多应该花费一秒钟。过了一会儿,rm问我是否要“删除写保护的文件‘某物’”。很快我就感觉到了寒意,我轻轻地、非常自控地按下了Ctrl+c。~我的一半~被删除了,但我设法通过上述 grepping 和一些或多或少的当前备份恢复了所有有价值的东西。我在磁盘上丢失了一些个人非常有价值(阅读:耗时)和最近的测量数据,但我做了四重备份。一个在这里消失了,另一个是由于学校系统中断,另一个是损坏的,起初我找不到第四个,因为我错误地把它放在了错误的文件夹中 :-D 。没有rm -r卡在一个写保护的文件上,第四个会被吃掉,因为该文件夹是通过 sshfs 挂载到我的~. 从那以后,我对那种东西更加小心了。
唯一正确的答案是:从备份中恢复您的文件。每个人都必须有一个备份。对于非常重要的文件,您应该有两个备份。你没有?好吧,太糟糕了,这是一个教训(抱歉听起来很刺耳,但我在数据存储中,人们在丢失一些重要数据之前不会备份,这是一个既定的事实。所以是的,你看起来很愚蠢,但是几乎其他所有人也是如此)。
好吧,你没有备份。你必须停止使用含有该文件的文件系统现在。任何写入活动肯定会占用可能(仅可能)保留在磁盘上的文件数据。
如果你犯了一个悲剧性的错误,只使用一个分区作为根文件系统和 /home,那意味着你必须从其他设备启动。现在。
如果您的文件是某种常见格式(Word 文件、JPG 等),请使用Photorec。Photorec 可以检索最常见的文件格式。
您可以尝试之前提出的“ext3 取消删除”方法,但您需要熟悉命令行,了解基本的 linux 内部工作原理等。
如果您的文件是某种特殊格式,那么运气不好。我曾经写过一个 Perl 程序来扫描驱动器中的一些特殊文件,它运行得很好;但是你需要知道一些编程才能做到这一点,并且对 linux 也很自在。
| 归档时间: |
|
| 查看次数: |
317998 次 |
| 最近记录: |