Comment lire un fichier sh alors qu'il fonctionne mais qu'il est supprimé?

20

Dans une interview, ils m'ont posé cette question.

Un fichier sh était déjà en cours d'exécution, mais il a été supprimé depuis le début de l'exécution.

Ils veulent que je trouve le processus et que je lise le fichier.

J'ai réussi à trouver le processus avec

ps -ef | grep test.sh

et a essayé de le lire en utilisant

cat /proc/PID/cmdline test.sh

mais ça dit

no such file or directory

Je ne savais pas ce que je devais faire ensuite, j'ai donc dû ignorer cela.

C'était peut-être une question facile mais c'était vraiment une bonne question pour moi et je veux vraiment connaître la réponse. Pouvez-vous m'aider?

gazagelen
la source

Réponses:

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

où {pid} est l'id de votre processus et /tmp/fileaura son contenu. Utilisez un autre emplacement et nom si vous souhaitez le conserver.

  • {pid} est l'id du processus.
  • {fd} est le descripteur de fichier. lsofdevrait montrer le fd. lsofva probablement afficher "supprimé" sur la ligne afin que vous puissiez le faire grepaussi. lsof -nP +L1répertoriera tous les fichiers avec moins de 1 lien, un fichier supprimé aura 0. Ajoutez un | grep {pid}pour rechercher uniquement votre PID.
  • du dessert: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'pour obtenir juste le fd.
  • des commentaires: vous pouvez utiliser less, catou cptrop. J'ai grandi tail:)
Rinzwind
la source
"J'ai grandi sur la queue!" Un aperçu précieux pour quiconque doit faire quoi que ce soit avec * x.
Sri