当前位置: 首页 > Linux

执行rm-f后,我已经跑路了,不想去想怎么挽回

时间:2023-04-06 22:31:38 Linux

做好逃跑的准备,毕竟人不是机器,何况机器还有bug,呵呵。那么如果真的删除了数据库、日志、执行文件等不该删除的文件怎么办?如果你想知道接下来发生了什么,请仔细阅读这篇博客。模拟场景1.误删除服务器目录/root/selenium/Spider下的MySql.Data.dll文件:>rm-f/root/selenium/Spider/MySql.Data.dll>ll/root/selenium/Spider/MySql.Data.dlls:无法访问/root/selenium/Spider/MySql.Data.dll:没有这样的文件或目录2。恢复并使用lsof命令查看当前是否有进程打开/root/selenium/Spider/MySql.Data.dll文件:>lsof|grep/root/selenium/Spider/MySql.Data.dll从上面可以看出,当前文件状态是删除(deleted)。检查是否有恢复数据:/proc/13067/fd:进程运行的文件描述符目录。86:文件描述符。>cat/proc/13067/fd/86使用I/O重定向恢复文件:>cat/proc/23778/fd/86>/root/selenium/Spider/MySql.Data.dll>ls-l/root/selenium/Spider/MySql.Data.dll-rw-r--r--1rootroot702464Feb1012:03/root/selenium/Spider/MySql.Data.dll重新运行程序:说明没有问题与恢复的文件。追根究底通过前面的模拟场景演示了恢复文件的整个过程,那么到底是什么原理,什么情况下文件可以恢复。在Linux系统中,每个运行的程序都有一个相互隔离的宿主进程,通过/proc/进程号体现(Linux本质上是一个文件系统),如:ls-l/proc/13067查看进程PID为13067过程信息;程序运行时,操作系统会专门开辟一块内存区域供当前进程使用。对于依赖文件,操作系统会发出一个文件描述符来读写文件。当我们执行rm-f删除一个文件时,实际上是删除了文件的目录索引节点。它对文件系统是不可见的,但对打开它的进程仍然是可见的,即之前发出的文件描述符仍然可以用来读写文件。正是使用了这个原理。所以我们可以使用I/O重定向来恢复文件。总结如果不小心误删了文件,不要着急,先用lsof查看打开文件的进程,再用cat/proc/进程号/fd/文件描述符查看恢复的数据,最后用I/O重定向以恢复文件。