Come posso leggere un file sh mentre funziona ma è eliminato?


20

In un'intervista mi hanno fatto questa domanda.

C'era già un file sh che è già in esecuzione, ma è stato eliminato dall'avvio dell'esecuzione.

Vogliono che io trovi il processo e legga il file.

Sono riuscito a trovare il processo con

ps -ef | grep test.sh

e ho provato a leggerlo usando

cat /proc/PID/cmdline test.sh

ma dice

no such file or directory

Non sapevo cosa avrei dovuto fare, quindi ho dovuto saltare questo.

Forse è stata una domanda facile ma è stata davvero una buona domanda per me e voglio davvero conoscere la risposta. Ragazzi, potete aiutarmi?

Risposte:


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

dove {pid} è l'id del tuo processo e /tmp/fileavrà i suoi contenuti. Utilizzare un'altra posizione e un nome se si desidera preservarlo.

  • {pid} è l'id del processo.
  • {fd} è il descrittore di file. lsofdovrebbe mostrare il fd. lsofprobabilmente mostrerà anche "cancellato" sulla linea in modo da poterlo fare grepanche tu . lsof -nP +L1elencherà tutti i file con meno di 1 link, un file eliminato avrà 0. Aggiungi a | grep {pid}per cercare solo il tuo PID.
  • dal dessert: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'per ottenere solo il fd.
  • dai commenti: è possibile utilizzare less, cato di cptroppo. Sono cresciuto su tail:)

"Sono cresciuto sulla coda!" Una visione preziosa per chiunque debba fare qualcosa con * x.
Sri
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.