![我可以提取覆盖的 tar 存档,同时保留原始目标文件的所有权吗?](https://linux22.com/image/152794/%E6%88%91%E5%8F%AF%E4%BB%A5%E6%8F%90%E5%8F%96%E8%A6%86%E7%9B%96%E7%9A%84%20tar%20%E5%AD%98%E6%A1%A3%EF%BC%8C%E5%90%8C%E6%97%B6%E4%BF%9D%E7%95%99%E5%8E%9F%E5%A7%8B%E7%9B%AE%E6%A0%87%E6%96%87%E4%BB%B6%E7%9A%84%E6%89%80%E6%9C%89%E6%9D%83%E5%90%97%EF%BC%9F.png)
我有一个特定的用例,我想提取一个 tar 存档(作为 root)并故意用存档的内容覆盖一些目标文件。这一切都很好并且很容易实现,但我还想保留原始目标文件的原始所有权和权限。举个例子:
$ touch file && tar cf test.tar.gz file && sudo chown www-data:www-data file && sudo tar xf test.tar.gz && ls -l file -rw-r--r-- 1 tim tim 0 May 1 11:26 file
在这里,我以我的用户 ( ) 身份创建一个文件tim:tim
,将其存档,将其所有权更改为www-data:www-data
,然后(以 root 身份)提取存档,覆盖原始文件。正如您所看到的,它的所有权已被修改为预存档状态下的文件的所有权,而在提取后,我希望它由www-data:www-data
.
我已经相当仔细地查看了tar
手册页,但看不到一种立即明显的方法来完成我想要的事情。我错过了什么吗?
答案1
作为普通用户,您将无法覆盖 www-data 拥有的文件,而所有者只有写权限,因此您想要的内容在您的示例中无法工作。
如果您的用户被允许写入这些文件,那么有效的方法是使用--overwrite
.但是,当tar
尝试更改文件的修改时间和权限时,您会收到错误消息,因为您作为普通用户不允许对不属于您的文件执行此操作。