进程与资源管理篇——《linux使用lsof恢复误删除的nginx日志》


# 1.确保nginx在运行中,有日志数据
[root@localhost ~]# tail -f /var/log/nginx/access.log
[root@localhost fd]# ps -ef | grep nginx
root       1791      1  0 19:25 ?        00:00:00 nginx: master process nginx
nginx      1792   1791  0 19:25 ?        00:00:00 nginx: worker process
root       6657   1577  0 21:08 pts/0    00:00:00 tail -f /var/lognginx/access.log
root       6743   5565  0 21:09 pts/1    00:00:00 grep --color=auto nginx

# 2.lsof查看关于该日志文件的进程
[root@localhost fd]# lsof | grep /var/log/nginx/access.log
nginx     1791         root    5w      REG              253,0     27126   33639567 /var/log/nginx/access.log (deleted)
nginx     1792        nginx    5w      REG              253,0     27126   33639567 /var/log/nginx/access.log (deleted)
tail      6657         root    3r      REG              253,0     27126   35221510 /var/log/nginx/access.log

# 3.模拟误删该文件
[root@localhost fd]# rm -f /var/log/nginx/access.log
[root@localhost fd]# ll /var/log/nginx/access.log
ls: cannot access /var/log/nginx/access.log: No such file or directory

# 4.再次查看该日志文件描述符(多了deleted被删除的标记)

# 5.进入Linux中管理所有进程的目录/proc,找到对应进程id目录(父亲进程id)
[root@localhost fd]# cd /proc

# 6.进入管理文件描述符的地方


# 7.看到的5个软链接文件,就对应刚才的access.log日志文件,恢复该文件描述符的数据,到日志文件即可完成文件恢复
[root@localhost fd]# cat 5 > /var/log/nginx/access.log