Por accidente, he sobrescrito un script de bash muy complejo, donde traté de implementar el alcance y el enhebrado de manera ordenada.
Ahora el mismo script aún se está ejecutando pero el archivo ya no existe, la pregunta es: ¿Es posible escanear a través del ram y encontrar la representación del archivo en sí?
Otro problema es: no puedo encontrar el archivo / dev / mem o / dev / kmem, ya intenté buscar el contenido.
Para el medio ambiente: es un host de máquina debian / sid (vps) en vpsfx.com
root @ heisenberg: ~ # ls -a / dev . kmsg ptyp2 ptyp9 aleatorio tty1 tty5 ttyp2 ttyp9 urandom .. log ptyp3 ptypa shm tty10 tty6 ttyp3 ttypa xconsole .udev nulo ptyp4 ptypb stderr tty11 tty7 ttyp4 ttypb cero char ptmx ptyp5 ptypc stdin tty12 tty8 ttyp5 ttypc consola pts ptyp6 ptypd stdout tty2 tty9 ttyp6 ttypd fd ptyp0 ptyp7 ptype tty tty3 ttyp0 ttyp7 ttype completo ptyp1 ptyp8 ptypf tty0 tty4 ttyp1 ttyp8 ttypf
/proc
fs no reside en la RAM. De hecho, no reside en ningún lado . Ver unix.stackexchange.com/questions/74713/… . Aunque puede obtener el fd/proc
,cat
ing fd lee el archivo de fs, no RAM. Es cierto, eliminó el archivo, reduciendo el recuento de referencia de inodo, y nadie más puede verlo ahora, pero en realidad no se elimina de la fs hasta que el proceso que ejecuta el script lo cierra. Ver stackoverflow.com/questions/2028874/… .Suponiendo que el OP realmente significaba RAM y no de ninguna manera posible , y suponiendo que el proceso en el que se ejecutó el script tiene un límite de archivo de núcleo cero (que generalmente es la configuración predeterminada
cat /proc/PID/limits
), entonces debe adjuntarlo al proceso y establezca el límite central en un valor lo suficientemente grande como para incluir la imagen del proceso y use la señal ABRT para generar el archivo central, o use una herramienta comogdb
esa que pueda adjuntarse a un proceso y generar una imagen central del proceso desde la RAM.gdb
En algunos shell con la misma propiedad que el script en ejecución o la propiedad de root:
ps ax
para encontrar la identificación del proceso (PID)gdb -p PID
Tenga en cuenta que esto detendrá la ejecución del proceso, pero no lo eliminará de la tabla de procesos.
generate-core-file
gdb debería responder con algo como
Saved corefile core.15113
, suponiendo que PID es 15113.detach
Su script continuará (se reanudará) ejecutándose.
quit
strings core.15113 > my_script.sh
Abra el
my_script.sh
en algún editor. El texto del script debe estar hacia el final del archivo antes de la sección de entorno. Use el editor para eliminar las secciones antes y después del guión.Pruebe esta solución en otro script antes de usarlo en su script de premio. YMMV.
La secuencia se ve así:
fuente
dd la partición del disco duro en trozos superpuestos y grep binary para partes del script. si tiene suerte, escriba esos fragmentos en el directorio temporal en ram para saludarlos y guardar su disco duro o los ciclos de escritura de ssd. no, no es una solución 'de ram'. tenga en cuenta el hecho de que, al leer el disco byte por byte, los scripts pueden estar en formato de caracteres utf-8 (o similar), por lo que los parámetros grep también pueden tener que adaptarse.
fuente