
Мне нужно сделать резервную копию некоторых данных с помощью параметра "p" в команде tar. Проблема в том, что в месте, где я собираюсь восстановить эти данные, будут все те же пользователи, но у этих пользователей могут быть разные идентификаторы. Имеет ли это какое-либо значение для tar или он восстановит разрешения правильно по имени пользователя?
решение1
tar
записывает разрешения на основе UID и GID, а не на строке, связанной с ними. Так что если UID на одном сервере был 3300 и он был связан с 'bob', на новом сервере файл будет принадлежать пользователю с UID 3300.
Виртуально все (я хочу сказать все, но вы никогда не можете быть уверены на 100%) в UNIX использует значения UID:GID, потому что это то, что на самом деле хранится на уровне файловой системы. Имя — это просто простой поиск в файле passwd, основные проверки выполняются с использованием числовых значений.
решение2
Подводя итог предыдущим ответам и добавляя некоторую важную информацию:
При создании архивов
tar
всегда сохраняются идентификаторы пользователей и групп файлов,пока нев противном случае с--owner=NAME
,--group=NAME
. В любом случае, каждый файл всегда будет иметь связанныйчисловойидентификатор пользователя и группы.GNU
tar
и, возможно, другие версииtar
,такжесохранить пользователя и группуимена, если не--numeric-owner
используется.bsdtar
также сохраняет имена пользователей и групп по умолчанию, но не поддерживает--numeric-owner
опцию, когдасозданиеархивы до версии 3.0 (обратите внимание, что поддерживалась опция, когдаизвлечениеархивы с гораздо более давних времен).При извлечении в качествеобычный пользователь, все файлы будутвсегдапринадлежать пользователю. И не может быть иначе, поскольку извлечение файла означает создание нового в файловой системе, а обычный пользователь не может создать файл и передать право собственности кому-то другому.
При извлечении каккорень,
tar
по умолчанию восстановит права собственности на извлеченные файлы,пока не--no-same-owner
используется, что даст право собственности самому пользователю root.В GNU tar, bsdtar и, возможно, других версиях
tar
восстановление права собственности осуществляется пользователем (и группой)имя, если эта информация есть в архивеив целевой системе есть соответствующий пользователь. В противном случае он восстанавливается по ID. Если--numeric-owner
указана опция, имена пользователей и групп игнорируются, а используются ID. В любом случае, когда используются числовые ID, соответствующий пользователь и группа ненетдолжны существовать в системе.Разрешения и временные метки также сохраняются в архиве и восстанавливаются по умолчанию, если не используются параметры
--no-same-permissions
и/или--touch
. При извлечении пользователем,umask
пользовательвычтеноиз разрешений, если--same-permissions
не используется.--preserve-permissions
и--same-permissions
являются псевдонимами и имеют ту же функциональность, что и-p
Надеюсь, это поможет прояснить ситуацию! :)
решение3
Если вы пытаетесь передать файлы между двумя системами, rsync по умолчанию установит разрешения по имени пользователя вместо uid, просматривая имена пользователей на обоих концах. Только если пользователь не существует в одной из систем, он скопирует его с uid, если вы не укажете иное.
решение4
Используйте опцию --same-owner для GNU tar. Смотритеhttp://www.gnu.org/software/tar/manual/html_section/Attributes.html