Por acidente, sobrescrevi um script bash muito complexo, onde tentei implementar o escopo e o encadeamento de maneira organizada.
Agora, o mesmo script ainda está em execução, mas o arquivo não existe mais, a pergunta é: É possível percorrer o RAM e encontrar a representação gráfica do próprio arquivo?
Outro problema é: não consigo encontrar o arquivo / dev / mem ou / dev / kmem, já tentei cumprimentá-lo pelo conteúdo.
Para o ambiente: É um host da máquina debian / sid (vps) em vpsfx.com
root @ heisenberg: ~ # ls -a / dev . kmsg ptyp2 ptyp9 aleatório 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 pts do console ptyp6 ptypd stdout tty2 tty9 ttyp6 ttypd fd ptyp0 ptyp7 ptype tty3 ttyp0 ttyp7 ttype ptyp1 completo ptyp8 ptypf tty0 tty4 ttyp1 ttyp8 ttypf
/proc
FS não reside na RAM. De fato, ele não reside em lugar algum . Consulte unix.stackexchange.com/questions/74713/… . Embora você possa obter o fd de/proc
,cat
o fd lê o arquivo do fs, não da RAM. É verdade que você excluiu o arquivo, reduzindo a contagem de referências do inode, e ninguém mais pode vê-lo agora, mas ele não é realmente excluído do fs até que o processo que executa o script o feche. Consulte stackoverflow.com/questions/2028874/… .Supondo que o OP realmente significasse a partir da RAM e de nenhuma maneira possível , e assumindo que o processo em que o script foi executado tenha um limite de zero de arquivo principal (que geralmente é a configuração padrão
cat /proc/PID/limits
), você precisará se conectar ao processo e defina o limite do núcleo como um valor grande o suficiente para incluir a imagem do processo e use o sinal ABRT para gerar o arquivo principal ou use uma ferramentagdb
que possa ser conectada a um processo e gerar uma imagem principal do processo a partir da RAM.gdb
Em alguns 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 impedirá a execução do processo de continuar, mas não a removerá da tabela de processos.
generate-core-file
O gdb deve responder com algo como
Saved corefile core.15113
, assumindo que o PID seja 15113.detach
Seu script continuará (continuando) em execução.
quit
strings core.15113 > my_script.sh
Abra o
my_script.sh
em algum editor. O texto do seu script deve estar no final do arquivo antes da seção do ambiente. Use o editor para raspar as seções antes e depois do script.Teste esta solução em outro script antes de usá-la em seu script de prêmio. YMMV.
A sequência é assim:
fonte
dd a partição do disco rígido em partes sobrepostas e o binário grep para partes do script. se você tiver sorte, escreva esses pedaços no diretório temporário do ram, para que nele possam salvar os ciclos de gravação do disco rígido ou do ssd. não, não é uma solução 'de ram'. esteja ciente do fato de que ao ler os scripts de byte a disco por byte pode estar no formato utf-8 (ou similar), então os parâmetros grep também precisam ser adaptados.
fonte