Bagaimana saya bisa membaca file sh saat sedang bekerja tetapi dihapus?

20

Dalam sebuah wawancara mereka menanyakan pertanyaan ini kepada saya.

Ada file sh yang sudah berjalan, tetapi sudah dihapus sejak memulai eksekusi.

Mereka ingin saya menemukan proses dan membaca file.

Saya berhasil menemukan proses dengan

ps -ef | grep test.sh

dan mencoba membacanya dengan menggunakan

cat /proc/PID/cmdline test.sh

tapi katanya

no such file or directory

Saya tidak tahu apa yang harus saya lakukan selanjutnya jadi saya harus melewati ini.

Mungkin itu adalah pertanyaan yang mudah tetapi itu benar-benar pertanyaan yang bagus untuk saya dan saya benar-benar ingin tahu jawabannya. Bisakah kalian membantu?

Gazagelen
sumber

Jawaban:

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

di mana {pid} adalah id dari proses Anda dan /tmp/fileakan memiliki isinya. Gunakan lokasi dan nama lain jika Anda ingin melestarikannya.

  • {pid} adalah id dari proses.
  • {fd} adalah deskriptor file. lsofharus menunjukkan fd. lsofkemungkinan juga akan menampilkan "dihapus" di telepon sehingga Anda bisa melakukannya grepjuga. lsof -nP +L1akan mencantumkan semua file dengan tautan kurang dari 1, file yang terhapus akan memiliki 0. Tambahkan | grep {pid}untuk mencari PID Anda saja.
  • dari hidangan penutup: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'untuk mendapatkan fd.
  • dari komentar: Anda dapat menggunakan less, catatau cpjuga. Saya dibesarkan pada tail:)
Rinzwind
sumber
"Aku dibesarkan dengan ekor!" Wawasan berharga bagi siapa pun yang harus melakukan apa pun dengan * x
Sri