如何使用lsof命令恢复删除的文件

在Linux文件系统中,文件名实际是指向索引节点"inode"的链接。Linux创建文件系统后,就会生成inode表,inode索引节点会包含文件的属性、block块的指针等信息关于inode介绍看我这篇博文
当使用"rm"命令删除某文件时,只是删除了指向inode索引节点的链接,但是没有删除inode索引节点,也就是说inode所指向的block块中所存放的数据并没有被删除。其它进程仍然可以使用此inode索引节点所指向的数据。若是一个inode索引节点没有任何进程调用,也没有任何文件名链接时,就会定时被系统回收这部分存储空间。

"lsof"命令用于查看系统中进程打开的文件、打开文件的进程、进程打开的端口(TCP、UDP)。所以当我们使用"rm"命令删除某个文件时,可以通过"lsof"命令来查看是否还有进程调用此文件的inode索引节点。若是有,就可以恢复;若是没有,哭吧。因为"lsof"命令需要访问核心内存和各种文件,所以需要root用户执行。

语法:
lsof(选项)

参数:
-a:列出打开文件存在的进程; 
-c<进程名>:列出指定进程所打开的文件; 
-g:列出GID号进程详情; 
-d<文件号>:列出占用该文件号的进程; 
+d<目录>:列出目录下被打开的文件; 
+D<目录>:递归列出目录下被打开的文件; 
-n<目录>:列出使用NFS的文件; 
-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip ) 
-p<进程号>:列出指定进程号所打开的文件; 
-u:列出UID号进程详情; 
-h:显示帮助信息; 
-v:显示版本信息。

比如要查看22端口有哪些进程在访问:
在这里插入图片描述
losf输出各列信息的意义如下:

  • COMMAND:进程名称
  • PID:进程标识符
  • USER:进程所有者
  • FD:文件描述符,应用程序通过文件描述符识别该文件
  • TYPE:文件类型;常见的有"DIR"表示目录、"CHR"表示字符类型、"IPV4"表示网际协议套接字
  • DEVICE:指定磁盘的名称
  • SIZE./OFF:文件的大小
  • NODE:索引节点
  • NAME:打开文件的确切名称

恢复文件
下面和大家分享一下如何恢复文件,我拿"/var/log/messages"日志文件来举例;大家自己在做测试的时候做好现备份一下。
第一步:备份文件
在这里插入图片描述
第二步:在进程调用"/var/log/messages"时,就把"/var/log/messages"这个文件删掉
在这里插入图片描述
在这里插入图片描述
第三步:删除"/var/log/messages"文件之后,再来看看进程的变化
在这里插入图片描述
大家可以看到原来调用"/var/log/messages"文件的进程发生了变化,提示信息后面多了"deleted"。要找到"/var/log/messages"现在在哪里,还要看看这个"PID:900 FD:4 “,于是我们就进入”/proc/900/fd"这个目录中查看有哪些文件:
在这里插入图片描述
我们看到了有一个名称为"4"的文件是指向"/var/log/messages"的链接,于是我们可以通过文件名为"4"的内容恢复"/var/log/messages"的文件内容:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值