![tar 将父目录的权限更改为 775](https://linux22.com/image/951407/tar%20%E5%B0%86%E7%88%B6%E7%9B%AE%E5%BD%95%E7%9A%84%E6%9D%83%E9%99%90%E6%9B%B4%E6%94%B9%E4%B8%BA%20775.png)
我尝试使用以下命令解压文件
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 中的第二个文件一样创建。