与 find 类似,tar 也是一个历史悠久的 UNIX® 工具。所以它的语法也有一点难记:
tar [选项] [文件……]
这里列出了一些选项。请注意,所有的选项都有其对应的长选项格式,但是您需要自行查看 tar(1),因为我们无法在此全部列出。
v
:详细模式。列出添加到归档文件或者从归档文件中提取的文件。当与 t
选项(见上文)联合使用时将输出文件的长列表,而不是短列表。
f <文件名>
:创建名为文件名
的归档文件,从归档文件文件名
中提取文件,或者列出归档文件文件名
中的文件。如果省略此参数,默认文件为 /dev/rmt0
,这通常是与一个流关联的特殊文件。如果文件参数是 -
(短横线),则输入或输出(取决于您是创建归档文件还是从归档文件中提取文件)将关联到标准输入或标准输出。
可供选择的设置还有很多,请参看 tar(1) 中的完整列表。比如其中非常有用的 d
选项。
现在,让我们来看一个例子。您想要将 /shared/images/
中的全部文件打包成为一个归档文件,并且用 bzip2 压缩成名为 images.tar.bz2
存放在您的主目录中。您就需要输入:
# # 注意:您必须进入您想要创建归档文件的目录! # $ cd /shared $ tar cjf ~/images.tar.bz2 images/
正如您看到的,我们在这里使用了三个选项:c
让 tar 知道我们想要创建归档文件,j
让其用 bzip2 进行压缩,而 f ~/images.tar.bz2
代表归档文件将会创建在主目录中,其名称为 images.tar.bz2
。我们现在来看看新创建的归档文件是否可靠。我们可以列出其文件列表:
# # 现在让我们回到主目录 # $ cd $ tar tjvf images.tar.bz2
我们在这里通知 tar 列出(t
)归档文件 images.tar.bz2
(f images.tar.bz2
)中的文件,并且事先通知该归档文件已经用 bzip2 压缩了(j
),我们还想获得长列表(v
)。现在,假设您不小心删掉了 images 目录。所幸您还有归档文件,而您可以通过将其中的文件提取到原来的位置 /shared
加以恢复。但是,由于您不想打乱您先前创建的用于查找新图像的 find 命令,您需要保留全部文件属性:
# # 转到您想要存放提取后文件的目录 # $ cd /shared $ tar jxpf ~/images.tar.bz2
接下来,我们假定您想要从归档文件中提取 images/cars
目录,而不需要别的。您可以输入:
$ tar jxf ~/images.tar.bz2 images/cars
如果您想要备份特殊文件,tar 能够识别这些文件的特殊性,而不会转存其中的内容。所以,您可以安全地将 /dev/mem
放在归档文件中。它还能够正确处理链接,所以也不用担心这个问题。对于符号链接,请查阅 manpage
中的 h
选项。
在介绍 tar 命令时,您已经看到了我们对这两个程序的大概描述。与 Windows® 中的 WinZip® 不同,存档和压缩是通过两个不同的工具完成的:tar 用于存档,而我们即将介绍的另外两个程序用于压缩数据:bzip2 和 gzip。可能您还使用其他压缩工具,诸如 zip、arj 或者 rar 。而它们在 GNU/Linux 下都有相应的工具(但一般很少使用)。
首先,bzip2 是作为 gzip 的替代品编写出来的。其压缩率通常较高,但工作时也会需要更多的资源。不过,为了兼容早先的系统 gzip 仍然在使用。
gzip [选项] [文件]
如果没有给出文件名,gzip 和 bzip2 都会从标准输入中取得数据,然后将结果发回标准输出。因此,您可以在管道中使用这两个程序。这两个程序都有一组类似的选项:
现在我们来举几个例子。如果您想要将当前目录中所有以 .txt
结尾的文件使用 bzip2 的最大压缩率压缩,就应该输入:
$ bzip2 -9 *.txt
。您想要将您的图像归档文件与别人分享,但对方没有 bzip2 只有 gzip。您无需先解压缩归档文件,然后再重新压缩。您只需将其解压缩到标准输出,然后使用管道从标准输入压缩,再将输出重定向到新的归档文件中。即:
bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz
您可以输入 bzcat 来代替 bzip2 -dc。gzip 也有类似的命令,但命令名是 zcat,而非 gzcat。如果您想要查看压缩文件中的内容而不想解压的话,您还可以对 bzip2 文件使用 bzless,对 gzip 文件使用 zless。给您留个作业,如果要查看压缩文件中的内容,既不许事先解压,也不许使用 bzless 或 zless,您该输入什么命令呢?