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

7

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

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

rm ~/something

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

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

    
задан Nathan Osman 06.11.2012 в 22:59
источник

2 ответа

10

Я не знаю, есть ли текстовые редакторы, которые хранят файл во время его редактирования. Обычно (т. Е. В 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!
    
ответ дан elmicha 06.11.2012 в 23:30
источник
0

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

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

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

    
ответ дан wolfv 06.11.2012 в 23:27