tar 而不保留用户

tar 而不保留用户

我想压缩一些文件以供 http 分发,但发现.tar.gz保留了用户名和用户 ID,并且似乎没有任何方法可以不这样做? (tar 有一个--numeric-owner选项,它似乎忽略用户名,但仍然保留用户 ID。)

这是否意味着.tar.gz对于文件分发来说这是一个糟糕的选择,因为我的系统可能是唯一拥有我的用户 ID 和用户名的系统?有.7z更好的文件分发格式吗,或者您有其他建议吗?

答案1

一般来说,.tar.gz 是一种可用的文件分发格式。 GNU tar 允许您不保留所有者和权限。

$ tar -c -f archive.tar --owner=0 --group=0 --no-same-owner --no-same-permissions .

https://www.gnu.org/software/tar/manual/html_section/tar_33.html#SEC69

如果您的 tar 版本不支持 GNU 选项,您可以在创建用于分发的 tar.gz 文件之前将源文件复制到另一个目录树并更新那里的组和所有权。

--owner=0并且--group=0仅在文件的压缩阶段起作用,而在解压阶段则不起作用。
--no-same-owner --no-same-permissions仅在解压阶段起作用,而在压缩阶段则不起作用。
将它们放在一起可以构成一个默认函数,其中 tar 具有不记住压缩或解压缩文件的用户的特征。
当压缩期间文件以用户和组0存储时,在通过GUI解压期间,它们假定解压文件的用户的权限,因此在压缩阶段忘记用户是有效的解决方案。

答案2

您正在寻找类似tar --owner=0 --group=0设置root/拥有的所有内容的东西root

答案3

使用 GNU,您可以使用--numeric-ownertar 来防止存储您的用户名。或者,您可以使用 来设置另一个用户 ID --owner=ID。提取时,这些用户 ID 将被删除,除非提取者是 root 用户。

捆绑文件的一种常见方法是cpio通常与--no-preserve-owner选项一起使用。这就是rpm文件的构建方式。

但带有用户 ID 的 tar 很少会成为问题。如果你想偏执一点,你可以使用专用帐户进行最终捆绑。

答案4

您可以欺骗性tar地对待这些文件,就好像它们有不同的所有者一样假根

Fakeroot 在似乎具有文件操作 root 权限的环境中运行命令,通过将 LD_PRELOAD 设置为具有 getuid()、stat() 等替代版本的库。这对于允许用户创建存档(tar、 ar、.deb .rpm 等),其中的文件具有 root 权限/所有权。

最初,所有文件都将显示为 root 所有,但您可以chown从 shell 内部获取它们fakeroot,后续命令将看到新所有者。

相关内容