Supponendo che l'OP significhi davvero dalla RAM e non in alcun modo possibile , e supponendo che il processo in cui lo script è stato eseguito abbia un limite di file core zero (che di solito è l'impostazione predefinita cat /proc/PID/limits
), quindi è necessario collegarsi al processo e impostare il limite principale su un valore sufficientemente grande da includere l'immagine del processo e utilizzare il segnale ABRT per generare il file principale, oppure utilizzare uno strumento come quello gdb
che può collegarsi a un processo e generare un'immagine principale del processo dalla RAM.
- Installare
gdb
In alcune shell con la stessa proprietà dello script in esecuzione o della proprietà root:
- Fare
ps ax
per trovare l'ID del processo (PID)
gdb -p PID
Si noti che ciò interromperà l'esecuzione del processo ma non la rimuoverà dalla tabella del processo.
- In gdb, immettere il comando
generate-core-file
gdb dovrebbe rispondere con qualcosa del genere Saved corefile core.15113
, supponendo che PID sia 15113.
- In gdb, immettere il comando
detach
Lo script continuerà (riprenderà) in esecuzione.
- In gdb, immettere il comando
quit
- Nella shell, corri
strings core.15113 > my_script.sh
Apri my_script.sh
in qualche editor. Il testo dello script dovrebbe essere verso la fine del file prima della sezione ambiente. Utilizzare l'editor per eliminare le sezioni prima e dopo lo script.
Prova questa soluzione su un altro script prima di utilizzarla sul tuo script premio. YMMV.
La sequenza è simile alla seguente:
yba@tavas:~$ gdb -p 15113
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Attaching to process 15113
Reading symbols from /bin/bash...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libtinfo.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libtinfo.so.5
Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libdl.so.2
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00007feaf4b4c7be in waitpid () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) generate-core-file
Saved corefile core.15113
(gdb) detach
Detaching from program: /bin/bash, process 15113
(gdb) quit
yba@tavas:~$