tar格式的标题和结构

时间:2014-01-12 18:17:31

标签: archive tar

我有一个学校项目,这意味着在unix系统中创建一个类似tar的c程序。我有一些问题希望有人向我解释:

  1. 存档的维度。我理解(通过浏览互联网)存档的定义数量为每个512字节。所以标题有512个字节,然后是文件的内容(如果它只有一个要归档的文件)以512字节的块组织,然后是另外2个512字节的块。

    例如:假设我有一个0字节的txt文件要存档。这应该意味着要使用512 * 3个字节。为什么当我在unix中使用tar函数并单击属性时它有10.240字节?我认为它增加了一些0(NULL)字节,但我不知道在哪里,为什么以及有多少......

  2. 标题chcksum。我知道这应该是档案的大小。当我用hexdump -C检查它时,它看起来像是一个靠近存档的实际大小(点击属性时)的数字。例如,如果我存档0字节的txt文件,则为11200或11205或类似的东西。这个大小是八进制还是十进制?我的赌注是八进制的,因为你在标题中放入的所有信息都需要是八进制的。我在这一点上的第二个问题是从10240字节的原始大小中添加了多少东西?

  3. 标题模式。假设我有一个664的文件,格式文件为0,那么我应该放入标题0664.为什么,在正宗的存档上打印3在开始时更多0(000064)?

1 个答案:

答案 0 :(得分:1)

tar格式有各种版本,并非所有以前格式的扩展都始终相互兼容。因此,总会有一些猜测。例如,在非常旧的unix系统中,文件名不允许超过14个字节,因此文件名(包括路径)的空间很大;之后,如果文件名较长,则必须进行扩展,但没有空格,因此文件名分为2部分;甚至后来,gnu tar引入了@@ LongLink伪符号链接,这些链接会使旧版本的tars至少将文件恢复为原始名称。

1)Tar最初是* T * ape * Ar * chiver。为了实现对磁带的持续吞吐并避免过多地启动/停止磁带,需要一次写入几个块。 20个512字节的块是默认值,-b选项用于设置块数。通常,此大小是由硬件预先定义的,并且使用错误的阻塞因素导致生成的磁带无法使用。这就是为什么tar附加\ 0填充的块,直到tar大小是块大小的倍数。

2)文件大小为八进制,并包含放入tar的原始文件的真实大小。它与tar文件的大小无关。 校验和是根据头字节的总和计算的,但也存储在头中。因此,存储校验和的行为将改变标题,从而使校验和无效。这就是你首先存储所有其他头字段,将校验和设置为空格,然后计算校验和,然后用计算值替换空格的原因。

请注意,tarred文件的标头是纯ascii。这样,在过去,当一个tar文件(其组件是普通的ascii)被破坏时,管理员可以用编辑器打开tar文件并手动恢复组件。这就是tar格式的设计者害怕\ 0字节并使用空格的原因。

3)Tar文件可以存储块设备,字符设备,目录等。 Unix将这些文件模式存储在与权限标志相同的位置,并且头文件模式包含整个文件模式,包括文件类型位。这就是为什么这个号码比纯粹的许可更长。

http://en.wikipedia.org/wiki/Tar_%28computing%29也有很多信息。