Como recuperar o arquivo aberto, mas excluído no Linux usando ln em vez de cp?

8

Eu tenho um arquivo que está sendo baixado (de uma fonte de difícil download), mas acidentalmente excluído do namespace do sistema de arquivos (/ tmp / blah), e gostaria de recuperar este arquivo.

Normalmente eu poderia apenas cp /proc/$PID/fd/$FD /tmp/blah , mas nesse caso isso só me daria um instantâneo parcial, já que o arquivo ainda está sendo baixado. Além disso, quando o download for concluído, o processo de download (por exemplo, Chrome) fechará o FD.

Qualquer maneira de recuperar por inode / criar um link físico? Alguma outra solução? Se isso faz alguma diferença, estou principalmente preocupado com o ext4.

    
por Yang 16.02.2011 / 12:58

4 respostas

11

Tente usar o tail para copiar o arquivo continuamente:

tail -c +0 -f /proc/$pid/fd/$fd > filename

É claro que você terá que interromper o processo final manualmente (ou algum outro meio externo) quando o download terminar.

    
por 14.03.2011 / 16:51
4

O projeto fdlink , que consiste em um módulo do kernel Linux e um aplicativo simples, pretende criar um novo link para um descritor de arquivo aberto . Eu não tentei isso.

    
por 14.03.2011 / 18:36
1

Isso fará o trabalho, embora não recuperando o inode:

cp /proc/$PID/fd/$FD /tmp/blah
kill $PID
wget -c $URL -O /tmp/blah

Ou interrompa o download manualmente no Chrome se não quiser matar o navegador inteiro.

    
por 16.02.2011 / 13:05
1

Se você quiser fazer um link físico sobre isso, você tem que usar a opção -s (veja man ln ), então no diretório fd execute ls -f e descubra o número do arquivador (principalmente dois dígitos) e faça um ln NUMBER destination-file -s

    
por 16.02.2014 / 21:48