Як я можу прочитати файл sh, поки він працює, але видалений?


20

В інтерв'ю вони мені задали це питання.

Файл sh вже запущений, але він був видалений з початку виконання.

Вони хочуть, щоб я знайшов процес і прочитав файл.

Мені вдалося знайти процес за допомогою

ps -ef | grep test.sh

і спробував прочитати це за допомогою

cat /proc/PID/cmdline test.sh

але це говорить

no such file or directory

Я не знав, що мені робити далі, тому мені довелося пропустити це.

Можливо, це було легке питання, але це було справді гарне запитання для мене, і я дуже хочу знати відповідь. Ви можете допомогти?

Відповіді:


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

де {pid} - ідентифікатор вашого процесу і /tmp/fileматиме його вміст. Використовуйте інше місце та ім’я, якщо хочете зберегти його.

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

"Я виріс на хвості!" Цінне розуміння для кожного, хто має щось робити з * x.
Шрі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.