无法恢复 tar 的权限

无法恢复 tar 的权限
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

我的文件在 Downloads 文件夹中,我正在将安装文件从 Downloads 文件夹运行到 /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

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

答案1

问题:无法恢复 tar 的权限

回答:只有 root 可以

参考:阅读此信息丰富的问答问库本图

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

更新:以下是有关 行为的更多详细信息tar。假设我们是,并且已创建了一个包含 所拥有的文件的user1档案。如果我们将档案提取到 所拥有且具有权限的目录中,则结果如下:tar cvpzf test.tar.gz .user2user2777

$ 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

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

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

从OP自己的回答来看,安装程序似乎检查tar退出代码,如果遇到错误就会停止。chown将文件夹发送给当前用户会导致tar静默失败,因此安装程序可以继续。

答案2

除了从存档中恢复文件外,tar还尝试恢复时间戳和权限。某些文件系统(可能是非 Linux,可能是网络驱动器)不支持客户端修改/设置 UNIX 时间戳或修改/设置 UNIX 权限。这些可能会导致以下错误tar

  • 无法超时:操作不允许
  • 无法将模式更改为 rwxrwxr-x:操作不允许

如果您仍然想继续提取文件,但不关心原始时间戳或权限,那么您可以在 tar 中使用这些附加选项:

-m, --touch
    Don't extract file modified time.

--no-overwrite-dir
    Preserve metadata of existing directories.

咨询man tar以获取更多信息。

答案3

chmod -R 777 Downloads/* sudo chmod -R 777 /opt/* mkdir /opt/pkg cd /home/my_ubuntu/Downloads chmod +x petalinux-v2017.1-final-installer.run ./petalinux-v2017.1-final-installer.run /opt/pkg

现在它将安装,并且当您以普通用户而不是 root 用户身份创建目录 pkg 时,tar 文件权限将恢复。

相关内容