Этот вопрос относится к Как восстановить удаленные файлы? , но он немного отличается по своей природе.
Предположим, у меня есть файл с именем ~/something
, открытый в текстовом редакторе. Далее предположим, что я открываю терминал и запускаю следующую команду, пока файл еще открыт в текстовом редакторе:
rm ~/something
Это удалит файл. Теперь предположим, что я передумал и хотел вернуть файл. Файл все еще открыт в текстовом редакторе , поэтому он еще не был удален с диска или файловой системы .
Есть ли способ восстановить его?
Я не знаю, есть ли текстовые редакторы, которые держат файл открытым, пока вы редактируете его. Обычно (т.е. в Emacs) файл читается в буфер в ОЗУ, а затем файл закрывается. Вы редактируете только в оперативной памяти. Когда вы сохраняете буфер, файл открывается, записывается и снова закрывается. Вы можете использовать ps auxw | grep your_editor
, чтобы найти PID вашего редактора, затем lsof -p your_PID
, чтобы увидеть файлы, которые все еще открыты.
С другой стороны, если файл все еще находится в буфере вашего редактора, вы можете просто сохранить его.
Но это был не ваш вопрос, поэтому давайте представим, что вы используете cat
в качестве редактора, и файл действительно все еще открыт:
% 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
Вы можете использовать lsof -n
, чтобы увидеть все открытые файлы и grep
, чтобы найти ваше имя файла.
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
Во втором столбце вы видите PID вашей команды cat
. Вы можете перейти в соответствующий каталог в файловой системе / proc и в подкаталог fd
(дескриптор файла):
% 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
Теперь вы можете просто скопировать «файл» 1
в другой файл:
% cp 1 ~/tmp/the_old_file.txt
И видите, это там:
% cat ~/tmp/the_old_file.txt
Hello world!
Просто сохраните файл в текстовом редакторе. Должно работать очень хорошо.
Между прочим, вам часто предлагают сообщение «оставить несохраненным?», Когда файл все еще открыт в редакторе и вы пытаетесь закрыть окно, потому что текстедитор также замечает, что файл был удален и в настоящее время »не сохранен« (по крайней мере, в этом месте).
(nitstorm, пожалуйста, не используйте комментарии для ответов;)