linux手误rm后恢复文件

误删文件还原可以分为两种情况

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

今天只分析文件被删除后,相关进程还存在的情况

这种一般是有活动的进程存在持续标准输入或输出,到时文件被删除后,进程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:inotif

开始恢复文件

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

能恢复的根本原因

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

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/9835

(1)
郭靖的头像郭靖
上一篇 2023年10月16日 下午10:28
下一篇 2023年10月18日 下午3:11

相关推荐

  • Cisco交换机密码忘记重置

          原理:进入交换机底层,通过修改交换机原始配置文件名字,重启交换机后,交换机找不到原来配置文件情况下,就会加载默认系统文件(即:交换机出厂配置),以达到清除交换机密码的目的。 步骤一:用笔记本通过控制线连接到交换机com口,打开超级终端调试窗 步骤二:交换机重新上电,上电过程中,按住交换机正面”m…

    2024年6月18日
    1.7K00
  • PVE8开启vgpu显卡虚拟化(基于Tesla P4)

    Tesla系列显卡真是垃圾佬的福音,很久以上上万的卡,现在几百块就能收到,不仅可以炼丹,还可以玩游戏,甚至可以给PVE用作vgpu,来实现云桌面,云游戏。博主先后买过P40和P4,面对250W功耗的24G显存的P40,显然它更适合炼丹,P4 TDP 75W,1060的性能表现,它的最佳用途其实不是个人桌面的游戏显卡,而是虚拟化云主机使用,而搭配上一台低功耗主…

    2024年2月26日
    2.7K00
  • Centos7升级内核后无法启动解决办法:mpt[23]sas驱动问题

    entOS 7.* 从内核 3.10.0 升级到 5.*.*后,重启不了,原因是 Linux 内核 4.4.x 版本之后,dracut 命令生成的 initramfs 默认不会自动加载 mpt3sas 驱动模块。因为没有对应的驱动程序,所以识别不了系统盘 1. 查询3.10.0 initramfs的驱动 可以看到在3.10内核的时候是mpt2sas…

    2023年5月6日
    1.8K00
  • apache 设置ssl证书

    安装模块 安装mod_ssl和openssl 创建密钥存放的目录 上传证书和密钥到/etc/httpd/ssl目录下 验证证书和密钥的MD5 编辑配置文件 修改ssl.conf文件 打开ssl模块功能 在 /etc/httpd/conf.modules.d 目录下的 00-ssl.conf 配置文件找到 LoadModule ssl_module modul…

    2022年11月29日
    1.2K00
  • pve系统崩溃,ceph集群节点不能加入问题处理

    本次故障缘起,pve系统盘突然坏了,导致ceph集群降级,重装pve系统后,发现ceph不能加入原有的集群,需要清除所有配置才可完成 首先需要从集群中删除故障ceph ceph的配置文件路径 /etc/ceph/ceph.conf 此次故障的节点是pve3,在一个正常的节点配置文件中删除故障的节点 同时需要在web页面 监视器中销毁之前故障的节点 osd销毁…

    2024年4月2日
    1.5K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信