乐趣区

关于linux:linux手误rm可能不需要跑路

对于 linux 下误删的文件,咱们是否真的无奈通过软件进行复原呢?

误删文件还原能够分为两种状况

  • 一种是删除当前在过程存在删除信息
  • 一种是删除当前过程都找不到,只有借助于工具还原。

明天只剖析文件被删除后, 相干过程还存在的状况

这种个别是有流动的过程存在继续规范输出或输入,到时文件被删除后,过程 PID 仍旧存在。这也是有些服务器删除一些文件然而磁盘不开释的起因

案例演示

创立一个文件

> vim  rumenz.txt
123
// 保留退出
> cat rumenz.txt
123

tail -f 关上 rumenz.txt 文件

目标是让 rumenz.txt 被删除后, 过程仍然存在

> tail -f rumenz.txt

新开一个终端删除rumenz.txt

> rm -f rumenz.txt

找到占用 rumenz.txt 的过程

  • lsof 查看删除的文件过程是否还存在。
  • 如没有装置请自行 yum install lsof 或者 apt-get install lsof
> lsof | grep delete | grep rumenz
tail      10222          root    3r      REG              253,1          4   70911074 /root/test/rumenz.txt (deleted)

过程 ID 是 10222, 从下面能够看出,以后文件状态为已删除(deleted)

复原文件

  • /proc/10222/fd:过程操作的文件描述符目录
> cd /proc/10222/fd
> ls -al
dr-x------ 2 root root  0 May 11 21:41 .
dr-xr-xr-x 9 root root  0 May 11 21:41 ..
lrwx------ 1 root root 64 May 11 21:41 0 -> /dev/pts/1
lrwx------ 1 root root 64 May 11 21:41 1 -> /dev/pts/1
lrwx------ 1 root root 64 May 11 21:41 2 -> /dev/pts/1
lr-x------ 1 root root 64 May 11 21:41 3 -> /root/test/rumenz.txt (deleted)
lr-x------ 1 root root 64 May 11 21:41 4 -> anon_inode:inotify

开始复原文件

> cp 3 /root/test/rumenz.txt
> cat /root/test/rumenz.txt
123

能复原的根本原因

当程序运行时,操作系统会专门开拓一块内存区域,提供给以后过程应用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当咱们执行 rm -f 删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,然而对于关上它的过程仍然可见,即依然能够应用先前发放的文件描述符读写文件,正是利用这样的原理,所以咱们能够应用 I / O 重定向的形式来复原文件。

原文链接:https://rumenz.com/rumenbiji/…
微信公众号: 入门小站

退出移动版