Dê uma olhada em / proc / $ PID / fd. Lá você deve ter todos os descritores de arquivos abertos pelo processo, incluindo o próprio script. Apenas cat $FD > /tmp/yourscript.sh
deve ser suficiente para recuperá-lo.
Eu acidentalmente escrevi um script bash muito complexo, em que tentei implementar o escopo e a segmentação de maneira organizada
agora o mesmo script ainda está em execução, mas o arquivo não está mais, a pergunta é: É possível escanear através da memória RAM e encontrar a representação do arquivo em si?
Outro problema é: não consigo encontrar o arquivo / dev / mem ou / dev / kmem, já tentei usar o grep para o conteúdo
Para o ambiente: É um host da máquina debian / sid (vps) no vpsfx.com
root@heisenberg:~# ls -a /dev . kmsg ptyp2 ptyp9 random tty1 tty5 ttyp2 ttyp9 urandom .. log ptyp3 ptypa shm tty10 tty6 ttyp3 ttypa xconsole .udev null ptyp4 ptypb stderr tty11 tty7 ttyp4 ttypb zero char ptmx ptyp5 ptypc stdin tty12 tty8 ttyp5 ttypc console pts ptyp6 ptypd stdout tty2 tty9 ttyp6 ttypd fd ptyp0 ptyp7 ptype tty tty3 ttyp0 ttyp7 ttype full ptyp1 ptyp8 ptypf tty0 tty4 ttyp1 ttyp8 ttypf
Supondo que o OP realmente significou da RAM e não qualquer forma possível , e assumindo que o processo no qual o script foi executado tem zero de limite de arquivo principal (que é geralmente a configuração padrão, cat /proc/PID/limits
), então você precisa anexar ao processo e definir o limite do núcleo para um valor grande o suficiente para incluir a imagem do processo e usar o sinal ABRT para gerar o arquivo principal ou usar uma ferramenta como gdb
que pode anexar a um processo e gerar uma imagem principal do processo a partir da RAM.
gdb
Em algum shell com a mesma propriedade do script em execução ou da propriedade raiz:
ps ax
para encontrar o ID do processo (PID) gdb -p PID
Observe que isso interromperá a execução do processo, mas não o removerá da tabela de processos.
generate-core-file
O gdb deve responder com algo como Saved corefile core.15113
, supondo que o PID seja 15113.
detach
Seu script continuará (continua) em execução.
quit
strings core.15113 > my_script.sh
Abra o my_script.sh
em algum editor. Seu texto de script deve estar no final do arquivo antes da seção de ambiente. Use o editor para raspar as seções antes e depois do script.
Teste esta solução em outro script antes de usá-lo no seu script de prêmios. YMMV.
A sequência é assim:
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:~$
dd a partição do disco rígido em blocos sobrepostos e binário do grep para partes do script. Se você tiver sorte, escreva esses pedaços no diretório temporário do RAM para salvar o seu disco rígido ou os ciclos de gravação do ssd. não, não é uma solução 'de ram'. esteja ciente do fato de que, ao ler scripts de byte de disco em byte, pode estar no formato de conjunto de caracteres utf-8 (ou similar), assim os parâmetros grep podem ter que ser também adaptados.