一、linux误删除数据的场景

在实际的工作中,朋友们可能会将linux服务器上的文件不小心误删除掉了。而且越是资历老的工程师越容易犯这样的错误,敲代码的速度也是够快,啪啪rm -rf一个回车,然后就是打脸时刻 。新人操作文件时往往战战兢兢、反复确认,反而不容易出错。如果你也是一个有多年工作经验的工程师,也给自己提个醒:淹死的都是会水的。我们需要区分两种场景来进行误删除文件的恢复:

  • 第一种场景:被删除的文件正在被进程使用
  • 第二种场景:文件没有被任何进程使用

第一种场景的数据恢复相对简单一些。

二、场景一数据恢复实验

第一种场景:被删除的文件正在被其他进程使用。我们先创建一个独立目录testdel,用于完成我们的实验。然后使用echo命令创建一个文件test-recovery.txt,放在testdel目录下,文件内容是:"test file delete recovery"。重点来了:我们使用命令tail来一直监听这个文件,表示这个文件一直被tail进程监听占用。

$ mkdir ./testdel;
$ echo "test file delete recovery"  > ./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 (deleted)被删除了,但是其存在一个进程tail使用它,tail进程的进程编号是1535。

$ lsof | grep test-recovery.txt;
tail      1535        kafka    3r      REG  253,2        26  34095906 /home/kafka/testdel/test-recovery.txt (deleted)

然后我们使用cd /proc/1535/fd命令进入该进程的文件目录下,1535是tail进程的进程id,这个文件目录里包含了若干该进程正在打开使用的文件。

我们看到文件名为3的文件,就是我们刚刚“误删除”的文件,所以我们使用下面的cp命令把它恢复回去。至此,有进程引用的文件误删除恢复就完成了。

cp ./3 /home/kafka/testdel/test-recovery.txt;

三、场景二数据恢复

对于场景二,没有程序使用该文件,则该文件被删除之后进行文件恢复就稍微麻烦一些了。首先我们要区分当前操作系统挂载的磁盘目录的文件格式,比如:执行cat /etc/fstab得到如下的结果

除了xfs磁盘文件格式,linux常用的还有ext4的磁盘文件格式。每种磁盘文件格式,数据恢复的方式,使用到的工具都是不一样的。鉴于篇幅的问题,我就不在本文中介绍了,请关注我我会继续更新!

四、深入-为什么数据可以恢复?

第一种情况:当某个文件正在被某个程序使用时,linux针对该文件有两个计数器

  • i_count计数器:该文件可能被多个进程使用,每一个进程使用该文件,i_count数值都会加1。反之,进程释放该文件的引用,则该计数器减1
  • i_nlink作用是记录该文件产生的硬链接的次数(在linux种可以使用ln命令创建文件的硬链接)。

当以上两个计数器都为0的时候,该文件实际上就是属于没有进程使用它的状态,就直接被删除掉了。如果有进程使用它,那么该文件的i_count数值不为0,就可以在/proc/<进程id>/fd目录种找回来

第二种情况:此时没有进程使用被删除的文件,被删除的文件的两个计数器i_count和i_link此时都为0。这个时候我们要理解一个概念

