Compression TAR文件格式问题
我不清楚什么是正确的Compression TAR文件格式问题,compression,zip,gzip,tar,bzip2,Compression,Zip,Gzip,Tar,Bzip2,我不清楚什么是正确的.tar文件格式,因为我在三种情况下体验到了正确的功能(见下文) 根据我一直使用的.tar规范,magic字段(ustar)是以null结尾的字符串,version字段是八进制数,没有尾随的null 然而,我检查了在服务器上找到的几个.tar文件,发现magic和version字段的不同实现,这三个字段似乎都工作正常,可能是因为系统忽略了这些字段 请参见以下示例中单词ustar和root之间的不同(3)字节>> 情景1(20 20 00): 场景2(0020): 场景3(00
.tar
文件格式,因为我在三种情况下体验到了正确的功能(见下文)
根据我一直使用的.tar
规范,magic
字段(ustar)是以null结尾的字符串,version
字段是八进制数,没有尾随的null
然而,我检查了在服务器上找到的几个.tar
文件,发现magic
和version
字段的不同实现,这三个字段似乎都工作正常,可能是因为系统忽略了这些字段
请参见以下示例中单词ustar和root之间的不同(3)字节>>
情景1(20 20 00
):
场景2(0020
):
场景3(00
):
哪一种格式正确?在我看来,您的示例都不正确,至少POSIX格式不正确。
正如你所看到的: 第一个示例(
场景1
)的格式似乎与旧的GNU头格式相匹配:/* OLDGNU_MAGIC uses both magic and version fields, which are contiguous.
Found in an archive, it indicates an old GNU header format, which will be
hopefully become obsolescent. With OLDGNU_MAGIC, uname and gname are
valid, though the header is not truly POSIX conforming */
#define OLDGNU_MAGIC "ustar " /* 7 chars and a null */
在第二个和第三个示例(
场景2
和场景3
)中,版本
字段设置为意外值(根据上述文档,正确的值应为00
ASCII或0x30 0x30
hex),因此,此字段很可能被忽略。如果我执行此命令,则使用Fedora 18:
tar --format=posix -cvf testPOSIX.tar test.txt
我有一个POSIX tar文件格式:ustar\0(0x757374617200)
否则,如果我执行此操作:
tar --format=gnu -cvf testGNU.tar test.txt
我有一个GNU tar文件格式:ustar 0x20 0x20 0x00(0x7573746172202000)(旧GNU格式)
从/usr/share/magic文件:
# POSIX tar archives
257 string ustar\0 POSIX tar archive
!:mime application/x-tar # encoding: posix
257 string ustar\040\040\0 GNU tar archive
!:mime application/x-tar # encoding: gnu
0x20是八进制的40
我还尝试使用以下命令编辑十六进制代码:
00 20 20
00 00 00
然而,焦油工作正常。我已经没有问题了extract test.txt
但当我试图用以下命令编辑十六进制代码时:
00 20 20
00 00 00
焦油没有被认出来
因此,我的结论是正确的格式是:
20 20 00
试着在你的头上制作一些
.tar
文件,然后用hex viewer检查该文件,你会在它的头中看到ustar00
。我也希望如此,但我在我检查的几个文件中都没有找到,所以。。?!我在Centos 5.9系统上进行了两次测试,发现默认情况下输出文件包含“ustar”,因为TAR命令是GNU版本。如果我指定--posix
选项,输出文件将按预期包含“ustar00”。进一步参考:CentOS 6对00
没有问题,根据posix,正确的魔术是“ustar\0”,然后是“00”,其中“ustar\0”
是魔术,“00”
是版本。
00 00 00
20 20 00