почему значение inode изменяется, когда мы редактируем в редакторе «vi»?

22

Когда я редактирую файл в редакторе "vi", значение индекса файла изменяется. Но при редактировании с помощью команды cat значение inode не меняется.

Памятник погибшим
источник

Ответы:

18

Скорее всего, вы установили опцию резервного копирования , а для backupcopy установлено значение «no» или «breakhardlink».

CJM
источник
как убрать эту опцию
памятник
2
@monu, отредактируйте свой ~/.vimrc. Это не настройки по умолчанию.
CJM
@cjm В VIM 7.4 у меня не было строки backupв моем .vimrc, но inode все еще менялся, потому что по умолчанию используется резервное копирование текущего файла, удаление впоследствии и / *, когда это возможно * / переименование файла / * в резервную копию * / и запись новый / * под тем же именем, эффективно изменяющий индекс * / . Решено путем добавления set backupcopy=yesв .vimrc.
Кирилл Булыгин
27

Если вы хотите изменить файл, у вас есть два варианта, каждый со своими преимуществами и недостатками.

  • Вы можете перезаписать файл на месте. Это не использует никакого дополнительного пространства и сохраняет жесткие ссылки, разрешения и любые другие атрибуты за пределами содержимого существующего файла. Основным недостатком этого является то, что если что-то случится во время записи файла (сбой приложения или отключение питания), вы получите частично записанный файл.
  • Вы можете записать новую версию файла в новый файл с другим именем, а затем переместить его на место. Это занимает больше места и разрушает жесткие ссылки, и если у вас есть права на запись в файл, но не в каталог, который он содержит, вы не сможете это сделать вообще. С другой стороны, старая версия файла атомарно заменяется новой версией, поэтому в любой момент времени имя файла указывает на действительную, полную версию файла.

Продвинутые редакторы, такие как Vim или Emacs, могут выбирать между двумя методами. Когда они используют первый метод, они обычно сначала создают файл резервной копии, который можно восстановить, если новое содержимое файла не может быть записано правильно.

Классический vi перезаписывает файл на месте. Таким образом, индекс не изменился.

В Vim , как CJM уже заявил , что выбор управляется backup, backupcopyи writebackupопций. По умолчанию Vim переименовывает старый файл, а затем записывает новый файл с исходным именем, если считает, что может заново создать атрибуты исходного файла. Если вы хотите повторно использовать существующий индекс (и, следовательно, рискуете потерять данные или тратить больше времени на создание резервной копии), добавьте set backupcopy yesсвой .vimrc.

Жиль "ТАК - перестань быть злым"
источник
+1 Для упоминания , writebackupпотому что я уже выключил backupи backupcopyно инод все еще меняется.
Алиреза Мохамади