El usuario resultante del archivo depende de lo que haga el editor. Algunos editores guardan el archivo truncándolo y escribiendo sobre el archivo (sin cambiar el inodo). Y algunos editores cambian el nombre del archivo a otro nombre ( file
como file~
es habitual) y crean un nuevo archivo con el nombre del original. La modificación del archivo original mantiene al propietario igual, al crear uno nuevo, el nuevo archivo es propiedad del UID del proceso de creación.
De los editores que tengo en Debian, nano
y joe
también nvi
y vim
(la versión mínima en vim-tiny
) parecen sobrescribir en el lugar. Aunque supongo que vim
Emacs probablemente sean configurables en lo que hacen.
Stephen comenta sobre las actualizaciones atómicas . El problema con la recreación en el lugar es que el archivo se trunca a cero, luego se escribe. Otro proceso podría abrirse y leerlo antes de que se escriban todos los datos.
Se realizaría una actualización atómica creando la nueva versión como se dice file.new
, y luego renombrando file.new
a file
. Dejando a un archivo de copia de seguridad, se podría crear file.new
, enlace file
a file~
y cambie el nombre file.new
a file
. El cambio de nombre es atómico en el sentido de que cualquier proceso que acceda al archivo por su nombre obtiene la versión anterior o la nueva, no nada intermedio. Cualquier identificador de archivo abierto, por supuesto, apuntará al archivo que se mantuvo abierto, dando una vista coherente del archivo.
Desde el punto de vista de los permisos de archivo , guardar sobre el mismo archivo (inodo) requiere acceso de escritura al archivo en sí (pero no al directorio), renombrarlo y crear uno nuevo requiere acceso de escritura al directorio (pero no al archivo original )
(Cambiar el nombre y volver a crear también es, por cierto, una forma de corregir los permisos de archivos en caso de que alguien cree o modifique un archivo en un directorio compartido, pero se olvide de darle acceso de escritura grupal).