Vous glen
êtes le propriétaire du répertoire (voir le .
fichier dans votre liste). Un répertoire est simplement une liste de fichiers et vous avez la permission de modifier cette liste (par exemple, ajouter des fichiers, supprimer des fichiers, changer les propriétaires pour le rendre à nouveau, etc.). Vous ne pouvez pas être en mesure de modifier le contenu du fichier directement, mais vous pouvez lire et unlink (supprimer) le fichier dans son ensemble et ajouter de nouveaux fichiers par la suite. 1 Seulement en regardant avant et après, cela peut donner l'impression que le fichier a été modifié.
Vim utilise des fichiers d'échange et les déplace sous l'eau, ce qui explique pourquoi il semble écrire dans le même fichier que dans votre shell, mais ce n'est pas la même chose. 2
Donc, ce que Vim fait, se résume à ceci:
cat temp > .temp.swp # copy file by contents into a new glen-owned file
echo nope >> .temp.swp # or other command to alter the new file
rm temp && mv .temp.swp temp # move temporary swap file back
1 Il s'agit d'une différence importante dans la gestion des autorisations de fichiers entre Windows et Unices. Sous Windows, il n’est généralement pas possible de supprimer des fichiers pour lesquels vous n’avez pas le droit d’écrire.
2 mise à jour: comme indiqué dans les commentaires, Vim ne le fait pas de cette façon pour changer de propriétaire, car le numéro d'inode du temp
fichier ne change pas ( ls -li
avant et après). En utilisant strace
nous pouvons voir exactement ce qui vim
fait. La partie intéressante est ici:
open("temp", O_WRONLY|O_CREAT|O_TRUNC, 0664) = -1 EACCES (Permission denied)
unlink("temp") = 0
open("temp", O_WRONLY|O_CREAT|O_TRUNC, 0664) = 4
write(4, "more text bla\n", 14) = 14
close(4) = 0
chmod("temp", 0664) = 0
Cela montre qu'il ne fait que dissocier , mais ne ferme pas le descripteur de fichier à temp
. Il remplace plutôt tout son contenu ( more text bla\n
dans mon cas). Je suppose que cela explique pourquoi le numéro d'inode ne change pas.
ls -il
avant et après ... sitemp
le numéro d'inode a changé, vous savez qu'il s'agit d'un fichier différent portant le même nom.