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/
