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

相关推荐

  • linux 查看当前有多少个 ssh 连接,并且列出具体信息

    要查看当前有多少个SSH连接并列出具体信息,可以使用以下命令: 该命令将显示所有连接的详细信息,包括用户名、终端、登录日期和时间等。 另外,也可以使用以下命令列出当前连接的信息: 这个命令会显示当前登录到系统的用户的信息,以及每个用户正在运行的进程。通过查看输出,你可以获取到SSH连接的相关信息。

    2023年9月7日
    3.2K00
  • 通过配置hosts.allow和hosts.deny限制登陆

    我们通常只对管理员开放SSH登录,那我们就可以禁用不必要的IP,而只开放管理员可能使用到的IP段。 /etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务。 我们通常只对管理员开放SSH登录,那我们就可以禁用不必要的IP,而只开放管理员可能使用到的I…

    2022年11月15日
    2.1K00
  • lscpu 查看 CPU 信息

    lscpu 显示 CPU 的架构信息 lscpu 从 sysfs 和 proc/cpuinfo 中收集信息。这个命令的输出是规范的可以用来解析,或者给人来阅读。该命令显示的信息包括,CPU 的数量,线程 (thread),核心 (core),Socket 还有 Non-Uniform Me…

    2023年9月25日
    1.5K00
  • CentOS 添加(永久)静态路由的方法总结

    一、使用 route 命令加入临时路由,重启后将失效 route 命令参数: 二、在 Linux 中添加永久路由的方法 1. 默认网关 (1)写入 ifcfg 文件(推荐) vi /etc/sysconfig/network-scripts/ifcfg-eth0 在配置 ip 地址的时候直接将 GATEWAY 的配置写入 ifcfg 文件。形式:GATEWA…

    2023年9月5日
    1.5K00
  • nginx快速部署一个网站服务 + 多域名 + 多端口

    一、nginx虚拟主机,部署网站 都是在同一台服务器上部署 二、部署单域名/IP网站服务 1、创建一个普通用户,用户管理nginx网站服务 2、修改nginx主配置文件 3、创建虚拟主机nignx子配置文件 只需要写server{}标签即可。 上面配置文件中配置了index.html的地址,这里可以看到是没有的,我们创建一下; 4、测试nginx配置文件语法…

    2023年12月25日
    1.5K00

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信