偶然地,我使用rm
了不想删除的文件。有什么方法可以在Linux下取回它吗?
偶然地,我使用rm
了不想删除的文件。有什么方法可以在Linux下取回它吗?
Answers:
以下是恢复文本文件的通用步骤。
首先使用wall命令告诉用户系统正在以单用户模式关闭:
# wall
System is going down to .... please save your work.
按CTRL + D发送消息。
接下来,使用init 1命令使系统进入单用户模式:
# init 1
使用grep(传统UNIX方式)恢复文件
使用以下grep语法:
grep -b 'search-text' /dev/partition > file.txt
要么
grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt
哪里,
-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.
要恢复/ dev / sda1上以“ nixCraft”字开头的文本文件,可以尝试以下命令:
# grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
接下来使用vi查看file.txt。
仅当删除的文件是文本文件时,此方法才有用。如果您正在使用ext2文件系统,请尝试使用restore命令。
可在http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html找到
init 1
,请手动杀死除之外的所有系统守护程序sshd
。我还认为,此时您应该重新安装所有文件系统RO并保存到tmpfs(假设您的临时文件适合ram),以避免用临时数据覆盖文件。在稍后将它们重新装入RW之后,您当然必须稍后将其复制到其他位置,或者复制到远程服务器,或者复制回到本地文件系统。
dd
然后尝试在其中找到文件(使用grep
或编辑器)。编辑:有时ddrescue
比效果更好dd
。
唯一正确的答案是:从备份还原文件。每个人都必须有一个备份。对于真正重要的文件,您应该有两个备份。你不是吗 好吧,太糟糕了,这是一个教训。(很抱歉,听起来很刺耳,但是我在数据存储中,人们不会备份,直到他们丢失了一些重要数据,这是既定的事实。是的,您看起来很愚蠢,但是几乎所有人都是如此)。
好的,您没有备份。您必须停止使用包含文件RIGHT NOW的文件系统。任何写操作都可以肯定限制可能(仅可能)保留在磁盘上的文件数据。
如果您发生悲剧性错误,即仅将一个分区用作根文件系统和/ home,则意味着您必须从其他设备引导。现在。
如果您的文件具有某些常用格式(Word文件,JPG等),请使用Photorec。Photorec可以检索最常见的文件格式。
您可以尝试先前提出的“ ext3 undelete”方法,但是您需要熟悉命令行,了解基本的Linux内部工作原理等。
如果您的文件具有某些特殊格式,请祝您好运。我曾经写过一个Perl程序来扫描驱动器中的一些特殊文件,并且效果很好。但是您需要了解一些编程知识才能做到这一点,并且对Linux也很放心。
我是几年前做的。我的方法是直接,没有时间浪费,卸载分区,然后
dd if=/dev/hda1 of=backup_image.ext3
具有分区确切状态的备份文件。然后,您可以再次挂载该分区,然后在创建的映像中搜索已删除的文件时照常进行操作。由于您需要所有“空”空间,因此图像可能会非常大,因此存储它可能是一个实际的问题。
然后,只是在我希望将文本片段放在分区内容的某个位置之后,才进行无聊的搜索。例如找到.tex文件,我跑了
grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles
它在短语“ subsection”周围打印了一个较大的上下文,并将输出保存到文件中以供手动搜索。我打印了一个很大的上下文,因为搜索图像花了很长时间,所以我宁愿不要这样做。
该命令strings
还有助于从输出中删除二进制垃圾,但是如果我没有记错的话,它也会删除所有换行符,这可能是一个问题。
要以相同的方式查找二进制文件,可能会成功找到特征性标头或某个文件的某些内容,但是我认为这是一个很大的冒险。
简要技术说明:磁盘恢复和Ext3 / 4存在技术困难。要解释很长,但是要简短(且不够充分):Ext3 / 4删除了“标记”,这些标记告诉操作系统删除文件时文件在磁盘上的位置。这些文件不会被擦除,但是没人知道它们在磁盘上的开始和结束位置,有时它们甚至会分散在多个位置。其他一些文件系统只是将文件状态设置为“已删除”,但保留位置数据。然后,取消删除并不比使用带有该标志的文件指针难(如果没有发生过多的活动,它们应该仍然可用),然后希望它们的内容不会被覆盖。
什么是最好的?在我看来,修辞。频繁备份是解决所有这些问题的方法。恕我直言,没有自动备份系统的重要数据是意外事件。
强制性个人轶事:我要删除foo\ foo*
的~
。我写
rm -r foo<Tab>*
,可悲的是,由于它foo
显然是一个符号链接,并且是唯一与此匹配的文件,因此将shell制成了
rm -r foo\ foo *
我按Enter键并坐在那里看命令,该命令最多应该花一秒钟。过了一会rm
儿,我问我是否要“删除受写保护的文件'东西'”。我很快就感到发抖,我轻柔地控制着自己Ctrl+c
。〜我的一半~
被删除了,但是我设法通过上述grepping和一些或多或少的当前备份恢复了所有有价值的东西。我个人有一些非常有价值(读:很耗时),磁盘上的最新测量数据丢失了,但是我做了四倍的备份。一个人在这里失散,另一个人由于学校系统故障而损坏,另一个人损坏了,起初我找不到第四个,因为我错误地将其放在错误的文件夹中:-D。没有rm -r
卡在一个受写保护的文件上,因为该文件夹是通过my中的sshfs挂载的,所以它已经被吃掉了~
。从那以后,我对这种东西更加谨慎。
放低您的期望。如果在“已删除”数据上写入了任何内容,您将丢失它。
我做了少量的恢复,发现的最好的工具通常是针对某些格式设计的。例如,当我想恢复成千上万的jpeg时,“ photorec”就很棒。
Recuva之前也对我有所帮助,可能是您最好的选择。(它是免费的,不要被他们的广告欺骗)
归根结底,如果丢失的内容很重要,请使驱动器脱机并停止对其进行写入。使用您可以找到的所有恢复软件,直到您取回数据或不再值得使用为止。如果确实很重要,请以高价将其发送给专业人士。
如果您以前有过使用该工具的运气,请根据自己的熟悉程度再试一次。归根结底,它们不应该写入磁盘,因此可以使用软件,直到找到可行的软件为止。
如果您打开的应用程序当前正在读取文件,例如VLC或LibreOffice,那么L&U.SO的出色回答将使我摆脱困境。这是执行此操作的另一种方法。
通常的想法是在其中找到链接/proc/PID/fd/DESCRIPTOR_NUMBER
并将其复制回其原始位置。使用ps aux | grep APP_NAME
查找PID,然后ls -la /proc/PID/fd/
找到合适的DESCRIPTOR_NUMBER。
您可以尝试此脚本。效果很好,并且打算现在代替rm和im广泛使用它。
https://github.com/nateshmbhat/safe-rm
rm
rm
是一个“危险的” UNIX / Linux命令(已阅读$ man rm
)。使用时要格外小心。话虽如此,这是一种删除您确定的文件的快速方法。现代Linux和Unix桌面环境确实提供了“垃圾箱”解决方案,因此用户可以轻松地恢复意外删除的文件。