背景#
在公司維護自己的組件頁面時,為了圖方便直接在伺服器上調試的 Nginx.conf
好不容易調的差不多了,Nginx 也跑起來了,習慣性的要刪除一些臨時的檔案
結果手滑 直接一發 rm -rf nginx* 把伺服器 Nginx 配置啥的都刪了。
而且本地也沒備份 也沒推 GIT..
好在網上有高人啊,算是整回來了。特此記錄一下
實操#
- yum install gdb 安裝 gdb 之後,找到 Nginx master 的進程 ID
- 執行下面命令
# Set pid of nginx master process here
pid=339
# generate gdb commands from the process's memory mappings using awk
cat /proc/$pid/maps | awk '$6 !~ "^/" {split ($1,addrs,"-"); print "dump memory mem_" addrs[1] " 0x" addrs[1] " 0x" addrs[2] ;}END{print "quit"}' > gdb-commands
# use gdb with the -x option to dump these memory regions to mem_* files
gdb -p $pid -x gdb-commands
# look for some (any) nginx.conf text
grep worker_connections mem_*
grep server_name mem_*
- 最後 grep server_name mem_* 命令輸出了包含 server_name 的檔案。
[root@centos]# grep server_name mem_*
匹配到二進制檔案 mem_558f03f58000
匹配到二進制檔案 mem_558f0416f000
- 下載檔案之後,用 Visual Studio Code (由於是二進制檔案,不要用 sublime 之類的打開,會是亂碼) 打開,全局檢索一下,就能看到熟悉的配置資訊了。
- 檔案開始大概位置可以用 http { 定位
6. 雖然不能直接複製粘貼的使用,但是也算找回來了,誰讓自己手欠呢 QAQ