Вот моя топология:
My laptop ==> Ubuntu Desktop
| | |
User: root & saeed
My server ==> Ubuntu 20.04
| | |
Users: root & ubuntu (I deleted it as I explain below)
Шаги:
- Я запускаю
tar zvcf back.tar.gz .
на своем ноутбуке под учетной записью пользователя,saeed
и файл создается. - Я загружаю этот файл через SFTP на свой сервер, используя
root
user в path example/home/test
, который не является домашним каталогом ни одного пользователя. - Я извлекаю
back.tar.gz
,/home/test
но вижу, что владельцем всех файлов и каталогов являетсяubuntu:ubuntu
. - Я удалил
ubuntu
пользователя и попробовал третий шаг, но результат тот же. - Я извлек его
back.tar.gz
на свой ноутбук по другому пути, но все владельцы файлов —saeed:saeed
.
Почему это происходит?
решение1
При извлечении как root, tar
по умолчанию сохраняется оригинальный идентификатор владельца. У пользователя saeed
случайно оказался тот же идентификатор, что и ubuntu
на другом компьютере (и, вероятно, это 1000
). Вы можете проверить идентификаторы, запустив id saeed
, или просто id
проверить текущего пользователя.
Если вы не хотите сохранять идентификатор пользователя, либо не извлекайте как root, либо используйте опцию --no-same-owner
. Соответствующий фрагмент изруководство:
--no-same-owner
Extract files as yourself (default for ordinary users).
Для обычных пользователей можно добиться обратного с помощью --same-owner
.
Связанные параметры --owner
, которые --owner-map
можно использовать при создании архива:
--owner=NAME[:UID]
Force NAME as owner for added files. If UID is not
supplied, NAME can be either a user name or numeric UID.
In this case the missing part (UID or name) will be
inferred from the current host's user database.
When used with --owner-map=FILE, affects only those files
whose owner is not listed in FILE.
--owner-map=FILE
Read owner translation map from FILE. Empty lines are
ignored. Comments are introduced with # sign and extend
to the end of line. Each non-empty line in FILE defines
translation for a single UID. It must consist of two
fields, delimited by any amount of whitespace:
OLDUSR NEWUSR[:NEWUID]
OLDUSR is either a valid user name or a UID prefixed with
+. Unless NEWUID is supplied, NEWUSR must also be either
a valid user name or a +UID. Otherwise, both NEWUSR and
NEWUID need not be listed in the system user database.
As a result, each input file owned by OLDUSR will be
stored in archive with owner name NEWUSR and UID NEWUID.