En supposant que l'OP signifiait vraiment à partir de la RAM et pas de toute manière possible , et en supposant que le processus dans lequel le script a été exécuté n'a aucune limite de fichier de base (qui est généralement le paramètre par défaut cat /proc/PID/limits
), alors vous devez vous attacher au processus et soit définissez la limite de base sur une valeur suffisamment grande pour inclure l'image de processus et utiliser le signal ABRT pour générer le fichier de base, ou utilisez un outil tel que gdb
celui-ci peut se joindre à un processus et générer une image de base du processus à partir de la RAM.
- Installer
gdb
Dans certains shell avec la même propriété que le script en cours d'exécution ou la propriété root:
- Faire
ps ax
pour trouver l'ID de processus (PID)
gdb -p PID
Notez que cela empêchera l'exécution du processus de continuer mais ne la supprimera pas de la table de processus.
- Dans gdb, lancez la commande
generate-core-file
gdb devrait répondre avec quelque chose comme Saved corefile core.15113
, en supposant que le PID est 15113.
- Dans gdb, lancez la commande
detach
Votre script continuera (reprendra) à fonctionner.
- Dans gdb, lancez la commande
quit
- En shell, exécutez
strings core.15113 > my_script.sh
Ouvrez le my_script.sh
dans un éditeur. Le texte de votre script doit être vers la fin du fichier avant la section environnement. Utilisez l'éditeur pour gratter les sections avant et après le script.
Testez cette solution sur un autre script avant de l'utiliser sur votre script de prix. YMMV.
La séquence ressemble à ceci:
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:~$