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