Как я могу прочитать файл sh, пока он работает, но удален?

20

В интервью они задали мне этот вопрос.

Был файл sh, который уже запущен, но он был удален с начала выполнения.

Они хотят, чтобы я нашел процесс и прочитал файл.

Мне удалось найти процесс с

ps -ef | grep test.sh

и попытался прочитать его с помощью

cat /proc/PID/cmdline test.sh

но это говорит

no such file or directory

Я не знал, что мне делать дальше, поэтому мне пришлось пропустить это.

Может быть, это был простой вопрос, но это был действительно хороший вопрос для меня, и я действительно хочу знать ответ. Ребята, вы можете помочь?

gazagelen
источник

Ответы:

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

где {pid} является идентификатором вашего процесса и /tmp/fileбудет иметь его содержимое. Используйте другое местоположение и имя, если хотите сохранить его.

  • {pid} - это идентификатор процесса.
  • {fd} - дескриптор файла. lsofдолжен показать фд. lsofскорее всего, также покажет "удалено" в строке, так что вы можете grepэто тоже. lsof -nP +L1отобразит список всех файлов с менее чем 1 ссылкой, удаленный файл будет иметь 0. Добавьте a | grep {pid}для поиска только вашего PID.
  • от десерта: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'просто получить фд.
  • от комментариев: вы можете использовать less, catили cpтоже. Я вырос на tail:)
Rinzwind
источник
"Я вырос на хвосте!" Ценная информация для тех, кому нужно что-то делать с * x.
Шри