Answers:
如何创建tar.xz归档文件,以使文件在由root解压缩时具有root所有权?
这取决于解包的根本:
tar --no-same-owner -xf ...
如果要使它们成为所有根目录,可以使用
tar --owner=root --group=root -cf ...
-
在短选项字符串之前需要一个:tar --owner=root --group=root -cfpJ ...
即-cfpJ
,而不是cfpJ
。
tar --owner=root --group=root -cfpJ files.tar.xz files/
给了我另一个错误:tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
此外,它创建了一个名为的文件pJ
。
f
结尾放在最后(因为从直观上讲它更有意义)并且低估了,-cfpJ
但是在BUT -cpJf
工作中我遇到了同样的失败。
的fakeroot的效用,或较新的实用的fakeroot-NG(同样的目的,不同的实现技术)上运行的程序和假装的程序,它运行为根,并且该系统调用,如chown
成功了。只有程序认为这些调用成功,文件系统中实际上没有任何内容反映出来(因为fakeroot
没有额外的特权,所以不能这样做)。但是,如果程序更改了文件的所有权,然后根据该文件的所有权采取了某些措施,则可能会更改程序的行为。
通过运行在以下情况下发生的fakeroot环境来获得fakeroot有用工作的典型方法:
例:
fakeroot sh -c '
chown root:root usr/bin/foo
tar cf foo.tar usr
'
您需要使用的单个调用fakeroot
,因为调用之间没有内存。
仅出于完整性考虑,我要提到的是,如果您的Linux内核≥3.8,则命名空间是创建假装根环境的另一种方法。用户层支持还不完善,因此我将不做更多详细介绍。
解决问题的另一种方法是将存档安装为目录。您可以使用archivemount,它能够通过libarchive修改几种归档格式,包括压缩的tar。
mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
archivemount
,但仍然需要特权提升,即使用户位于允许挂载和卸载的受信任组中,该过程也会在上失败chown
,因此需要使用某种第三方工具,例如fakeroot
或名称空间也一样
tar --owner=root --group=root cfpJ files.tar.xz files/
给我错误tar: You must specify one of the
-Acdtrux'或--test-label' options Try
tar --help'或tar --usage' for more information.