我想压缩一些文件以供 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-owner
tar 来防止存储您的用户名。或者,您可以使用 来设置另一个用户 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
,后续命令将看到新所有者。