Warum ändert sich der Inode-Wert, wenn wir ihn im "vi" -Editor bearbeiten?

22

Wenn ich eine Datei im "vi" -Editor bearbeite, ändert sich der Inode-Wert der Datei. Bei der Bearbeitung mit dem Befehl cat ändert sich der Inode-Wert jedoch nicht.

monu
quelle

Antworten:

18

Höchstwahrscheinlich haben Sie die Sicherungsoption aktiviert und backupcopy auf "no" oder "breakhardlink" gesetzt.

cjm
quelle
So entfernen Sie diese Option
Monu
2
@monu, bearbeite deine ~/.vimrc. Dies sind nicht die Standardeinstellungen.
cjm
@cjm Mit VIM 7.4 hatte ich keinen String backupin meinem .vimrc, aber der Inode änderte sich immer noch, da standardmäßig die aktuelle Datei gesichert, anschließend gelöscht und nach Möglichkeit nach / * umbenannt * / die Datei / * in die Sicherung * / umbenannt und geschrieben wird das neue / * unter demselben Namen, wodurch der Inode * / geändert wird . Gelöst durch Hinzufügen set backupcopy=yeszu .vimrc.
Kirill Bulygin
27

Wenn Sie eine Datei ändern möchten, stehen Ihnen zwei Optionen zur Verfügung, die jeweils Vor- und Nachteile haben.

  • Sie können die Datei an Ort und Stelle überschreiben. Dadurch wird kein zusätzlicher Speicherplatz belegt, und die festen Links, Berechtigungen und sonstigen Attribute bleiben erhalten, die über den Inhalt der vorhandenen Datei hinausgehen. Der größte Nachteil dabei ist, dass Sie eine teilweise geschriebene Datei erhalten, wenn während des Schreibens der Datei etwas passiert (die Anwendung stürzt ab oder die Stromversorgung geht aus).
  • Sie können die neue Version der Datei in eine neue Datei mit einem anderen Namen schreiben und dann an ihren Platz verschieben. Dies beansprucht mehr Speicherplatz und bricht harte Links. Wenn Sie über Schreibberechtigungen für eine Datei verfügen, jedoch nicht für das darin enthaltene Verzeichnis, können Sie dies überhaupt nicht tun. Auf der anderen Seite wird die alte Version der Datei atomar durch die neue Version ersetzt, sodass der Dateiname zu jedem Zeitpunkt auf eine gültige, vollständige Version der Datei verweist.

Fortgeschrittene Editoren wie Vim oder Emacs können zwischen den beiden Methoden wählen. Wenn sie die erste Methode verwenden, erstellen sie normalerweise zuerst eine Sicherungsdatei, die wiederhergestellt werden kann, wenn der Inhalt der neuen Datei nicht korrekt geschrieben werden kann.

Classical vi überschreibt die Datei an Ort und Stelle. Die Inode bleibt also unverändert.

In Vim, wie cjm bereits festgestellt hat , wird die Wahl durch die kontrollierten backup, backupcopyund writebackupOptionen. Standardmäßig benennt Vim die alte Datei um und schreibt dann eine neue Datei mit dem ursprünglichen Namen, wenn Vim glaubt, die Attribute der ursprünglichen Datei neu erstellen zu können. Wenn Sie den vorhandenen Inode wiederverwenden möchten (und damit Datenverlust oder Zeitverschwendung beim Erstellen einer Sicherungskopie riskieren), fügen Sie set backupcopy yesIhren hinzu .vimrc.

Gilles 'SO - hör auf böse zu sein'
quelle
+1 Zum Erwähnen, writebackupweil ich bereits ausgeschaltet war backupund der backupcopyInode sich noch änderte.
Alireza Mohamadi