tar文件结构

什么是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

检测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

### 关于 `tar` 文件的使用方法 #### 压缩 `.tar.gz` 文件 要创建一个新的 `.tar.gz` 归档文件并对其进行压缩,可以使用 `-czvf` 选项。其中,`-c` 表示创建新归档文件,`-z` 表示使用 gzip 进行压缩,`-v` 表示显示详细信息,而 `-f` 则用于指定输出文件名[^3]。 ```bash sudo tar -czvf archive.tar.gz /path/to/directory/ ``` 此命令会将 `/path/to/directory/` 中的内容打成名为 `archive.tar.gz` 的压缩。 --- #### 解压 `.tar.gz` 文件 对于已有的 `.tar.gz` 文件,可以通过以下命令进行解压: ```bash tar -xzvf archive.tar.gz ``` 这里,`-x` 是提取文件的意思,其余选项含义同上[^2]。 --- #### 压缩 `.tar.xz` 文件 如果目标是生成 `.tar.xz` 类型的文件,则需替换 `-z` 参数为 `-J`,表示采用 xz 格式进行高压缩率处理[^1]: ```bash sudo tar -cjvf archive.tar.xz /another/path/ ``` 上述操作将会把 `/another/path/` 下的所有数据封装到一个叫做 `archive.tar.xz` 的高度压缩档案里。 --- #### 解压 `.tar.xz` 文件 同样地,针对 `.tar.xz` 文件类型的解压过程如下所示: ```bash tar -xJvf archive.tar.xz ``` 通过该指令能够恢复由前一步骤产生的压缩文档中的原始资料结构。 --- #### 总结常用参数及其功能 | 参数 | 功能描述 | |------|----------| | `-c` | 创建新的存档文件 | | `-x` | 提取(解压)现有的存档 | | `-t` | 查看存档内的内容列表 | | `-r` | 向已经存在的存档追加文件 | | `-u` | 更新已有存档里的文件 | | `-z` | 调用gzip来进行压缩 | | `-j` | 调用bzip2来执行更高的压缩比率 | | `-J` | 使用xz实现最佳压缩效果 | 以上即是对Linux环境下如何利用`tar`命令完成不同类型(`gz`, `bz2`, 及 `xz`)压缩与解压工作的全面解析。 ```python # Python 示例:调用 subprocess 执行 tar 命令 import subprocess def compress_tar_gz(directory, output_file): command = ['tar', '-czvf', output_file, directory] result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) compress_tar_gz('/example/dir/', 'output.tar.gz') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值