在执行该操作时涉及到了文件删除的原理与符号链接和硬链接的知识

   1.在linux系统中,连接分为两种,一种是被称为硬链接(hard link),另一种被称为符号连接或是软连接(symbolic link)

   2.默认不带参数的情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软连接

   3.硬链接与源文件的inode节点号相同,而软连接的inode节点号与源文件不同

   4.Ln命令不能对目录创建硬链接,但是可以创建软连接,而且目录的软连接经常会被用到

   5.删除软连接的源文件,这个软连接就会失效,ll命令查看时会红底白字闪烁,但是用readlink查     看软连接文件指向还是正常的

   6.在文件有多个硬链接的前提下删除链接文件,对源文件及硬链接文件无任何影响

   7.删除链接文件的源文件,对硬链接文件无影响,但是软连接文件就会失效

   8..同时删除源文件极其硬链接文件还有该文件无运行进程的前提下,整个文件才会被真正的删除

   9.软连接文件可以跨文件系统,硬链接文件不可以跨文件系统

   Linux系统中inode存放文件的属性block存放数据  文件名是存放在上一级目录的block里面,当该文件存在硬链接或进程正在被调用的情况下只删除源文件是删除不了的,如果要删除,就必须在该文件无运行进程时将文件的所有硬链接删除掉,这样才会被真正删除掉,


 文件删除后且被进程占用如何找回_第1张图片


创建测试环境如下

[root@beita /]#touch a.txt  <==创建此文件模拟环境 再开一个窗口用tailf a.txt调用进程

[root@beita /]#rm -f a.txt  <==删除该文件 开始测试

查找系统调用进程文件:

[root@beuta /]# ps -ef

root       8389   8035  0 00:06 pts/4    00:00:00 tail -f a.txt

root       8401   7983  0 00:08 pts/3    00:00:00 ps -ef

查看文件删除后的进程仍在调用的文件:

[root@beuta /]# lsof|grep del

tail    3247  root    3r    REG    8,3    8427    5042 /a.txt (deleted)

通过查找/porc目录中对应的进程号码找回文件:

[root@beuta /]# ll /proc/3247/fd/

total 0

lrwx------ 1 root oldboy 64 May 31 21:56 0 -> /dev/pts/2

lrwx------ 1 root oldboy 64 May 31 21:56 1 -> /dev/pts/2

lrwx------ 1 root oldboy 64 May 31 21:55 2 -> /dev/pts/2

lr-x------ 1 root oldboy 64 May 31 21:56 3 -> /a.txt (deleted)  <==查找刚刚删除的文件;

lr-x------ 1 root oldboy 64 May 31 21:56 4 -> inotify

通过cp命令将刚刚删除的文件复制到/root目录下可恢复文件

[root@beuta /]#cp /proc/3247/fd/3 /root/a.txt

[root@beuta /]# ll /root/a.txt

-rw-r--r-- 1 root oldboy 8427 Jun  1 00:25 a.txt