来自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 设置的,除非用户是 root:
% 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 仍然保留原始文件的权限。
有人可以解释为什么会这样吗?
由于adonis(发现问题的人)尚未发布答案,因此我将自己发布答案。
这与我的想法相反,意味着 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
.