Linux

如何恢復正在執行的程序的已刪除二進制執行檔

  • January 19, 2022

我有一個執行很長時間的程序。

我不小心刪除了程序的二進制執行檔。

由於該程序仍在執行並且沒有受到影響,因此其他地方肯定有原始二進製文件……

我怎樣才能恢復它?(我用的是CentOS 7,執行過程是用C++寫的)

它只能在記憶體中並且不可恢復,在這種情況下,您必須嘗試使用其中一種文件系統恢復工具(或者可能從記憶體中)從文件系統中恢復它。然而!

$ cat hamlet.c
#include <unistd.h>
int main(void) { while (1) { sleep(9999); } }
$ gcc -o hamlet hamlet.c
$ md5sum hamlet
30558ea86c0eb864e25f5411f2480129  hamlet
$ ./hamlet &
[1] 2137
$ rm hamlet
$ cat /proc/2137/exe > newhamlet
$ md5sum newhamlet 
30558ea86c0eb864e25f5411f2480129  newhamlet
$ 

使用解釋程序,獲取腳本文件可能在棘手和不可能之間的某個地方,正如/proc/$$/exe將指向perl或其他的那樣,並且輸入文件可能已經關閉:

$ echo sleep 9999 > x
$ perl x &
[1] 16439
$ rm x
$ readlink /proc/16439/exe
/usr/bin/perl
$ ls /proc/16439/fd
0  1  2

只有標准文件描述符是打開的,所以x已經不存在了(儘管文件系統上可能仍然存在一段時間,誰知道解釋器在記憶體中有什麼)。

引用自:https://unix.stackexchange.com/questions/342401