Результирующий пользователь файла зависит о том, что делает редактор. Некоторые редакторы сохраняют файл, усекая его и перезаписывая файл (без изменения индекса). А некоторые редакторы переименовывают файл в другое имя (обычно файл
в файл~
) и создают новый файл с именем оригинала. Изменение исходного файла сохраняет владельца тем же самым, создание нового делает новый файл владельцем UID процесса создания.
Из редакторов, которые у меня есть в Debian, nano
и joe
, а также nvi
и vim
(минимальная версия в vim-tiny
) перезаписывают на месте. Хотя я предполагаю, что vim
и Emacs, вероятно, настраиваются в том, что они делают.
Стивен комментирует атомарные обновления. Проблема с повторным созданием на месте заключается в том, что файл усекается до нулевой длины, а затем записывается. Другой процесс может открыть и прочитать его до того, как все данные будут записаны.
Атомарное обновление будет выполнено путем создания новой версии, скажем, file.new
, а затем переименования file.new
в file
. Оставив файл резервной копии, можно создать file.new
, связать file
с file~
, а затем переименовать file.new
в . ]файл
.Переименование является атомарным в том смысле, что любой процесс, обращающийся к файлу по имени, получает либо старую, либо новую версию, а не что-то среднее между ними. Любые дескрипторы открытых файлов, конечно же, будут указывать на файл, который был открыт, что дает непротиворечивое представление о файле.
С точки зрения прав доступа к файлам сохранение в том же файле (inode) требует доступа на запись к самому файлу (но не к каталогу), его переименование и создание нового требует доступа на запись к каталог (но не в исходный файл).
(Переименование и повторное создание также является способом исправления прав доступа к файлам в случае, если кто-то создает или изменяет файл в общем каталоге, но забывает предоставить группе доступ для записи к нему.)
Если вы хотите использовать gnu tar под Solaris. Затем посмотрите строку:
pkginfo SUNWgtar
Обычный путь: / usr / sfw / bin / gtar
pkg info gnu-tar
Обычный путь - / usr / gnu / bin / tar
с двумя символическими ссылками на / usr / sfw / bin / gtar
и / usr / bin / gtar
Обновление информации в соответствии с комментарием.
Если gnu tar недоступен, вы можете создать tar POSIX, совместимый с параметром - format = posix
.
это доступно в GNU tar версии 1.14. Более подробную информацию можно найти на GNU TAR
Учитывая, что вы получаете ошибку Не каталог
, очевидно, что символическая ссылка в архиве tar
lib/jre/ -> lib/jre1.8.0_46
отличается от того, что вы говорите нам в своем тексте.
Если gtar
не жалуется на эту ссылку, она не работает.
К сожалению, вы не дали достаточной информации о своих ограничениях.
Нам нужно знать:
star -t -print-artype < foo.tar.gz
star -tv < foo.tar.gz pat='*jre*'
Архивы, созданные с помощью gtar
, не совместимы с POSIX и могут даже изменить тип архива в середине архива. Вы должны понимать, что это может иметь действительно странные результаты.
Чтобы получить star
, я рекомендую взять последние schilytools
из: https://sourceforge.net/projects/schilytools/files/ и скомпилировать их.