O usuário resultante do arquivo depende do que o editor faz. Alguns editores salvam o arquivo truncando-o e gravando o arquivo (sem alterar o inode). E alguns editores renomeiam o arquivo para outro nome ( file
to file~
é usual) e cria um novo arquivo com o nome do original. Modificar o arquivo original mantém o proprietário o mesmo, criando um novo torna o novo arquivo pertencente ao UID do processo de criação.
Dos editores que eu tenho no Debian, nano
e joe
, bem como nvi
e vim
(a versão mínima em vim-tiny
) parece sobrescrever no local. Embora eu suponha que vim
e Emacs sejam configuráveis no que fazem.
Stephen comenta sobre atualizações atômicas . O problema com a recriação in-loco é que o arquivo é truncado para comprimento zero e, em seguida, gravado. Outro processo poderia abrir e ler antes de todos os dados serem gravados.
Uma atualização atômica seria feita criando a nova versão como file.new
e, em seguida, renomeando file.new
para file
. Deixando um arquivo de backup, é possível criar file.new
, vincular file
a file~
e renomear file.new
a file
. A renomeação é atômica em que qualquer processo que acessa o arquivo pelo nome obtém a versão antiga ou nova, e não qualquer coisa entre elas. Quaisquer identificadores de arquivos abertos, obviamente, apontam para o arquivo que foi mantido aberto, dando uma visão consistente sobre o arquivo.
Do ponto de vista de permissões de arquivo , salvar sobre o mesmo arquivo (inode) requer acesso de gravação ao arquivo em si (mas não ao diretório), renomeá-lo e criar um novo requer acesso de gravação para o diretório (mas não para o arquivo original).
(Renomear e recriar também é, aliás, uma maneira de consertar as permissões de arquivos no caso de alguém criar ou modificar um arquivo em um diretório compartilhado, mas esquece de dar acesso de grupo a ele.)