使用lsof实现对linux文件的误删除恢复练习

描述

  本文记录使用lsof实现对linux文件的误删除恢复练习。题目如下:

  1.确保当前nginx进程运行中

  2.删除日志文件,rm -f /var/log/nginx/access.log

  3.以lsof命令的帮助,恢复该日志数据

Linux

确保当前nginx进程运行中

[root@master10 ~]# systemctl status nginx

Linux

查看nginx日志文件

[root@master10 ~]# tail /var/log/nginx/access.log

Linux

模拟误删日志文件

[root@master10 ~]# rm -f /var/log/nginx/access.log
[root@master10 ~]# tail /var/log/nginx/access.log
tail: cannot open ‘/var/log/nginx/access.log’ for reading: No such file or directory

以lsof命令的帮助,恢复该日志数据

1.lsof查看关于该日志的进程

[root@master10 ~]# lsof | grep /var/log/nginx/access.log
nginx     1439         root    5w      REG              253,0      1524   17117944 /var/log/nginx/access.lo (deleted)
nginx     1440        nginx    5w      REG              253,0      1524   17117944 /var/log/nginx/access.lo (deleted)
nginx     1441        nginx    5w      REG              253,0      1524   17117944 /var/log/nginx/access.lo (deleted)

可以看到,nginx主进程号为1439,因为nginx进程没有退出,该文件描述符还未被释放,所以还是可以恢复的,仔细看行末文件名多了一个deleted被删除的标记

2.此时进入linux中一个管理所有进程的目录,/proc,找到对应的进程id目录(父亲进程id),进入其管理文件描述符的地方。

[root@master10 fd]# cd ~
[root@master10 ~]# cd /proc/1439/fd
[root@master10 fd]# ll
total 0
lrwx------. 1 root root 64 Aug  9 17:26 0 -> /dev/null
lrwx------. 1 root root 64 Aug  9 17:26 1 -> /dev/null
lrwx------. 1 root root 64 Aug  9 17:26 10 -> socket:[22591]
l-wx------. 1 root root 64 Aug  9 17:26 2 -> /var/log/nginx/error.log
lrwx------. 1 root root 64 Aug  9 17:26 3 -> socket:[22588]
l-wx------. 1 root root 64 Aug  9 17:26 4 -> /var/log/nginx/error.log
l-wx------. 1 root root 64 Aug  9 17:26 5 -> /var/log/nginx/access.log (deleted)
lrwx------. 1 root root 64 Aug  9 17:26 6 -> socket:[22522]
lrwx------. 1 root root 64 Aug  9 17:26 7 -> socket:[22523]
lrwx------. 1 root root 64 Aug  9 17:26 8 -> socket:[22589]
lrwx------. 1 root root 64 Aug  9 17:26 9 -> socket:[22590]

 

 

Linux


3.我们看到的这个5软连接文件,就是对应的刚刚误删掉的access.log文件,使用cat命令查看5

Linux


4.恢复此文件描述符的数据,到日志文件即可完成文件恢复

[root@master10 fd]# cat 5 > /var/log/nginx/access.log
[root@master10 fd]# cat /var/log/nginx/access.log

Linux

链接:https://www.cnblogs.com/funlyp/p/18351218

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分