文件删除后且被进程占用如何找回

在执行该操作时应该搞明白文件删除的原理与符号链接和硬链接的知识

inode/block区别及解释

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里面,当该文件存在硬链接或进程正在被调用的情况下只删除源文件是删除不了的,如果要删除,就必须在该文件无运行进程时将文件的所有硬链接删除掉,这样才会被真正删除掉,

创建测试环境如下

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

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

查找系统调用进程文件:

[[email protected] /]# 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

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

[[email protected] /]# lsof|grep del

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

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

[[email protected] /]# 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目录下可恢复文件

[[email protected] /]#cp /proc/3247/fd/3 /root/a.txt

[[email protected] /]# ll /root/a.txt

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

时间: 2024-12-25 04:46:40

文件删除后且被进程占用如何找回的相关文章

恢复HDFS文件删除后的方法

HDFS 为我们提供了垃圾箱的功能,也就是当我们执行 hadoop fs -rmr xxx 命令之后,文件并不是马上被删除,而是会被移动到执行这个操作用户的 .Trash 目录下,等到一定的时间后才会执行真正的删除操作. 如下所示: $ sudo -uiteblog hadoop fs -rmr /user/iteblog/test.txt Moved: 'hdfs://iteblogcluster/user/iteblog/test.txt' to trash at: hdfs://itebl

【C#】判断文件是否正在被其他进程占用

public bool IsFileInUse() { bool inUse = true; StreamWriter kf_total_SW = null; try { kf_total_SW = new StreamWriter(knpath, true); inUse = false; } catch { } finally { if (kf_total_SW != null) kf_total_SW.Close(); } if (inUse) MessageBox.Show("文件被占用

【WPF】释放图像资源, [删除时报另一进程占用]

源:zhantianyou CODE private BitmapImage ReturnBitmap(string destFile) { // Read byte[] from png file BinaryReader binReader = new BinaryReader(File.Open(destFile, FileMode.Open)); FileInfo fileInfo = new FileInfo(destFile); byte[] bytes = binReader.Re

文件删除详解

第1章 创建文件的时候提示no space left to device的解决办法 1.1 inode被用完. 模拟环境: [[email protected] ~]# dd if=/dev/zero of=/dev/test count=10 bs\=10M 10+0 records in 10+0 records out 104857600 bytes (105 MB) copied, 0.303514 s, 345 MB/s [[email protected] ~]# mkfs.ext4

安利一款好的文件删除恢复软件——360文件恢复

估计大多数人都遇到过错手删除了重要文件的情况,所以电脑常备一款数据恢复软件是很有必要的.不过数据恢复软件实在太多,如果只是备用,那么选择体积小巧免费且绿色的会比较合适. 今天推荐的数据恢复工具是集成在360安全卫士中的小软件--360文件恢复.这是为不喜欢安装360卫士的朋友特意分离出来的单独版,软件完全绿色,可以独立运行使用.360文件恢复支持快速扫描硬盘.SSD.U盘.存储卡等载体中被误删除文件,并将它们恢复回来,而且使用非常简单直观.有了它,即便回收站被清空你的文件还是有后悔的机会-- 3

U盘文件删除怎么恢复?仅需几招全搞定

U盘文件删除怎么恢复?一般来说U盘的大部分相关操作都是借助于电脑来完成的,不知道各位是否知道,U盘文件删除后是不会经过回收站这一程序的,那么对于U盘中未备份的文件删除了该怎么恢复呢? 要恢复U盘中删除的文件,那么更多的时候都是借助到数据恢复软件来进行相关的操作,如果之前有进行过备份的话那就不用多说,下面就来给那些未备份的用户提供如何恢复的方法吧. 第一步:在常用的电脑浏览器搜索[互盾数据恢复软件]的安装包,然后下载安装至电脑上,随后将U盘连接至电脑上,点击[立即体验]按钮运行该软件.(U盘连接至

在windows系统中解决进程占用文件夹导致文件夹无法删除的问题

在日常使用中,我们常常碰到文件夹被进程占用,导致资源锁定无法删除的情况. 碰到这种情况一般是在任务管理器里面,搜索句柄找到关联的句柄,从而定位是哪些进程占用了待删除的文件夹或文件. 但是一旦需要在程序中删除资源,事情就不那么好办了. 微软本身提供的cmd命令中不包含通过句柄搜索进程的命令,此时可以利用windows平台上的第三方工具来解决这个问题. 连接如下: https://docs.microsoft.com/zh-cn/sysinternals/downloads/handle 在程序中运

C# 中使用Image.FromFile(string path)后,提示该文件正在被另一进程使用XXX的问题

C# 中使用Image.FromFile(string path)后,提示该文件正在被另一进程使用XXX的问题,是因为对应的文件在一直调用 ,其生成的Image对象被Disponse()前都不会被解除锁定,这就造成了此问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等操作). 此问题可以使用下面三个方法解决问题. 方法1:在要进行文件操作前将Image对象销毁. System.Drawing.Image image = System.Drawing.Image.FromFile(f

Oracle数据文件物理删除后的恢复

做系统管理的都是这样,难免会误删文件,某天要是把某个Oracle数据文件删除,那该如何恢复呢?(这里数据库是OPEN的,并且未关闭) 建立测试表空间 创建测试用户 插入测试数据 删除数据文件 恢复数据库文件 建立测试表空间 SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- /opt/oracle/oradat