Отриманий користувачем файл залежить від того, що робить редактор. Деякі редактори зберігають файл, обрізуючи його, і записуючи його через файл (не змінюючи вкладення). А деякі редактори перейменують файл на інше ім’я ( file
до file~
звичайного) та створюють новий файл з ім'ям оригіналу. Змінення оригінального файлу зберігає власника таким же, створення нового - новий файл, що належить UID процесу створення.
З тих редакторів, які я маю на Debian, nano
і joe
, мабуть, nvi
і vim
(мінімальна версія в vim-tiny
) начебто замінено на місці. Хоча я гадаю, vim
і Emacs, ймовірно, налаштовується в тому, що вони роблять.
Стівен коментує атомні оновлення . Проблема з повторним створенням на місці полягає в тому, що файл усікається до нульової довжини, а потім записується. Ще один процес може відкрити і прочитати його, перш ніж всі дані будуть записані.
Атомне оновлення було б здійснено шляхом створення нової версії, як сказати file.new
, а потім перейменування file.new
на file
. Залишаючи файл резервної копії, можна створити file.new
, посилатися file
на нього file~
та перейменувати file.new
його file
. Перейменування є атомним, тому що будь-який процес, який отримує доступ до файлу по імені, отримує або стару, або нову версію, а не між ними. Будь-які ручки відкритого файлу, звичайно, вказуватимуть на файл, який було відкрито, надаючи послідовний погляд на файл.
З точки зору дозволу на файл , для збереження над тим самим файлом (inode) потрібен запис для запису до самого файлу (але не до каталогу), перейменування його та створення нового вимагає доступу для запису до каталогу (але не до вихідного файлу ).
(Перейменування та відтворення також є випадковим способом фіксації дозволів на файл, якщо хтось створює або змінює файл у спільному каталозі, але забуває надати доступ до запису групи.)