https://www.36dianping.com/vs/d73n.html
https://www.36dianping.com/vs/bucm.html
https://www.36dianping.com/vs/d73o.html
https://www.36dianping.com/vs/d73p.html
https://www.36dianping.com/vs/d73q.html
https://www.36dianping.com/vs/d73r.html
https://www.36dianping.com/vs/d73s.html
https://www.36dianping.com/vs/d73t.html
https://www.36dianping.com/vs/d73u.html
https://www.36dianping.com/vs/d73v.html
https://www.36dianping.com/vs/d73w.html
https://www.36dianping.com/vs/d73x.html
https://www.36dianping.com/vs/d73y.html
https://www.36dianping.com/vs/d73z.html
https://www.36dianping.com/vs/d730.html
https://www.36dianping.com/vs/d731.html
https://www.36dianping.com/vs/d732.html
https://www.36dianping.com/vs/d733.html
https://www.36dianping.com/vs/d734.html
https://www.36dianping.com/vs/d735.html
https://www.36dianping.com/vs/d736.html
https://www.36dianping.com/vs/d737.html
https://www.36dianping.com/vs/d738.html
https://www.36dianping.com/vs/d739.html
https://www.36dianping.com/vs/d74a.html
https://www.36dianping.com/vs/d74b.html
https://www.36dianping.com/vs/d74c.html
https://www.36dianping.com/vs/wqg.html
https://www.36dianping.com/vs/d74d.html
https://www.36dianping.com/vs/d74e.html
https://www.36dianping.com/vs/d74f.html
https://www.36dianping.com/vs/d74g.html
https://www.36dianping.com/vs/d74h.html
https://www.36dianping.com/vs/d74i.html
https://www.36dianping.com/vs/d74j.html
https://www.36dianping.com/vs/d74k.html
https://www.36dianping.com/vs/d74l.html
https://www.36dianping.com/vs/d74m.html
https://www.36dianping.com/vs/d74n.html
https://www.36dianping.com/vs/d74o.html
https://www.36dianping.com/vs/d74p.html
https://www.36dianping.com/vs/d74q.html
https://www.36dianping.com/vs/wo2.html
https://www.36dianping.com/vs/d74r.html
https://www.36dianping.com/vs/d74s.html
https://www.36dianping.com/vs/d74t.html
https://www.36dianping.com/vs/d74u.html
https://www.36dianping.com/vs/d74v.html
https://www.36dianping.com/vs/d74w.html
https://www.36dianping.com/vs/d74x.html
https://www.36dianping.com/vs/d74y.html
https://www.36dianping.com/vs/d74z.html
https://www.36dianping.com/vs/d740.html
https://www.36dianping.com/vs/d741.html
https://www.36dianping.com/vs/d70w.html
https://www.36dianping.com/vs/d742.html
https://www.36dianping.com/vs/d743.html
https://www.36dianping.com/vs/d747.html
https://www.36dianping.com/vs/d748.html
https://www.36dianping.com/vs/d749.html
https://www.36dianping.com/vs/d75a.html
https://www.36dianping.com/vs/d75b.html
https://www.36dianping.com/vs/d75c.html
https://www.36dianping.com/vs/d75d.html
https://www.36dianping.com/vs/d75e.html
https://www.36dianping.com/vs/d75f.html
https://www.36dianping.com/vs/d75g.html
https://www.36dianping.com/vs/d75h.html
https://www.36dianping.com/vs/d75i.html
https://www.36dianping.com/vs/d75j.html
https://www.36dianping.com/vs/d75k.html
https://www.36dianping.com/vs/d75l.html
https://www.36dianping.com/vs/d75m.html
https://www.36dianping.com/vs/d75n.html
https://www.36dianping.com/vs/d75o.html
https://www.36dianping.com/vs/d75p.html
https://www.36dianping.com/vs/d75q.html
https://www.36dianping.com/vs/d75r.html
https://www.36dianping.com/vs/d75s.html
https://www.36dianping.com/vs/d75t.html
https://www.36dianping.com/vs/d75u.html
https://www.36dianping.com/vs/d75v.html

  • 操作系统文件删除:操作系统层面的删除文件,只是删除文件的inode信息。删除inode信息之后,该文件对于操作系统及操作系统的用户不可见了。
  • 磁盘文件物理删除:我们知道物理磁盘是由一个个数据块组成的,所以如果想恢复文件,我们需要找到存放文件的数据块block单元,真正在磁盘上存储文件的block暂时并未被删除(准确的说是暂时并未被覆盖)。

需要注意的是:存放数据块block单元的文件内容会一直存在么?答案是否定的,因为该数据块的内容被删除了,所以该数据块是可以被其他进程重新利用写入数据的。所以,当你发现你误删除了非常重要的文件时,你需要做的第一件事就是将磁盘从操作系统中unmout,或者停止所有进程向磁盘中写数据。因为写作数据操作,可能会占用覆盖你"误删除文件"所在数据块,一旦数据块被写的数据写入覆盖,你的数据文件就再也找不回来了。

推荐阅读:《java并发编程》

欢迎关注我的博客,更多精品知识合集

本文转载注明出处(必须带连接,不能只转文字):字母哥博客 - zimug.com

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力!。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

