美文网首页LinuxLinux学习之路
Linux下如何恢复被删除的文件

Linux下如何恢复被删除的文件

作者: QuietHeart | 来源:发表于2020-07-22 14:44 被阅读0次

    Linux删除文件最终调用的是 ulink 函数,该函数会将对应的文件删除,如果仍然有进程使用文件,那么只将对应目录项删除,数据仍旧可以在进程中访问,等进程退出后,数据就完全被删除了(没有可以访问的途径了)。

    利用 ulink 的特性,我们也可以恢复一些被删除的文件(前提是文件还有其他进程在使用)。下面的例子中,我们结合lsof(可以查看一个进程打开的文件)恢复一个被删除的文件 test_recover ,如下:

    1、查看当前文件

    $ ls 
    test_recover test_recover2 
    
    $less test_recover 
    goodfile 
    it is very good!! 
    it is used to test how to recover a deleted file with lsof.
    

    这时候,文件还处于没有删除的状态,在这个状态下,我们使用 less 打开了文件,并把 less 置于后台。

    2、删除文件 =test_recover =

    $rm test_recover 
    
    $ ls 
    test_recover2
    

    这样,我们已经将文件删除,但是由于 less 还在运行,所以这个文件虽然我们看不见了,但是 less 不知道它删除了, less 还是可以对文件进行读写的,也就是说这个文件的数据实际还存在于磁盘上。

    3、查看删除的文件的信息

    $lsof |grep test_recover 
    less 22197 quietheart 4r REG  8,8  87  1837925 /home/quietheart/test/lsof_test/test_recover (deleted)
    

    这里,通过 lsof 我们可以看到被删除的文件的信息。

    4、根据删除文件的信息恢复删除的文件

    $cd /proc/22197/fd 
    $ ls 
    0  1  2  3  4 
    
    $cat 4 
    goodfile 
    it is very good!! 
    it is used to test how to recover a deleted file with lsof. 
    
    $ cat 4 >/home/quietheart/test/lsof_test/test_recover 
    $ cd /home/quietheart/test/lsof_test/ 
    $ ls 
    test_recover  test_recover2 
    $ cat test_recover 
    goodfile 
    it is very good!! 
    it is used to test how to recover a deleted file with lsof.
    

    根据前面 lsof 的信息,我们知道,被删除的文件实际就是 less 程序的文件描述符号4,根据此我们确定了要恢复的文件。使用 cat 对文件进行恢复。

    总结

    对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。

    如前面所述,再总结一下,这样可以恢复文件,其原理是:当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。当文件删除时,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。 在 /proc 目录下,其中包含了反映内核和进程树的各种文件。 /proc 目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234 中包含的是 PID1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。 lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以 lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过 lsof/proc 目录下恢复该文件的内容。

    相关文章

      网友评论

        本文标题:Linux下如何恢复被删除的文件

        本文链接:https://www.haomeiwen.com/subject/klzzkktx.html