> For the complete documentation index, see [llms.txt](https://slackwarecn.gitbook.io/slackbook_cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://slackwarecn.gitbook.io/slackbook_cn/chapter_04/archive_and_compression/tar.md).

# tar

我们已经知道了如何压缩单个文件，但没有一个能像 `zip` 那样打包文件的。但这到此为止。Tape Archiver, 或 `tar(1)`, 就是 Slackware 最常用的打包工具。像其他打包工具那样，`tar` 生成一个包含其他文件和目录的文件。它默认不压缩生成的文件（该文件又叫“tarball”），不过 Slackware 所带的版本支持各种压缩方案，包括上面提到的那几种。

使用 `tar` 可以简单也可以复杂，随你喜好。一般，生成“tarball”要使用参数 `-cvzf` 。我们来深入地看看：

| 参数  | 意义             |
| --- | -------------- |
| `c` | 创建“tarball”    |
| `x` | 解压“tarball”    |
| `t` | 显示“tarball”的内容 |
| `v` | 输出更多信息         |
| `z` | 使用 gzip 压缩方案   |
| `j` | 使用 bzip2 压缩方案  |
| `J` | 使用 LZMA 压缩方案   |
| `p` | 保留权限信息         |

`tar` 对于参数的顺序要求比别的程序更严格。 `-f` 参数当读或写入文件时必须出现，并且紧跟其后的必须是文件名。看看这个例子：

```
darkstar:~$ tar -xvzf /tmp/tarball.tar.gz
darkstar:~$ tar -xvfz /tmp/tarball.tar.gz
```

上面，第一个命令能够正常运行，第二个会失败因为 `tar` 会尝试打开文件 `z` 而不是 `/tmp/tarball.tar.gz`.

> 译者注：因为 `-f` 参数要求一个文件名，因此在 `-f` 之后知道空白字符的字符串都会被当做一个文件路径使用。

既然我们已经充分了解了参数的意义，来让我们看看如何创建和解压“tarball”。前面已经说过，`-c` 参数用来创建而 `-x` 用来解压。如果想创建或解压一个压缩过的“tarball”, 我们需要指定合适的压缩方案。自然，如果不想压缩文件也可以不填。下面的这个命令使用 gzip 算法创建并压缩一个“tarball”。尽管没有严格要求，但还是加上 `.tar` 的扩展名以及所使用的压缩算法为最好。

```
darkstar:~$ tar -czf /tmp/tarball.tar.gz /tmp/tarball/
```
