¿Cómo puedo leer un archivo sh mientras funciona pero se elimina?


20

En una entrevista me hicieron esta pregunta.

Había un archivo sh que ya se está ejecutando, pero se ha eliminado desde que comenzó la ejecución.

Quieren que encuentre el proceso y lea el archivo.

Logré encontrar el proceso con

ps -ef | grep test.sh

e intenté leerlo usando

cat /proc/PID/cmdline test.sh

pero dice

no such file or directory

No sabía qué hacer a continuación, así que tuve que omitir esto.

Tal vez fue una pregunta fácil, pero realmente fue una buena pregunta para mí y realmente quiero saber la respuesta. ¿Pueden ayudarme?

Respuestas:


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

donde {pid} es la identificación de su proceso y /tmp/filetendrá su contenido. Use otra ubicación y nombre si desea preservarlo.

  • {pid} es la identificación del proceso.
  • {fd} es el descriptor de archivo. lsofdebería mostrar el fd. lsofes probable que también muestre "eliminado" en la línea para que pueda grephacerlo también. lsof -nP +L1enumerará todos los archivos con menos de 1 enlace, un archivo eliminado tendrá 0. Agregue un | grep {pid}para buscar solo su PID.
  • de postre: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'para obtener el fd.
  • de comentarios: puedes usar less, cato cptambién. Crecí en tail:)

"¡Crecí en la cola!" Una información valiosa para cualquiera que tenga que hacer algo con * x.
Sri
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.