linux系统下文件误删除该如何恢复?相关推荐

  1. Linux系统下文件与目录操作讲解

    Linux系统下文件与目录操作 在Linux系统中有一句话叫做,一切皆文件.上节我们说的I/O操作,对于普通I/O操作,都是打开.读写.关闭.这节我们通过stat结构体来了解文件的一些基本信息和本质特 ...

  2. linux 默认文件属性,linux系统下文件的默认权限以及隐藏属性的作用

    [摘要] 操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次序.控制输入设备与输出设备.操作网络与 ...

  3. linux系统下文件查找

    在我们实际应用中,经常需要查找某个特定的文件,或者根据文件的某个特定属性进行查找,今天小菜就给大家分享一下,linux系统下文件查找的两大利器:  1,locate:非实时查找(基于预先生成的数据库查 ...

  4. Linux系统下文件与目录操作

    Linux系统下文件与目录操作  与其它操作系统一样,在Linux系统下用户的数据和程序也是以文件的形式保存的.所以在使用Linux的过程中,是经常要对文件与目录进行操作的.现在我们就以一个Windo ...

  5. Linux系统下文件字体乱码的解决方案

    在Linux系统下经常会遇到从网上下载的文件,打开是乱码的情况,尤其是含有中文字符的txt文件或者是一些后缀为 .srt..ass的字幕文件,其原因大多是因为这些文件的编码格式为gb18030编码格式 ...

  6. linux 文件目录操作,Linux系统下文件与目录操作

    与其它操作系统一样,在Linux系统下用户的数据和程序也是以文件的形式保存的.所以在使用Linux的过程中,是经常要对文件与目录进行操作的.现在我们就以一个Window用户的立场来学习一下Linux下 ...

  7. linux系统下文件的上传和下载(rz、sz)

    linux系统下的rz.sz上传和下载 rz 是从本地上传文件的时候用的, sz 相当于把Linux 服务器上的文件 下载到 本地. 通过这两个命令就可以把 Windows 和Linux 的文件 进行 ...

  8. linux系统下文件命令详解

    /etc 目录下包含的用户信息文件有: 3.1.0 passwd: 用户库文件 用户名 UID,GID 和工作目录都在此文件中 Shadow:存放用户口令的文件,每个用户的 口令加密后都放在此文件中 ...

  9. Linux 系统下文件压缩解压

    Linux 系统压缩&解压文件 压缩永远是针对于一个独立文件进行的,一个文件夹(某目录下文件)想要进行压缩首先要进行打包,打包成一个文件,所以在 Windows 下常说的压缩是打包与压缩的总称 ...

  10. linux服务器编码怎么查看器,Linux系统下文件编码的查看与转换方法

    如果你需要在Linux 中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在L ...

最新文章

  1. nginx反向代理,负载均衡
  2. Debugging JTAG
  3. javascript,继承,封装
  4. c语言静态图片做成动态效果,如何使静态图片做成动态效果?怎么让静态图片动起来...
  5. php mysql 框架_Medoo 轻量级的 PHP 数据库框架 - 文章
  6. C语言实现lu分解lu decompose算法(附完整源码)
  7. 64位ubuntu 12.04下如何解决中文乱码的问题
  8. 046 实例11-自动轨迹绘制
  9. 类变量和实例变量的区别是什么?
  10. onmouseover-onmouseout
  11. 转list_quot;quot;转 Int,{} 转 List,还有什么奇葩的 JSON 要容错?| 实战
  12. u-boot移植随笔:u-boot技巧二则
  13. RocketMQ 集群部署模式 理论介绍
  14. IDEA注释模板配置
  15. hpm1216nfh驱动程序_惠普m1216nfh
  16. Focus事件与blur事件
  17. Ubuntu下,Kdevelop的简单使用与调试
  18. 在计算机应用领域中深蓝,2015年计算机二级MS Office习题及答案解析(13)
  19. 顶部提示数据信息~echarts奇奇怪怪系列
  20. java模拟一个军队作战,()系统在作战过程中帮助指挥和参谋人员实施各项作战业务,辅助指挥人员对部队和武器实施指挥控制...

热门文章

  1. 关于字体的px和pt
  2. 常用十六进制颜色对照表代码查询
  3. mysql repair table_mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)
  4. c语言利用公式求sin(x)的近似值,用下列公式计算sin(x)的近似值
  5. Mysql数据库内的索引操作【重点】
  6. openwrt中br-lan,eth0,eth0.1,eth0.2
  7. newifi3刷机 php,newifi3breed解锁新路由3刷机免解锁刷breed详细方法老毛子Padavan固件...
  8. 自考启示,关于不紧急重要到紧急重要的改变
  9. pip install scikit-image安装失败,而且通过transform.rescale(img,0.6)时,原图像的通道数3变为2了,怎么解决?
  10. Java微信如何自动添加好友,微信自动加好友 模拟位置