Wenn ich einen Prozess starte und dann dessen Binärdatei lösche, kann ich ihn trotzdem wiederherstellen von /proc/<pid>/exe
:
$ cp `which sleep` .
$ ./sleep 10m &
[1] 13728
$ rm sleep
$ readlink /proc/13728/exe
/tmp/sleep (deleted)
$ cp /proc/13728/exe ./sleep-copy
$ diff sleep-copy `which sleep` && echo not different
not different
$ stat /proc/13728/exe
File: ‘/proc/13728/exe’ -> ‘/tmp/sleep (deleted)’
Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Wenn ich andererseits selbst einen symbolischen Link erstelle, lösche ich das Ziel und versuche zu kopieren:
cp: cannot stat ‘sleep’: No such file or directory
/proc
ist eine Schnittstelle zum Kernel. Verweist dieser symbolische Link also tatsächlich auf die im Speicher geladene Kopie, jedoch mit einem nützlicheren Namen? Wie funktioniert der exe
Link genau?
proc_exe_link()
improc
Dateisystem: lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350Laut der Manpage von / proc ist die Datei unter Linux 2.2 und höher eine symbolische Verknüpfung, die den tatsächlichen Pfadnamen des ausgeführten Befehls enthält. Anscheinend wird die Binärdatei in den Speicher geladen und
/proc/[pid]/exe
zeigt auf den Inhalt der Binärdatei im Speicher .Andererseits ist unter Linux 2.0 und früher
/proc/[pid]/exe
anscheinend ein Zeiger auf die Datei (im Dateisystem), die ausgeführt wurde.Wenn Sie also dieselbe Befehlsliste unter Linux 2.0 oder früher ausführen, erhalten Sie vermutlich die Fehlermeldung "Keine solche Datei oder solches Verzeichnis".
quelle