Solaris tar: «сбой символической ссылки: не каталог»

Результирующий пользователь файла зависит о том, что делает редактор. Некоторые редакторы сохраняют файл, усекая его и перезаписывая файл (без изменения индекса). А некоторые редакторы переименовывают файл в другое имя (обычно файл в файл~) и создают новый файл с именем оригинала. Изменение исходного файла сохраняет владельца тем же самым, создание нового делает новый файл владельцем UID процесса создания.

Из редакторов, которые у меня есть в Debian, nano и joe, а также nvi и vim (минимальная версия в vim-tiny) перезаписывают на месте. Хотя я предполагаю, что vim и Emacs, вероятно, настраиваются в том, что они делают.


Стивен комментирует атомарные обновления. Проблема с повторным созданием на месте заключается в том, что файл усекается до нулевой длины, а затем записывается. Другой процесс может открыть и прочитать его до того, как все данные будут записаны.

Атомарное обновление будет выполнено путем создания новой версии, скажем, file.new, а затем переименования file.new в file. Оставив файл резервной копии, можно создать file.new, связать file с file~, а затем переименовать file.new в . ]файл.Переименование является атомарным в том смысле, что любой процесс, обращающийся к файлу по имени, получает либо старую, либо новую версию, а не что-то среднее между ними. Любые дескрипторы открытых файлов, конечно же, будут указывать на файл, который был открыт, что дает непротиворечивое представление о файле.


С точки зрения прав доступа к файлам сохранение в том же файле (inode) требует доступа на запись к самому файлу (но не к каталогу), его переименование и создание нового требует доступа на запись к каталог (но не в исходный файл).

(Переименование и повторное создание также является способом исправления прав доступа к файлам в случае, если кто-то создает или изменяет файл в общем каталоге, но забывает предоставить группе доступ для записи к нему.)

1
18.03.2016, 17:41
2 ответа

Если вы хотите использовать gnu tar под Solaris. Затем посмотрите строку:

  • Solaris 10: проверьте, есть ли он у вас, выполнив pkginfo SUNWgtar Обычный путь: / usr / sfw / bin / gtar
  • Solaris 11 : проверьте, есть ли он у вас, выполнив 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

2
27.01.2020, 23:48

Учитывая, что вы получаете ошибку Не каталог, очевидно, что символическая ссылка в архиве tar

lib/jre/ -> lib/jre1.8.0_46

отличается от того, что вы говорите нам в своем тексте.

Если gtar не жалуется на эту ссылку, она не работает.

К сожалению, вы не дали достаточной информации о своих ограничениях.

Нам нужно знать:

  • о каком типе архива tar вы говорите. Вы получаете тип через star -t -print-artype < foo.tar.gz
  • какова точная запись в архиве. Вы получите ответ через star -tv < foo.tar.gz pat='*jre*'

Архивы, созданные с помощью gtar, не совместимы с POSIX и могут даже изменить тип архива в середине архива. Вы должны понимать, что это может иметь действительно странные результаты.

Чтобы получить star, я рекомендую взять последние schilytools из: https://sourceforge.net/projects/schilytools/files/ и скомпилировать их.

0
27.01.2020, 23:48

Теги

Похожие вопросы