无法恢复 tar 的权限

jen*_*nny 3 linux tar ubuntu

tar: .: Cannot utime: Operation not permitted
tar: .: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)

我的文件位于“下载”文件夹中,并且正在将安装文件从“下载”文件夹运行到 /opt/pkg 文件夹,以下是我使用的命令

chmod -R 777 Downloads/*
sudo chmod -R 777 /opt/*
chmod +x petalinux-v2017.1-final-installer.run 
./petalinux-v2017.1-final-installer.run /opt/pkg
Run Code Online (Sandbox Code Playgroud)

最后安装程序失败并给出上述错误消息。我提供下载文件夹和/opt/pkg文件夹所需的所有权限。

sim*_*lev 5

问题:tar 的权限无法恢复

答:只有root才可以

参考:阅读askubuntu上的信息问答:

即使您使用tar's--same-owner标志,您仍然需要以 root 身份提取文件以保留所有权。

更新:tar以下是有关的行为的更多详细信息。假设我们已经user1创建了一个存档,其中tar cvpzf test.tar.gz .包含user2. 如果我们将存档提取到具有user2权限的目录中777,结果如下:

$ tar xpvzf test.tar.gz
./
./file1
./file2
tar: .: Cannot utime: Operation not permitted
tar: .: Cannot change mode to rwxrwxr-x: Operation not permitted
tar: Exiting with failure status due to previous errors

$ ls -al
drwxrwxrwx 2 user2 user2 .
-rw-rw-r-- 1 user1 user1 file1
-rw-rw-r-- 1 user1 user1 file2
Run Code Online (Sandbox Code Playgroud)

tar抛出错误,因为它无法更改 所拥有的文件的所有权和权限user2。然而,这些文件虽然属于user1.

如果在所有者拥有的目录中执行提取,则会发生以下情况user1

$ tar xpvzf test.tar.gz
./
./file1
./file2

$ ls -al
drwxrwxr-x 2 user1 user1 .
-rw-rw-r-- 1 user1 user1 file1
-rw-rw-r-- 1 user1 user1 file2
Run Code Online (Sandbox Code Playgroud)

文件夹和文件的权限都会恢复,即使user2无法恢复所有权,也不会引发任何错误。

从OP自己的回答来看,安装程序似乎会检查 的tar退出代码并在遇到错误时停止。chown将文件夹分配给当前用户会导致tar失败,但安装程序可以继续。