使用 tar 命令的权限

Permission with tar command

我有一些关于 linux "tar" command.I 的问题想解压一个 config001.gz 到一个目录(具有所有者 root ,组 root 和 777 权限,如中所示图片).

我的原始目录和tar获取目录如图所示。
我的问题是:

我的坐骑信息: fuse.mfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0

why there is en empty folder in a config001.tgz file?

tar 存档中包含 "root folder"。 tar 所在的文件夹。包括权限、所有者和组、权限和 creation/modification(或其中之一,我不确定)日期。您可以创建这样的存档:

mkdir -p /tmp/a
cd /tmp/a
echo 123 > 1
echo 234 > 2
tar cfvp /tmp/test.tar .

# and inspect with:
tar -tvf ./test.tar 
drwxr-xr-x kamil/kamil       0 2019-07-15 12:50 ./
-rw-r--r-- kamil/kamil       4 2019-07-15 12:50 ./2
-rw-r--r-- kamil/kamil       4 2019-07-15 12:50 ./1

通过指定 .,即。当前目录,关于当前目录本身的信息将包含在他tar中。 IE。有关所有者和组、权限和日期的信息。

if I don't append --no-overwrite-dir after command,it will raise error, what permission does "tar" want to change?

tar 想更改您所在目录的权限。 hpc_dir 目录。 hpc_dirroot 所有,所以 tar 不能 change/touch 它。

why --no-overwrite-dir option can fix the problem?

因为 tar 看到当前目录 hpc_dir 存在。因此,tar 不会尝试创建目录,也不会尝试更改目录的所有者和组权限,也不会尝试恢复目录的创建日期。

您可以使用 mkdir somedir; tar xzfv archive.tar -C somedir - 这样 somedir 将由当前用户创建,因此 tar 将能够更改其属性。

或者您可以只更改 hpc_dir 目录的所有者,让您的用户修改它。