什么是tar文件
tar文件是以一定的方式,将多文件合成一个单文件,并不对文件进行压缩处理。tar最初的设计目的是将文件备份到磁带上(tape archive),因而得名tar。
tar包的结构
文件头 – 文件内容 – 文件头 – 文件内容 ------ 文件末尾
type Header struct {
name [100]byte
mode [8]byte
owner [8]byte
group [8]byte
size [12]byte
mtime [12]byte
checkSum [8]byte
fileType byte
linkName [100]byte
magic [6]byte
version [2]byte
uname [32]byte
gname [32]byte
devmajor [8]byte
devminor [8]byte
prefix [155]byte
padding [12]byte
}
以上是Tar中保存文件信息的数据结构,其后跟着的就是文件的内容。
- 其中,文件大小,修改时间,checksum都是存储的对应的八进制字符串,字符串最后一个字符为空格字符
- checksum的计算方法为出去checksum字段其他所有的512-8共504个字节的Ascii码相加的值再加上256
- 文件内容以512字节为一个块进行分割,最后一个块不足部分以0补齐
- 多个文件合成的tar,存储格式为:tar的头结构,文件体,tar头,文件体……。当所有文件都存储完成后,在文件末尾补上一个全零的tar结构(即1024个零值)
- 所有的tar文件大小都是512的倍数
- 一个空的文件,打包成tar后,为512*3个字节
新建一个空的tar,用010 Editor打开,如下:
检测tar文件格式的方法:
1、检测magic字段,即在0x101处检查字符串,是否为ustar。有时某些压缩软件将这个字段设置为空。如果magic字段为空,进入第2步。
2、计算校验和,按照上面的方法计算校验和,如果校验和正确的话,那么这就是一个tar文件。
注意:在windows下面,不支持uid、uname等,有的甚至不支持magic,这样就比较麻烦了。
参照:https://www.cnblogs.com/stephen-init/archive/2012/10/09/2716779.html