Есть ли способ восстановить файл, который я удалил, но все еще где-то открыт?

Этот вопрос относится к Как восстановить удаленные файлы? , но он немного отличается по своей природе.

Предположим, у меня есть файл с именем ~/something, открытый в текстовом редакторе. Далее предположим, что я открываю терминал и запускаю следующую команду, пока файл еще открыт в текстовом редакторе:

rm ~/something

Это удалит файл. Теперь предположим, что я передумал и хотел вернуть файл. Файл все еще открыт в текстовом редакторе , поэтому он еще не был удален с диска или файловой системы .

Есть ли способ восстановить его?

7
задан 13 April 2017 в 15:24

2 ответа

Я не знаю, есть ли текстовые редакторы, которые держат файл открытым, пока вы редактируете его. Обычно (т.е. в 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!
0
ответ дан 13 April 2017 в 15:24

Просто сохраните файл в текстовом редакторе. Должно работать очень хорошо.

Между прочим, вам часто предлагают сообщение «оставить несохраненным?», Когда файл все еще открыт в редакторе и вы пытаетесь закрыть окно, потому что текстедитор также замечает, что файл был удален и в настоящее время »не сохранен« (по крайней мере, в этом месте).

(nitstorm, пожалуйста, не используйте комментарии для ответов;)

0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: