tar 将父目录的权限更改为 775

tar 将父目录的权限更改为 775

我尝试使用以下命令解压文件

sudo -u ubuntu tar -xzf tar.tgz -C "$(dirname "/home/ubuntu/deploy/")"

tar 日志如下

./
./deploy/deploy_scy.yml
./deploy/rollback_app.yml
./deploy/deploy_haproxy_single.yml

但问题是 tar 将 /home/ubuntu 的权限从 750 更改为 775

root@ip-10-10-78-205:/home/ubuntu# ll
total 7016
drwxrwxr-x  7 ubuntu ubuntu    4096 Mar 21 07:41 ./
drwxrwxr-x 25 ubuntu ubuntu   12288 Mar 22 05:18 deploy/

我该如何保留 /home/ubuntu 目录的权限(750)?此问题仅发生在 Ubuntu 22.04 中,我也不明白为什么。

在 Ubuntu 18.04 中,我使用相同的命令,权限 /home/ubuntu 仍然保持为预期的 750

答案1

它没有改变父目录。它改变了当前的目录。您可以./在输出中清楚地看到,这是/home/ubuntu您运行的命令,并且目录已被修改。

如果你不想修改当前工作目录,则不应提取.。也许可以只提取deploy目录:

sudo -u ubuntu tar -xzf tar.tgz -C "$(dirname "/home/ubuntu/deploy/")" ./deploy

我无法在 18.04 Docker 容器中重现此问题(它的行为就像您所说的 22.04 一样),所以我认为您的 tar 文件在您的 18.04 部署中只是有所不同。


在包含目录的目录中创建 tar 文件的这两种方式有区别deploy

tar cvf foo.tar ./deploy
tar cvf foo.tar .

后者将包含一个./具有当前运行工作目录权限的条目。例如,第一个命令将导致:

% tar tvf foo.tar
drwxr-xr-x muru/muru 0 2023-03-22 14:46 ./deploy/
-rw-r--r-- muru/muru 0 2023-03-22 14:46 ./deploy/foo

与第二条命令相比,以下内容:

# tar tvf foo.tar
drwxr-xr-x muru/muru 0 2023-03-22 05:57 ./
drwxr-xr-x muru/muru 0 2023-03-22 05:46 ./deploy/
-rw-r--r-- muru/muru 0 2023-03-22 05:46 ./deploy/foo

提取时,后者会将其所在目录的权限更新为存储的权限。您的 tar 文件可能像 18.04 中的第一个文件一样创建,也可能像 22.04 中的第二个文件一样创建。

相关内容