Linux rm -rf 删除文件恢复测试

ops/2024/12/13 14:44:33/

   前几天一个北京的朋友给我发信息,让我帮他们推荐一个DBA,我就把曾经的一个前同事给推荐过去了,前同事事后跟我说那边5个人同时面试他,问了很多问题,其中问了一个rm 删除文件如何恢复,他没回答好。我说我记得曾经看过一篇文章介绍如何恢复,但对这位前同事说的这个事也没太上心,也没多去查什么资料,就这么过去了。

  促成我今天写这篇文章的原因是就在今天下午刚刚不久前也是一个北京的朋友问我rm -rf 删除文件了,该如何恢复,这朋友之前搞了好多年SqlServer,对于Linux这块也是接触时间不长,我想还是别直接把网上查询的东西就丢给这朋友,自己亲测一会才最好,所以才促成写下这篇文章。

        我找来一台测试服务器,模拟删除一个文件。以下是测试过程。

1、模拟删除

[root@redis-3 home]# pwd
/home
[root@redis-3 home]# ls -lrt
total 12
drwx------ 2 zabbix        zabbix        4096 Mar 31  2021 zabbix
drwx------ 2 root          root          4096 Mar 31  2021 admin
drwx------ 3 elasticsearch elasticsearch 4096 Aug 10  2021 elasticsearch# 拷贝一文件至 /home目录
[root@redis-3 home]# cp -p /usr/local/redis_cluster/redis_6379/logs/redis_6379.log /home# 另打开一会话模拟查看该文件的进程操作
[root@redis-3 home]# tail -10f redis_6379.log
2467:M 13 May 2022 17:16:01.897 * 1 changes in 900 seconds. Saving...
2467:M 13 May 2022 17:16:01.898 * Background saving started by pid 27958
27958:C 13 May 2022 17:16:01.904 * DB saved on disk# 然后执行rm -rf 删除该文件
[root@redis-3 home]# rm -rf redis_6379.log
[root@redis-3 home]# ls -lrt redis_6379.log
ls: cannot access redis_6379.log: No such file or directory

2、模拟恢复

# 使用lsof 命令查看是否有进程打开redis_6379.log文件
[root@redis-3 home]# lsof |grep delete|grep redis
tail      31380             root    3r      REG              253,0      10220     263710 /home/redis_6379.log (deleted)# 从上面可看到该文件状态为已删除(delete)状态# 查看/proc 下是否存在恢复数据
[root@redis-3 home]# cd /proc/31380/fd                # /proc/31380/fd 为进程操作的文件描述目录
[root@redis-3 fd]# ll
total 0
lrwx------ 1 root root 64 May 25 14:32 0 -> /dev/pts/2
lrwx------ 1 root root 64 May 25 14:32 1 -> /dev/pts/2
lrwx------ 1 root root 64 May 25 14:32 2 -> /dev/pts/2
lr-x------ 1 root root 64 May 25 14:32 3 -> /home/redis_6379.log (deleted)              # 此处的 3 代表文件描述符,使用ls 命令的时候可以看到后面的信息在不停的闪烁
lr-x------ 1 root root 64 May 25 14:32 4 -> anon_inode:inotify# 使用I/O文件重定向恢复文件
[root@redis-3 fd]# cat /proc/31380/fd/3 > /home/redis_6379.log# 查看恢复后的文件是否存在
[root@redis-3 fd]# ls -lrt /home/redis_6379.log
-rw-r--r-- 1 root root 10220 May 25 14:41 /home/redis_6379.log# 至此文件已恢复

  此种场景的恢复适合有进程在rm -rf 时存在,若没有进程存在,直接执行rm -rf 后 通过lsof 查询不到相关信息,无法恢复。

  后续如有更复杂场景,待继续测试。


http://www.ppmy.cn/ops/141562.html

相关文章

Linux 升级 openssh 方法步骤

目录 一:OpenSSH 介绍二:升级 OpenSSH1、下载源码包2、查看当前安装位置3、上传源码包4、生成Makefile文件5、编译并安装6、重启ssh服务7、检查版本信息 一:OpenSSH 介绍 OpenSSH最初是作为OpenBSD系统项目的一部分而开发的,后面…

CSS系列(10)-- 过渡与动画详解

前端技术探索系列:CSS 过渡与动画详解 ✨ 致读者:探索动态视觉体验 👋 前端开发者们, 今天我们将深入探讨 CSS 过渡与动画,学习如何创建流畅、优雅的动态效果。 过渡效果详解 🚀 基础过渡 /* 过渡基础…

如何创建一个基本的Spring Boot应用程序

以下是一个简单的Spring Boot应用开发代码示例,它展示了如何创建一个基本的Spring Boot应用程序,并实现一个简单的RESTful API服务。 步骤1:创建项目 使用Spring Initializr或您喜欢的IDE(如IntelliJ IDEA或Eclipse)…

STM32F103单片机使用STM32CubeMX创建IAR串口工程

打开stm32cubeMX,选择新建工程 输入单片机型号,在下面选中具体型号,然后点右上角 开始工程 第一步设置 调试接口,否则生成的工程就会下载不到单片机中,使用stlink或者jlink的话,在debug选项中直接选择ser…

畅捷通T-Plus ajaxpro存在SQL注入漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…

MMSegmentation 0基础入门

本文是看了子豪兄视频以后做的笔记,子豪兄视频,子豪兄笔记 MMSegmentation是语义分割框架,优点是用这一个框架能跑很多模型,且配置统一,一个数据集跑所有算法。 1-标注数据集 这部分看视频即可,重点就是需要转为掩码…

【LLM】NSSCTF Round#25 Basic大模型Prompt挑战全解

目录 大模型Prompt挑战一 大模型Prompt挑战二 大模型Prompt挑战三 大模型Prompt挑战四 大模型Prompt挑战五 大模型Prompt挑战六 大模型Prompt挑战七 大模型Prompt挑战八 大模型Prompt挑战九 大模型Prompt挑战一 大模型Prompt挑战二 大模型Prompt挑战三 大模型…

Linux相关概念和易错知识点(24)(认识信号、信号捕捉)

目录 1.认识信号 (1)后台进程和前台进程 ①为什么Ctrl C能终止前台进程? ②如何终止这个后台程序? (2)信号、异步和同步 ①同步 ②异步 (3)信号的处理 2.信号捕捉 &#x…