L'utilisateur résultant du fichier dépend de ce que fait l'éditeur. Certains éditeurs enregistrent le fichier en le tronquant et en écrivant sur le fichier (sans changer l'inode). Et certains éditeurs renomment le fichier sous un autre nom ( file
à file~
est habituel) et créent un nouveau fichier avec le nom de l'original. La modification du fichier d'origine conserve le même propriétaire, la création d'un nouveau fait que le nouveau fichier appartient à l'UID du processus de création.
Parmi les éditeurs que j'ai sur Debian, nano
et joe
aussi ( nvi
et vim
la version minimale en vim-tiny
) semblent écraser sur place. Bien que je suppose vim
et Emacs sont probablement configurables dans ce qu'ils font.
Stephen commente les mises à jour atomiques . Le problème avec la recréation sur place est que le fichier est tronqué à zéro, puis écrit. Un autre processus pourrait l'ouvrir et le lire avant que toutes les données soient écrites.
Une mise à jour atomique serait fait en créant la nouvelle version par exemple file.new
, puis renommer file.new
à file
. Laisser un fichier de sauvegarde, on pourrait créer file.new
, lien file
vers file~
puis renommer file.new
à file
. Le renommage est atomique dans la mesure où tout processus qui accède au fichier par son nom obtient l'ancienne ou la nouvelle version, rien entre les deux. Tout descripteur de fichier ouvert pointera bien sûr vers le fichier qui a été maintenu ouvert, donnant une vue cohérente sur le fichier.
Du point de vue des autorisations de fichier , l'enregistrement sur le même fichier (inode) nécessite un accès en écriture au fichier lui-même (mais pas au répertoire), le renommer et en créer un nouveau nécessite un accès en écriture au répertoire (mais pas au fichier d'origine) ).
(Renommer et recréer est également un moyen de corriger les autorisations de fichier au cas où quelqu'un crée ou modifie un fichier dans un répertoire partagé, mais oublie de lui donner un accès en écriture par le groupe.)