Linux
如何恢復正在執行的程序的已刪除二進制執行檔
我有一個執行很長時間的程序。
我不小心刪除了程序的二進制執行檔。
由於該程序仍在執行並且沒有受到影響,因此其他地方肯定有原始二進製文件……
我怎樣才能恢復它?(我用的是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
已經不存在了(儘管文件系統上可能仍然存在一段時間,誰知道解釋器在記憶體中有什麼)。