Recuperar um script em execução de uma sessão do terminal

35

Então, eu estou usando o GNU Screen para gerenciar vários scripts / programas em execução. A multiplexação e desmontagem é bastante útil.

Eu removi um script do disco e agora estou tendo problemas para encontrar o backup. No entanto, uma das sessões do terminal estava executando o script antes que o arquivo fosse excluído e continua funcionando perfeitamente.

Existe uma maneira de seqüestrar a sessão do terminal que está atualmente executando o script para recuperar o conteúdo deste arquivo?

Fdo
fonte

Respostas:

61

procure o pid do script usando ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

cheque /proc/$PID/fd/; deve haver um link quebrado para o arquivo de script, mas cat deve funcionar (enquanto o script estiver em execução!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

boa sorte!

mrc
fonte
@mrc Eu acho que o trabalho, porque o conteúdo de arquivos, é carregado na memória
c4f4t0r
Ótima sugestão! Também é um aviso de que o @fdo precisa configurar uma rotina de backup decente, porque da próxima vez ele pode não ter tanta sorte.
Criggie
12
@ c4f4t0r Nada a ver com o carregamento na memória ou não. O Linux explicitamente não removerá um arquivo (inode) enquanto houver identificadores abertos - o arquivo permanece no disco, ocupando espaço. rme outras ferramentas desvinculam o arquivo, removendo o link do nome do arquivo para os dados reais (referenciados pelo inode), mas enquanto existir uma referência (link físico ou identificador aberto), o inode não será excluído.
Bob
Apenas curioso ... como você soube checar o fd 255? Ou isso é apenas um exemplo?
gardenhead
2
@ Gardenhead É um exemplo.
precisa saber é o seguinte