Получающийся пользователь файла зависит от того, что делает редактор. Некоторые редакторы сохраняют файл, обрезая его и записывая поверх файла (без изменения inode). И некоторые редакторы переименовать файл в другое имя ( 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) требуется доступ на запись к самому файлу (но не к каталогу), его переименование и создание нового требует доступа на запись в каталог (но не в исходный файл). ).
(Переименование и воссоздание также является способом фиксации прав доступа к файлам в случае, если кто-то создает или изменяет файл в общем каталоге, но забывает предоставить ему доступ для записи группы).