nginx配置文件恢复
贵司有个小伙伴,敲命令不过脑子,结果把一个服务器的给
1 | sudo rm -rf * |
虽然很快就按ctrl+c来取消了,但是删除了哪些他根本就不知道,刚好这个机器还没在定时备份策略里。
看来只能手动恢复了。
先登录服务器上执行
1 | sudo lsof |grep delete |
一眼就看见了一个nginx就被删除了,根据上一篇文章,我们知道这种还在被进程调用的删除可以很快的恢复,直接
1 | cp /proc/pid/exe /opt/server/nginx/sbin/ngin |
这样进程文件就很快恢复了。可里面的配置呢,这个配置文件可没在/proc/pid/fd/下有显示,是进程启动的时候从磁盘上读入到内存里的。
我们看到fd只有各种socket或者打开的日志文件。
所以我们就从内存里去找吧。首先还要安装gdb工具。
1 | sudo yum install gdb -y |
这里要记住第一列值,然后我们使用gdb工具来导出这段内存里的数据
1 | sudo gdb -p $pid |
这样/tmp/nginx-momory 就是我们要的内存的二进制文件。我们通过strings程序去解析就可以了。
1 | strings /tmp/nginx-memory | less |
这样就能解析出来对应的配置了,这里因为是内存里,有可能需要自己调整一下格式。至少我的就是比较乱,还好文件分的多,所以每个都比较短,容易找。
终极还是要靠备份来进行。
那是不是所有进程里都有heap呢? 其实并不是的。
这主要跟程序中有无使用malloc相关,如果主线程使用了malloc就会有记录。但是绝大部分程序都会调用的。