提取 tgz 文件后的权限更改

mah*_*ood 7 tar compression centos

在提取tgz文件时,我注意到权限更改为奇怪的东西!tgz 文件属于 root:root 但是文件夹属于 502:games

[root@rocks7 common]# ls -l
-rw-r--r-- 1 root root 4779534 May  2  2012 scalapack-2.0.2.tgz
[root@rocks7 common]# tar xf scalapack-2.0.2.tgz
[root@rocks7 common]# 
[root@rocks7 common]# ls -l
total 98576
drwxr-xr-x 10  502 games     4096 May  2  2012 scalapack-2.0.2
-rw-r--r--  1 root root   4779534 May  2  2012 scalapack-2.0.2.tgz
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?

Ste*_*itt 16

tarball 包含scalapack-2.0.2用户 id 502 拥有的目录以及与游戏组(或者,可能是游戏组的名称)对应的任何组 id。你可以通过运行看到这一点

tar tvf scalapack-2.0.2.tgz
Run Code Online (Sandbox Code Playgroud)

除了文件内容之外,Tar 档案还存储所有权和权限;由于您以 root 身份提取,因此该元数据将应用于提取的文件。tarball 本身的所有权对提取的数据的所有权没有影响。

由于您运行的是 CentOS,您大概运行的是 GNU tar,并且您可以使用--no-same-owner--no-same-permissions选项来提取压缩包,而无需应用存储的所有权和权限。其他tar实现可能有类似的选项(例如 -oFreeBSD 上tar)。