perché il valore dell'inode cambia quando si modifica nell'editor "vi"?


22

Quando modifico un file nell'editor "vi", il valore dell'inode del file cambia. Ma quando modificato con il comando cat il valore dell'inode non cambia.

Risposte:


18

Molto probabilmente, hai attivato l' opzione di backup e backupcopy su "no" o "breakhardlink".


come rimuovere questa opzione
monu,

2
@monu, modifica il tuo ~/.vimrc. Quelle non sono le impostazioni predefinite.
cjm,

@cjm Con VIM 7.4, non avevo stringhe backupnel mio .vimrc, ma l'inode stava ancora cambiando, perché l'impostazione predefinita è il backup del file corrente, cancellato in seguito e in / * quando possibile * / rinominare il file / * nel backup * / e scrivere il nuovo / * con lo stesso nome, cambiando efficacemente l'inode * / . Risolto aggiungendo set backupcopy=yesa .vimrc.
Kirill Bulygin,

27

Quando vuoi modificare un file, hai due opzioni, ognuna con i suoi vantaggi e svantaggi.

  • È possibile sovrascrivere il file in atto. Questo non utilizza alcuno spazio aggiuntivo e conserva i collegamenti, le autorizzazioni e qualsiasi altro attributo oltre il contenuto del file esistente. Il principale svantaggio di farlo è che se succede qualcosa mentre il file viene scritto (l'applicazione si arresta in modo anomalo o l'alimentazione si interrompe), si finisce con un file parzialmente scritto.
  • È possibile scrivere la nuova versione del file in un nuovo file con un nome diverso, quindi spostarlo in posizione. Questo utilizza più spazio e interrompe i collegamenti fissi e se si dispone delle autorizzazioni di scrittura su un file ma non sulla directory che contiene, non è possibile farlo. D'altro canto, la vecchia versione del file viene sostituita atomicamente dalla nuova versione, quindi in ogni momento il nome del file punta a una versione valida e completa del file.

Editor avanzati come Vim o Emacs possono scegliere tra i due metodi. Quando usano il primo metodo, normalmente creano prima un file di backup, che può essere recuperato se il nuovo contenuto del file non può essere scritto correttamente.

Classical vi sovrascrive il file in atto. Quindi l'inode è invariato.

In Vim, come CJM ha già dichiarato , la scelta è controllata dai backup, backupcopye writebackupopzioni. Per impostazione predefinita, Vim rinomina il vecchio file, quindi scrive un nuovo file con il nome originale, se ritiene di poter ricreare gli attributi del file originale. Se vuoi riutilizzare l'inode esistente (e quindi rischiare di perdere dati o perdere più tempo a fare una copia di backup), aggiungi set backupcopy yesal tuo .vimrc.


+1 Per citare writebackupperché ho già spento backupe backupcopyma l'inode stava ancora cambiando.
Alireza Mohamadi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.