O usuário resultante do arquivo depende do que o editor faz. Alguns editores salvam o arquivo truncando-o e escrevendo sobre o arquivo (sem alterar o inode). E alguns editores renomeie o arquivo para outro nome ( file
para file~
é usual), e criar um novo arquivo com o nome do original. A modificação do arquivo original mantém o proprietário igual, e a criação de um novo torna o novo arquivo pertencente ao UID do processo de criação.
Dos editores que tenho no Debian, nano
e joe
também ( nvi
e vim
a versão mínima vim-tiny
) parecem sobrescrever no local. Embora eu suponha que o vim
Emacs seja provavelmente configurável no que faz.
Stephen comenta sobre atualizações atômicas . O problema com a recriação no local é que o arquivo é truncado com tamanho zero e, em seguida, gravado. Outro processo pode ser aberto e lido antes que todos os dados sejam gravados.
Uma atualização atômica seria feita criando a nova versão como digamos file.new
e renomeando file.new
para file
. Deixando um arquivo de backup, pode-se criar file.new
, ligação file
para file~
e mude o nome file.new
para file
. A renomeação é atômica, pois qualquer processo que acesse o arquivo pelo nome obtém a versão antiga ou a nova, e nada entre eles. Obviamente, qualquer identificador de arquivo aberto apontará para o arquivo que foi mantido aberto, fornecendo uma visão consistente do arquivo.
Do ponto de vista das permissões de arquivo , salvar o mesmo arquivo (inode) requer acesso de gravação ao próprio arquivo (mas não o diretório), renomeá-lo e criar um novo requer acesso de gravação ao diretório (mas não ao arquivo original) )
(Renomear e recriar também é, aliás, uma maneira de corrigir permissões de arquivo, no caso de alguém criar ou modificar um arquivo em um diretório compartilhado, mas esquece de fornecer acesso de gravação em grupo a ele.)