Jak mogę odczytać plik sh, gdy działa, ale został usunięty?

20

W wywiadzie zadali mi to pytanie.

Był już uruchomiony plik sh, ale został on usunięty od momentu uruchomienia.

Chcą, żebym znalazł proces i odczytał plik.

Udało mi się znaleźć proces z

ps -ef | grep test.sh

i próbowałem przeczytać, używając

cat /proc/PID/cmdline test.sh

ale mówi

no such file or directory

Nie wiedziałem, co powinienem zrobić, więc musiałem to pominąć.

Może to było łatwe pytanie, ale to było naprawdę dobre pytanie i naprawdę chcę poznać odpowiedź. Czy możecie pomóc?

gazagelen
źródło

Odpowiedzi:

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

gdzie {pid} jest identyfikatorem twojego procesu i /tmp/filebędzie miał swoją zawartość. Użyj innej lokalizacji i nazwy, jeśli chcesz ją zachować.

  • {pid} jest identyfikatorem procesu.
  • {fd} to deskryptor pliku. lsofpowinien pokazać fd. lsofprawdopodobnie również wyświetli „usunięty” w wierszu, więc ty też możesz grepto zrobić . lsof -nP +L1wyświetli listę wszystkich plików z mniej niż 1 linkiem, plik usunięty będzie miał 0. Dodaj a, | grep {pid}aby wyszukać tylko swój PID.
  • z deseru: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'po prostu dostać fd.
  • z komentarzy: można użyć less, catlub cpteż. Dorastałem tail:)
Rinzwind
źródło
„Dorastałem na ogonie!” Cenny wgląd dla każdego, kto musi robić cokolwiek z * x.
Sri