对于在linux系统下误删除的文件,我们是否真的无法通过软件进行恢复呢?
文件恢复可以分为两种情况
- 一种是删除后进程仍然存在删除信息
- 另一种是删除后进程都找不到,只能借助工具进行恢复。
今天我们只讨论文件被删除后,相关进程仍然存在的情况
“
这种情况通常是有活动的进程持续进行标准输入或输出,导致文件被删除后,进程PID仍然存在。这也是有些服务器删除某些文件但磁盘空间不释放的原因。
”
已收到消息. 对于在linux系统下误删除的文件,我们是否真的无法通过软件进行恢复呢? ### 文件恢复可以分为两种情况 – 一种是删除后进程仍然存在删除信息 – 另一种是删除后进程都找不到,只能借助工具进行恢复。 ### 今天我们只讨论文件被删除后,相关进程仍然存在的情况 > 这种情况通常是有活动的进程持续进行标准输入或输出,导致文件被删除后,进程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:inotify
登录后复制
“
开始恢复文件
”
> cp 3 /root/test/rumenz.txt > cat /root/test/rumenz.txt 123
登录后复制
能恢复的根本原因
“
当程序运行时,操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当我们执行rm -f删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用I/O重定向的方式来恢复文件。
”
以上就是Linux手误rm可能不需要跑路的详细内容,更多请关注小闻网其它相关文章!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)