欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Linux rm -rf 删除文件恢复测试

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

2025/2/23 14:32:22 来源:https://blog.csdn.net/shlei5580/article/details/144418165  浏览:    关键词:Linux rm -rf 删除文件恢复测试

   前几天一个北京的朋友给我发信息,让我帮他们推荐一个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 查询不到相关信息,无法恢复。

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词