当前位置: 首页 > 后端技术 > Java

Linux系统下误删文件如何恢复?

时间:2023-04-01 20:58:45 Java

1。linux不小心删除数据的场景在实际工作中,小伙伴们可能会不小心删除了linux服务器上的文件。而且越老的工程师越容易犯这样的错误,而且敲代码的速度够快,敲rm-rf回车,然后就是打脸的时刻。新手在操作文档的时候,往往是战战兢兢的反复确认,但是不容易出错。如果你也是有多年工作经验的工程师,提醒自己:淹死的人会游泳。我们需要区分两种情况来恢复误删文件:第一种情况:被删除的文件正在被进程使用;第二种情况:文件没有被任何进程使用;第一种场景的数据恢复比较简单。2.场景一数据恢复实验场景一:被删除的文件正在被其他进程使用。我们首先为我们的实验创建一个单独的目录testdel。然后用echo命令创建一个文件test-recovery.txt,放到testdel目录下,文件内容为:“testfiledeleterecovery”。重点来了:我们使用命令tail一直监控这个文件,也就是说这个文件已经被tail进程监控占用了。$mkdir./testdel;$echo"测试文件删除恢复">./testdel/test-recovery.txt;$tail-f./testdel/test-recovery.txt;此时我们打开一个新的linux终端,完成文件删除操作,文件删除后,用ls命名,在这个目录下是看不到任何文件的。$rm-fr./testdel/test-recovery.txt;$ls-l./testdel接下来我们恢复文件,执行下面的lsof命令,我们可以在返回结果中看到test-recovery.txt(已删除)被删除了,但是有一个进程tail在使用它,tail进程的进程号是1535。$lsof|greptest-recovery.txt;tail1535kafka3rREG253,22634095906/home/kafka/testdel/test-recovery.txt(删除)然后我们使用cd/proc/1535/fd命令进入进程中文件目录,1535是tail进程的进程id。该文件目录包含进程打开和使用的几个文件。我们看到名为3的文件就是我们刚刚“误删”的文件,所以我们使用下面的cp命令将其恢复回来。至此,进程引用的误删文件恢复完成。cp./3/home/kafka/testdel/test-recovery.txt;3.场景二数据恢复对于场景二,如果没有程序使用该文件,文件被删除后恢复会有点麻烦。首先,我们需要区分当前操作系统挂载的磁盘目录的文件格式。例如执行cat/etc/fstab得到如下结果。除了xfs磁盘文件格式,Linux还普遍使用ext4磁盘文件格式。每个磁盘文件格式、数据恢复方法和使用的工具都不同。鉴于篇幅问题,本文不再介绍,欢迎关注,我会持续更新!四、深入——为什么数据可以恢复?第一种情况:当一个文件正在被一个程序使用时,linux对文件有两个计数器i_count计数器:该文件可能被多个进程使用,每个进程都使用该文件,i_count值会加1。反之,如果进程释放了对该文件的引用,则计数器将递减1i_nlink,记录该文件产生的硬链接数(在Linux中,可以使用ln命令创建该文件的硬链接)。当以上两个计数器都为0时,文件实际上属于没有进程使用的状态,直接删除。如果有进程在使用,那么该文件的i_count值不为0,可以在/proc//fd目录下检索到。第二种情况:此时没有进程使用被删除的文件,被删除文件的两个计数器i_count和i_link此时都为0。这时候我们需要了解一个操作系统文件删除的概念:在操作系统层面删除文件只是删除文件的inode信息。删除inode信息后,该文件对操作系统和操作系统的用户都是不可见的。物理删除磁盘文件:我们知道一个物理磁盘是由数据块组成的,所以如果我们要恢复一个文件,就需要找到存储该文件的数据块的块单位。磁盘上实际存放文件的block暂时还没有被删除(准确的说是暂时没有被覆盖)。需要注意的是:存储数据块的块单元的文件内容会一直存在吗?答案是否定的,因为删除了数据块的内容,所以数据块可以被其他进程重新使用来写入数据。所以,当你发现你不小心删除了一个非常重要的文件时,你需要做的第一件事就是从操作系统中卸载磁盘,或者停止所有向磁盘写入数据的进程。因为写数据操作可能会占用覆盖你的“误删文件”所在的数据块,一旦数据块被写入的数据覆盖,你的数据文件将永远找不回来。推荐阅读:《java并发编程》欢迎关注我的博客,本文转载更多优质知识合集,注明出处(一定要有链接,不能只是正文):AntetokounmpoBlog-zimug.com如果你觉得对你有帮助,请帮我点赞分享!您的支持是我创作不竭的动力!.另外,作者近期输出了以下优质内容,期待大家的关注。《kafka修炼之道》《手摸手教你学Spring Boot2.0》《Spring Security-JWT-OAuth2一本通》《实战前后端分离RBAC权限管理系统》《实战SpringCloud微服务从青铜到王者》