Como posso ler um arquivo sh enquanto ele está funcionando, mas foi apagado?

20

Em uma entrevista, eles me fizeram essa pergunta.

Houve um arquivo sh que já está em execução, mas foi excluído desde o início da execução.

Eles querem que eu encontre o processo e leia o arquivo.

Consegui encontrar o processo com

ps -ef | grep test.sh

e tentou lê-lo usando

cat /proc/PID/cmdline test.sh

mas diz

no such file or directory

Eu não sabia o que fazer depois, então tive que pular isso.

Talvez tenha sido uma pergunta fácil, mas essa foi realmente uma boa pergunta para mim e eu realmente quero saber a resposta. Vocês podem ajudar?

    
por gazagelen 12.05.2018 / 09:10

1 resposta

24
tail -c +0 -f /proc/{pid}/fd/{fd} > /tmp/file

em que {pid} é o id do seu processo e /tmp/file terá seu conteúdo. Use outro local e nome, se quiser preservá-lo.

  • {pid} é o id do processo.
  • {fd} é o descritor de arquivo. lsof deve mostrar o fd. lsof provavelmente também mostrará "excluído" na linha, assim você também pode grep . lsof -nP +L1 listará todos os arquivos com menos de um link, um arquivo excluído terá 0. Adicione um | grep {pid} para pesquisar apenas o seu PID.
  • da sobremesa: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*//' para obter o fd.
  • dos comentários: você também pode usar less , cat ou cp . Eu cresci em tail :)
por Rinzwind 12.05.2018 / 09:16