
Когда я редактирую файл вvi
редактора, значение инода файла меняется. Но при редактировании командой cat
значение инода не меняется.
решение1
Если вы хотите изменить файл, у вас есть два варианта, каждый из которых имеет свои преимущества и недостатки.
- Вы можете перезаписать файл на месте. Это не использует дополнительное пространство и сохраняет жесткие ссылки, разрешения и любые другие атрибуты за пределами содержимого существующего файла. Главный недостаток этого способа заключается в том, что если что-то произойдет во время записи файла (приложение выйдет из строя или отключится питание), вы получите частично записанный файл.
- Вы можете записать новую версию файла в новый файл с другим именем, а затем переместить его на место. Это занимает больше места и нарушает жесткие ссылки, а если у вас есть права на запись в файл, но не в каталог, который он содержит, вы вообще не сможете этого сделать. С другой стороны, старая версия файла атомарно заменяется новой версией, поэтому в каждый момент времени имя файла указывает на действительную, полную версию файла.
Продвинутые редакторы, такие как Vim или Emacs, могут выбирать между двумя методами. При использовании первого метода они обычно сначала создают резервную копию файла, которую можно восстановить, если содержимое нового файла не может быть записано правильно.
Классический vi перезаписывает файл на месте. Поэтому inode не изменяется.
В Виме,как уже заявил cjm, выбор контролируетсяbackup
,backupcopy
иwritebackup
параметры. По умолчанию Vim переименовывает старый файл, а затем записывает новый файл с исходным именем, если он считает, что может воссоздать атрибуты исходного файла. Если вы хотите повторно использовать существующий inode (и, таким образом, рискуете потерять данные или потратить больше времени на создание резервной копии), добавьте set backupcopy yes
в свой .vimrc
.
решение2
Скорее всего, вы установилирезервное копированиеопция включена, ирезервная копияна «нет» или «breakhardlink».