Não sei se existem editores de texto que mantenham o arquivo aberto enquanto você o edita. Normalmente (ou seja, no Emacs), o arquivo é lido em um buffer na RAM e, em seguida, o arquivo é fechado. Você edita somente na RAM. Quando você salva o buffer, o arquivo é aberto, gravado e fechado novamente. Você pode usar ps auxw | grep your_editor
para encontrar o PID do seu editor e, em seguida, lsof -p your_PID
para ver os arquivos que ainda estão abertos.
Por outro lado, se o arquivo ainda estiver no buffer do seu editor, você pode salvá-lo.
Mas essa não foi sua pergunta, então vamos fingir que você está usando cat
como seu editor, e o arquivo ainda está aberto:
% 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
Você pode usar lsof -n
para ver todos os arquivos abertos e grep
para pesquisar seu nome de arquivo.
% lsof -n | grep the_file.txt
cat 2145 elmicha 1w REG 9,1 13 108003357 /home/elmicha/tmp/the_file.txt (deleted)
Na segunda coluna você pode ver o PID do seu comando cat
. Você pode mudar para o diretório correspondente no sistema de arquivos / proc e para o subdiretório fd
(descritor de arquivo):
% 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
Agora você pode simplesmente copiar o "arquivo" 1
para outro arquivo:
% cp 1 ~/tmp/the_old_file.txt
E veja, está aí:
% cat ~/tmp/the_old_file.txt
Hello world!