¿Por qué el valor del inodo cambia cuando editamos en el editor "vi"?

22

Cuando edito un archivo en el editor "vi", el valor de inodo del archivo está cambiando. Pero cuando se edita con el comando cat, el valor del inodo no cambia.

monumentos
fuente

Respuestas:

18

Lo más probable es que haya configurado la opción de copia de seguridad y copia de seguridad en "no" o "breakhardlink".

cjm
fuente
cómo eliminar esa opción
monumentos
2
@monu, edita tu ~/.vimrc. Esas no son las configuraciones predeterminadas.
cjm
@cjm Con VIM 7.4, no tenía ninguna cadena backupen mi .vimrc, pero el inodo seguía cambiando, porque el valor predeterminado es hacer una copia de seguridad del archivo actual, eliminarlo después y / / siempre que sea posible * / cambiar el nombre del archivo / * a la copia de seguridad * / y escribir el nuevo / * bajo el mismo nombre, cambiando efectivamente el inodo * / . Resuelto agregando set backupcopy=yesa .vimrc.
Kirill Bulygin
27

Cuando desee modificar un archivo, tiene dos opciones, cada una con sus ventajas y desventajas.

  • Puede sobrescribir el archivo en su lugar. Esto no utiliza ningún espacio adicional y conserva los enlaces duros, los permisos y cualquier otro atributo más allá del contenido del archivo existente. El principal inconveniente de hacer esto es que si algo sucede mientras se está escribiendo el archivo (la aplicación se bloquea o se corta la energía), terminará con un archivo parcialmente escrito.
  • Puede escribir la nueva versión del archivo en un archivo nuevo con un nombre diferente, luego moverlo a su lugar. Esto usa más espacio y rompe enlaces duros, y si tiene permisos de escritura en un archivo pero no en el directorio que contiene, no puede hacerlo en absoluto. Por otro lado, la versión anterior del archivo se reemplaza atómicamente por la nueva versión, por lo que en cada momento el nombre del archivo apunta a una versión válida y completa del archivo.

Los editores avanzados como Vim o Emacs pueden elegir entre los dos métodos. Cuando usan el primer método, normalmente hacen primero un archivo de copia de seguridad, que se puede recuperar si el nuevo contenido del archivo no se puede escribir correctamente.

Vi clásico sobrescribe el archivo en su lugar. Entonces el inodo no cambia.

En Vim, como ya ha indicado cjm , la elección está controlada por backup, backupcopyy writebackupopciones. Por defecto, Vim cambia el nombre del archivo antiguo y luego escribe un nuevo archivo con el nombre original, si cree que puede volver a crear los atributos del archivo original. Si desea reutilizar el inodo existente (y corre el riesgo de perder datos o perder más tiempo haciendo una copia de seguridad), agréguelo set backupcopy yesa su .vimrc.

Gilles 'SO- deja de ser malvado'
fuente
+1 Por mencionarlo writebackupporque ya lo apagué backupy el backupcopyinodo seguía cambiando.
Alireza Mohamadi