为啥GNU tar --format=pax 会生成ustar 档案?

Posted

技术标签:

【中文标题】为啥GNU tar --format=pax 会生成ustar 档案?【英文标题】:Why does GNU tar --format=pax produce ustar archives?为什么GNU tar --format=pax 会生成ustar 档案? 【发布时间】:2020-12-16 22:04:48 【问题描述】:

我正在使用 GNU tar (v1.29) 创建存档并使用 xxd 像这样检查它:

(
    cd "$(mktemp -d)"
    touch -d@0 1.txt 2.txt 3.txt
    tar \
        --format=pax \
        --numeric-owner \
        --owner=0 \
        --group=0 \
        --pax-option="exthdr.name=%d/PaxHeaders.0/%f,delete=atime,delete=ctime" \
        --mtime=@0 \
        -cf ../123.tar \
        1.txt 2.txt 3.txt
    xxd ../123.tar | grep -C1 ustar
    rm -rf $PWD
)

这给了我这个:

000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000100: 0075 7374 6172 0030 3000 0000 0000 0000  .ustar.00.......
00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
--
000002f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000300: 0075 7374 6172 0030 3000 0000 0000 0000  .ustar.00.......
00000310: 0000 0000 0000 0000 0000 0000 0000 0000  ................
--
000004f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000500: 0075 7374 6172 0030 3000 0000 0000 0000  .ustar.00.......
00000510: 0000 0000 0000 0000 0000 0000 0000 0000  ................

为什么tar --format=pax 会生成包含ustar 的存档?

【问题讨论】:

paxustar 的超集。这就是为什么。我在这里对 tar 存档格式进行了技术比较:serverfault.com/a/897948 【参考方案1】:

pax Interchange Format:

以 -x pax 格式生成的 pax 存档磁带或文件应包含 一系列的块。档案的物理布局应为 与ustar 交换格式中描述的ustar 格式相同。

"ustar" 后跟 1 个零/NUL 字节是 magic 字段的值,指示存档的类型:​​

magic 字段是此存档输出的规范 这种存档格式。如果此字段包含 ustar(五个 显示的 ISO/IEC 646:1991 标准 IRV 中的字符,后跟 NUL), ...

当然,这仅适用于任何符合 pax 的实用程序,但我希望由 GNU tar 创建的 pax 格式档案以与符合 pax 实施的相同方式创建档案。

【讨论】:

以上是关于为啥GNU tar --format=pax 会生成ustar 档案?的主要内容,如果未能解决你的问题,请参考以下文章

求助,我在linux下安装的Qt5为啥用GDB调试器无法进入源码

linux 非root安装gcc3.4.3

安装GLIBC

我的Linux上面为啥没有gcc编译器

为啥 Solaris 汇编器生成的机器代码与这里的 GNU 汇编器不同?

PAX 出于某种原因杀死了我的进程。 (PAX 用 SIGKILL 终止我的进程)