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?


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 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.