чому значення inode змінюється під час редагування у редакторі “vi”?


22

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

Відповіді:


18

Швидше за все, ви ввімкнули параметр резервного копіювання та резервну копію на "ні" або "перервану посилання".


як видалити цю опцію
МОНУ

2
@monu, відредагуйте свій ~/.vimrc. Це не налаштування за замовчуванням.
cjm

@cjm З VIM 7.4 у мене не було рядка backupв моєму .vimrc, але inode все ще змінювався, тому що за замовчуванням є резервне копіювання поточного файлу, видалене згодом і / / коли це можливо * / перейменування файлу / * у резервну копію * / та запис новий / * під тим самим іменем, фактично змінюючи inode * / . Вирішено шляхом додавання set backupcopy=yesдо .vimrc.
Кирило Булигін

27

Коли ви хочете змінити файл, у вас є два варіанти, кожен зі своїми перевагами та недоліками.

  • Ви можете перезаписати файл на місце. Це не використовує зайвого простору і зберігає жорсткі посилання, дозволи та будь-який інший атрибут за межами вмісту існуючого файлу. Основним недоліком цього є те, що якщо що-небудь трапиться під час запису файлу (програма виходить з ладу, або живлення згасає), ви отримуєте частково записаний файл.
  • Ви можете написати нову версію файлу в новий файл з іншим іменем, а потім перемістити його на місце. Це використовує більше місця та розриває жорсткі посилання, і якщо у вас є дозволи на запис у файл, але не в каталозі, який він містить, ви не можете це зробити взагалі. З іншого боку, стара версія файлу атомічно замінюється новою версією, тому в кожен момент часу ім'я файлу вказує на дійсну, повну версію файлу.

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

Класичний vi замінює файл на місці. Тож інода є незмінною.

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


+1 Для згадки , writebackupбо я вже вимкнув backupі backupcopyале инод все ще змінюється.
Аліреза Могамаді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.