Exp*_*r09 11
v7、ustar和格式之间的一些技术比较pax:
POSIX.1-1988 之前的格式。
\n\'\\0\')、目录、硬链接 (typeflag 1)、符号链接 (typeflag 2)。目录由名称字段中的尾部斜杠标识。参考文献1ustar 从 v7 格式扩展了标头块,未压缩时,ustar tarball 的大小与 v7 tarball 相同。没有什么大理由更喜欢 v7 格式,除非你故意剥离 ustar 存档的信息。
\n\'\\0\'或0)、目录(用 typeflag 标记5)、硬链接、符号链接、字符设备 ( 3)、块设备 ( 4)、FIFO ( 6)。(允许使用文件类型的供应商扩展名A。Z)ustar 与预标准 v7 格式 \xe2\x80\x930以及5常规文件和目录的类型标志 和 存在细微的、向后不兼容的差异。在 v7 中,typeflag字段仅用于指示链接,而不指示其他文件类型。
pax 通过(可选)扩展标头块扩展了 ustar 格式,当通过旧的 tar 程序提取时,这些扩展标头看起来像常规文本文件。扩展标头在内部通过类型标志x(文件扩展标头)和g(全局扩展标头)进行标识。它们的无限扩展性还意味着 pax tarball 通常会比 ustar 更大。\n它有利于归档,但对于软件分发格式来说有点臃肿。
pax 是 ustar 格式 \xe2\x80\x93 的超集,如果删除所有扩展标头,pax tarball 就与 ustar 没有什么不同。
\n您可以阅读本文以了解可以以 pax 格式扩展的内容。但与ustar相比,总结一下:
\npath=扩展标头中的关键字)。linkpath=关键字)size(文件大小)、uid(用户 ID)、uname(用户名)、gid(组 ID)、gname(组名)都可以扩展到无限长度。path、linkpath和uname的UTF-8 编码gname。atime) 可以与修改时间 ( ) 一起存储mtime。注意:POSIX 不强制要求使用文件名模式来存储扩展标头,因此实现可以自由地创建他们想要的任何名称模式。例如,在 GNU tar 中,名称模式是通过--pax-option=exthdr.name=选项控制的。如果您计划制作确定性 tarball(在tar/pax实现中),请注意这一点。
根据GNU tar手册,GNU tar是基于POSIX.1ustar标准的早期草案。但 GNU 扩展使其tar与ustar格式不兼容。如果你想制作一个可移植的存档,你应该避免使用 GNU tar 格式,而倾向于使用paxor ustar。
与 ustar 的magic和version字段相比, GNU tar 格式可以用的magic字段(8 个字节)来识别。ustar<space><space><nul>ustar<nul>00
尽管如此,GNU tar 格式仍向后兼容 v7 格式。
\nustar与使用前缀字段扩展路径不同,GNU tar 将长文件名存储在(非 pax)扩展头中,该头具有 typeflag L。类似地,链接目标通过带有 typeflag 的扩展标头进行扩展K。D)。请参阅 GNU tar--incremental选项。M)。请参阅 GNU tar--multi-volume选项。S)。V),或存档卷的标签。请参阅 GNU tar--label选项。oldgnu(GNU tar <= 1.12) 和(GNU tar >= 1.13.12) 格式之间的差异gnu对于最终用户来说很小,但根据源代码中的手册和create.c和NEWS,至少有两个差异: \noldgnuformat 将始终以空字节终止字符串文件名、用户名和组名。(这意味着在使用扩展标头之前,文件名最多包含 99 个字符。)GNU tar 手册实际上有一整节专门介绍tar 存档格式。格式ustar和pax基于 POSIX 标准,并且gnu非常普遍。我会避开其他人。
我的建议是选择pax,那就是POSIX.1-2001。GNU tar 将使其成为未来的默认设置,甚至旧的ustar实现也可以解压缩它。它也是限制最少的格式。
您可以创建POSIX.1-2001归档文件,例如使用 GNU tar 通过指定--format pax或使用单独的pax 归档程序。