Pertanyaan ini terkait dengan Bagaimana memulihkan file yang terhapus? tapi sifatnya sedikit berbeda.
Misalkan saya memiliki file bernama ~/something
buka di editor teks. Selanjutnya misalkan saya membuka terminal dan menjalankan perintah berikut saat file masih terbuka di editor teks:
rm ~/something
Ini akan menghapus file. Sekarang anggaplah saya berubah pikiran dan ingin mendapatkan kembali file tersebut. File masih terbuka di editor teks, jadi belum dihapus dari disk atau sistem file .
Apakah ada cara untuk memulihkannya?
Jawaban yang Diterima:
Saya tidak tahu apakah ada editor teks yang membuat file tetap terbuka saat Anda mengeditnya. Biasanya (yaitu di Emacs), file dibaca ke dalam buffer di RAM dan kemudian file ditutup. Anda hanya mengedit di RAM. Saat Anda menyimpan buffer, file dibuka, ditulis, dan ditutup kembali. Anda dapat menggunakan ps auxw | grep your_editor
untuk menemukan PID editor Anda, lalu lsof -p your_PID
untuk melihat file yang masih terbuka.
Di sisi lain, jika file tersebut masih dalam buffer editor Anda, Anda dapat menyimpannya.
Tapi itu bukan pertanyaan Anda, jadi anggap saja Anda menggunakan cat
sebagai editor Anda, dan file tersebut benar-benar masih terbuka:
% cat >the_file.txt
Hello world!
^Z
zsh: suspended cat > the_file.txt
% rm the_file.txt
% ls -l the_file.txt
ls: cannot access the_file.txt: No such file or directory
Anda dapat menggunakan lsof -n
untuk melihat semua file yang dibuka dan grep
untuk mencari nama file Anda.
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
Di kolom kedua Anda dapat melihat PID cat
Anda memerintah. Anda dapat mengubah ke direktori yang sesuai di sistem file /proc, dan ke fd
(deskriptor file) subdirektori:
% cd /proc/2145/fd
% ls -l
total 0
lrwx------ 1 elmicha elmicha 64 2012-11-07 00:22 0 -> /dev/pts/4
l-wx------ 1 elmicha elmicha 64 2012-11-07 00:22 1 -> /home/elmicha/tmp/the_file.txt (deleted)
lr-x------ 1 elmicha elmicha 64 2012-11-07 00:22 15 -> /proc/4501/auxv
lrwx------ 1 elmicha elmicha 64 2012-11-07 00:22 2 -> /dev/pts/4
Sekarang Anda cukup menyalin "file" 1
ke file lain:
% cp 1 ~/tmp/the_old_file.txt
Dan lihat, itu ada di sana:
% cat ~/tmp/the_old_file.txt
Hello world!