首页 > 解决方案 > 为什么GNU tar --format=pax 会生成ustar 档案?

问题描述

我正在使用 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

标签: posixtararchive

解决方案


pax 交换格式

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

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

magic字段是该存档以该存档格式输出的规范。如果此字段包含ustar(来自 ISO/IEC 646:1991 标准 IRV 的五个字符,后跟 NUL),……</p>

当然,这仅适用于任何符合标准的pax实用程序,但我希望paxGNU 创建的格式档案tar能够以与符合标准的实现相同的方式创建档案pax


推荐阅读