Pulihkan skrip yang berjalan dari sesi terminal

35

Jadi saya menggunakan Layar GNU untuk mengelola beberapa skrip / program yang sedang berjalan. Multiplexing & detachability cukup membantu.

Saya menghapus skrip dari disk dan sekarang saya kesulitan menemukan cadangan. Namun, salah satu sesi terminal mengeksekusi skrip sebelum file dihapus dan terus berfungsi dengan baik.

Apakah ada cara untuk membajak sesi terminal yang sedang menjalankan skrip untuk memulihkan konten file ini?

Fdo
sumber

Jawaban:

61

cari pid naskah menggunakan ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

periksa /proc/$PID/fd/; harus ada tautan yang rusak ke file skrip, tetapi cat harus berfungsi (saat skrip berjalan!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

semoga berhasil!

mrc
sumber
@ MBR Saya pikir itu bekerja, karena isi file, dimuat dalam memori
c4f4t0r
Saran bagus! Ini juga peringatan bahwa @fdo perlu mengatur rutinitas cadangan yang layak, karena lain kali ia mungkin tidak seberuntung itu.
Criggie
12
@ c4f4t0r Tidak ada hubungannya dengan itu dimuat dalam memori atau tidak. Linux secara eksplisit tidak akan menghapus file (inode) ketika ada pegangan terbuka - file tetap ada di disk, mengambil ruang. rmdan alat lainnya memutuskan tautan file, menghapus tautan dari nama file ke data aktual (direferensikan oleh inode), tetapi selama ada referensi (hard link atau open handle) inode tidak dihapus.
Bob
Hanya ingin tahu ... bagaimana Anda tahu memeriksa fd 255? Atau itu hanya contoh?
gardenhead
2
@gardenhead Ini contohnya.
user253751