Почему Tar сохраняет полномочия исходных файлов, не передавая '-p', '-сохранять-полномочия или' - переключатель тех-же-полномочий?

От man 1 tar:

[...]
     -p, --preserve-permissions, --same-permissions
           extract information about file permissions (default for superuser)
[...]
     --no-same-permissions
           apply the user's umask when extracting permissions from the archive
           (default for ordinary users)
[...]

От этого я понимаю, что полномочиями извлеченных файлов значения по умолчанию установлены на основе umask пользователя, если пользователь не является корнем:

% umask
002

Таким образом, файлы, извлеченные мной, должны иметь полномочия 664 (666-002).

Однако:

% touch foo
% chmod +x foo
% ls -l
total 0
-rwxrwxr-x 1 user user 0 nov  3 19:36 foo
% tar cf foo.tar foo
% rm foo
% tar xf foo.tar 
% ls -l
total 12
-rwxrwxr-x 1 user user     0 nov  3 19:36 foo
-rw-rw-r-- 1 user user 10240 nov  3 19:36 foo.tar

Т.е. Tar сохраняет полномочия исходного файла даже при том, что я не передал -p, --preserve-permissions или --same-permissions переключатель.

Тем не менее, если я передаю --no-same-permissions переключатель:

% tar xf foo.tar --no-same-permissions
% ls -l
total 12
-rwxrwxr-x 1 user user     0 nov  3 19:36 foo
-rw-rw-r-- 1 user user 10240 nov  3 19:36 foo.tar

Все еще Tar сохраняет полномочия исходного файла.

Кто-то может объяснить, почему это?

4
задан 3 November 2015 в 22:56

1 ответ

Так как Адонис (кто определил проблему) еще не отправил ответ, я отправлю ответ сам.

[...]
     --no-same-permissions
           apply the user's umask when extracting permissions from the archive
           (default for ordinary users)
[...]

Это, наоборот к тому, что я думал, означает, что umask применяется к полномочиям папок / файлы в архиве, а не к стандартным полномочиям недавно созданных папок / файлы (777 / 666) как я думал.

Т.е. папка / файл, извлеченный, не передавая -p, --preserve-permissions или --same-permissions переключателю не установят полномочия на 777 & ~umask / 666 & ~umask, но к folder's/file's_archived_permissions & ~umask.

В этом конкретном случае меня дополнительно дурачило то, что, применяя umask 002 в файл с полномочиями 775 ничего не изменяет, с тех пор 775 & ~002 = 775.

Так, короче говоря, извлекая файл с полномочиями 775 с пользователем umask 002 производит, правильно, файл с полномочиями 775, результат 775 & ~002.

1
ответ дан 1 December 2019 в 10:39

Другие вопросы по тегам:

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