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