Sie glen
sind der Eigentümer des Verzeichnisses (siehe .
Datei in Ihrer Auflistung). Ein Verzeichnis ist nur eine Liste von Dateien, und Sie haben die Berechtigung, diese Liste zu ändern (z. B. Dateien hinzufügen, Dateien entfernen, Eigentümer ändern, um sie wieder zu Ihren eigenen zu machen usw.). Möglicherweise können Sie den Inhalt der Datei nicht direkt ändern , aber Sie können die Datei als Ganzes lesen und die Verknüpfung aufheben (entfernen) und anschließend neue Dateien hinzufügen. 1 Wenn Sie nur das Vorher und Nachher sehen, sieht es möglicherweise so aus, als ob die Datei geändert wurde.
Vim verwendet Auslagerungsdateien und verschiebt Dateien unter Wasser. Dies erklärt, warum scheinbar in dieselbe Datei geschrieben wird wie in Ihrer Shell, dies ist jedoch nicht dasselbe. 2
Also, was Vim macht, ist folgendes:
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 Dies ist ein wichtiger Unterschied im Umgang mit Dateiberechtigungen zwischen Windows und Unices. In Windows kann man normalerweise keine Dateien entfernen, für die Sie keine Schreibberechtigung haben.
2 Update: Wie in den Kommentaren vermerkt, macht Vim das nicht so, um den Eigentümer zu ändern, da sich die Inode-Nummer in der temp
Datei nicht ändert ( ls -li
vorher und nachher). Mit können strace
wir genau sehen, was vim
tut. Der interessante Teil ist hier:
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
Dies zeigt, dass die Verknüpfung nur aufgehoben wird , der Dateideskriptor jedoch nicht geschlossen wirdtemp
. Es überschreibt vielmehr nur den gesamten Inhalt ( more text bla\n
in meinem Fall). Ich denke, das erklärt, warum sich die Inode-Nummer nicht ändert.
ls -il
davor und danach ausführen. Wenn sichtemp
die Inode-Nummer geändert hat, wissen Sie, dass es sich um eine andere Datei mit demselben Namen handelt.