Como posso ler um arquivo sh enquanto ele está funcionando, mas excluído?

20

Em uma entrevista, eles me fizeram esta pergunta.

Havia 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.

Eu consegui encontrar o processo com

ps -ef | grep test.sh

e tentei lê-lo usando

cat /proc/PID/cmdline test.sh

mas diz

no such file or directory

Eu não sabia o que fazer em seguida, 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?

gazagelen
fonte

Respostas:

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

onde {pid} é o ID do seu processo e /tmp/fileterá seu conteúdo. Use outro local e nome se desejar preservá-lo.

  • {pid} é o ID do processo.
  • {fd} é o descritor de arquivo. lsofdeve mostrar o fd. lsofprovavelmente também mostrará "excluído" na linha para que você também possa grep. lsof -nP +L1listará todos os arquivos com menos de 1 link, um arquivo excluído terá 0. Adicione a | grep {pid}para pesquisar apenas seu PID.
  • da sobremesa: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'para obter o fd.
  • a partir de comentários: você pode usar less, catou cptambém. Eu cresci em tail:)
Rinzwind
fonte
"Eu cresci na cauda!" Uma visão valiosa para quem precisa fazer alguma coisa com * x.
Sri