pourquoi la valeur de l'inode change lorsque nous éditons dans l'éditeur "vi"?

22

Lorsque je modifie un fichier dans l'éditeur "vi", la valeur d'inode du fichier change. Mais lorsqu'elle est modifiée avec la commande cat, la valeur d'inode ne change pas.

monu
la source

Réponses:

18

Très probablement, vous avez activé l' option de sauvegarde et la copie de sauvegarde sur "non" ou "breakhardlink".

cjm
la source
comment supprimer cette option
lunu
2
@monu, modifiez votre ~/.vimrc. Ce ne sont pas les paramètres par défaut.
cjm
@cjm Avec VIM 7.4, je n'avais pas de chaîne backupdans mon .vimrc, mais l'inode changeait toujours, car la valeur par défaut est de sauvegarder le fichier actuel, supprimé ensuite et / / chaque fois que possible * / renommer le fichier / * en sauvegarde * / et écrire le nouveau / * sous le même nom, changeant effectivement l'inode * / . Résolu en ajoutant set backupcopy=yesà .vimrc.
Kirill Bulygin
27

Lorsque vous souhaitez modifier un fichier, vous avez deux options, chacune avec ses avantages et ses inconvénients.

  • Vous pouvez remplacer le fichier en place. Cela n'utilise aucun espace supplémentaire et conserve les liens durs, les autorisations et tout autre attribut au-delà du contenu du fichier existant. L'inconvénient majeur de cette opération est que si quelque chose se produit pendant l'écriture du fichier (l'application se bloque ou le courant s'éteint), vous vous retrouvez avec un fichier partiellement écrit.
  • Vous pouvez écrire la nouvelle version du fichier dans un nouveau fichier avec un nom différent, puis le déplacer en place. Cela utilise plus d'espace et brise les liens durs, et si vous avez des autorisations d'écriture sur un fichier mais pas sur le répertoire qu'il contient, vous ne pouvez pas le faire du tout. D'un autre côté, l'ancienne version du fichier est atomiquement remplacée par la nouvelle version, donc à tout moment le nom du fichier pointe vers une version valide et complète du fichier.

Les éditeurs avancés tels que Vim ou Emacs peuvent choisir entre les deux méthodes. Lorsqu'ils utilisent la première méthode, ils créent normalement un fichier de sauvegarde en premier, qui peut être récupéré si le nouveau contenu du fichier ne peut pas être écrit correctement.

Le vi classique écrase le fichier en place. L'inode est donc inchangé.

Dans Vim, comme cjm l'a déjà dit , le choix est contrôlé par les options backup, backupcopyet writebackup. Par défaut, Vim renomme l'ancien fichier, puis écrit un nouveau fichier avec le nom d'origine, s'il pense qu'il peut recréer les attributs du fichier d'origine. Si vous souhaitez réutiliser l'inode existant (et donc risquer de perdre des données ou perdre plus de temps à faire une copie de sauvegarde), ajoutez-le set backupcopy yesà votre .vimrc.

Gilles 'SO- arrête d'être méchant'
la source
+1 Pour mentionner writebackupparce que j'ai déjà éteint backupet backupcopyque l'inode changeait toujours.
Alireza Mohamadi