Os editores podem seguir uma das duas estratégias quando você salva um arquivo.
- Crie um novo arquivo e mova-o para substituir o antigo. A principal vantagem é que sempre existe um arquivo válido: a versão antiga é atomicamente substituída pela nova. Uma desvantagem é que um novo arquivo é criado, portanto, o editor deve replicar manualmente a propriedade e as permissões do arquivo antigo com o melhor de sua capacidade. Esse método também quebra hard links.
- Escreva no arquivo existente. Isso preserva hard links e permissões. Além disso, isso não requer nenhum espaço extra em disco, mas é altamente recomendável fazer um backup primeiro, o que torna esse ponto discutível. Isso tem a principal desvantagem de que, se um programa tentar ler o arquivo enquanto estiver sendo salvo, ele verá um arquivo truncado; e se o salvamento for interrompido (por exemplo, por uma falha de energia), um arquivo parcial permanecerá.
Os editores normalmente favorecem o primeiro método e voltam ao segundo método se detectarem que não podem replicar as permissões do arquivo existente ou que o arquivo existente tem links físicos.
É provável que a maioria dos editores não perceba a presença dos atributos extras do SELinux e, portanto, aplique o primeiro método. Com versões recentes do GNU coreutils (≥ 8.6), você pode usar cp --preserve=context --attributes-only
para replicar o contexto do SELinux de um arquivo em outro arquivo sem alterar o conteúdo do arquivo de destino.
Como alternativa, instrua seu editor a editar o arquivo no lugar. Com o Vim, defina o
backupcopy
option para yes
, se esse não for o padrão em seu sistema . Com o Emacs, defina a backup-by-copying
variable para t
.