Answers:
的.gz
,.xz
,.bz2
,.7z
,.lz
,.z
后缀来明确该文件与所述压缩算法进行压缩。它的用途不仅限于.tar
文件,您还将看到诸如initrd.gz
(压缩的初始ramdisk)或manual.txt.gz
(用于压缩的文本文档)的文件。您可能还会看到file.tgz
,这也表示gzip压缩的tarball(如file.tar.gz
)。
文件扩展名是一个约定,它不一定描述文件内容。要检查您正在处理哪种文件,请使用file
命令。例:
$ file data.tar.gz
data.tar.gz: gzip compressed data, from Unix
$ gunzip -c data.tar.gz | file -
/dev/stdin: POSIX tar archive (GNU)
以我的经验,gzip压缩文件(.gz
)是最常见的文件。尽管还有其他算法可以产生更好的压缩率,但压缩和解压缩速度很快。
除了@Lekensteyn答案,我还要补充一点,这种行为是基于“ 做一件事,并且做得很好”的原理- tar
程序知道如何将多个文件放入单个流(带有.tar
扩展名),gzip
知道如何压缩单个文件(添加.gz
扩展名)*。通过组合这些工具,您可以创建一个将多个文件压缩为单个.tag.gz
文件的命令。
这种方法非常灵活-您可以组合一些标准的Unix命令来执行各种操作。例如,如果您编写了一个更好的程序来压缩文件,则无需修改tar
即可使其能够创建.tar.mymegazip
文件-只需将tar
输出通过管道传递到压缩器即可。
同样,tar
对SSH一无所知,但是通过组合命令,您可以创建一个脚本来存档文件,然后通过SSH将文件上传到远程计算机,然后在此处取消存档。
将此zip
命令与不是起源于Unix的命令进行比较-它具有内置工具来压缩整个目录,加密文件,将归档文件分割成较小的zipfile等。
(脚注)-是的,tar
能够使用-z
和-j
开关本身gzip或bzip文件,添加它们是为了方便起见,而GNU tar实际上是在生成gzip
或bzip2
作为新进程生成。
tar c dir/ | gzip > dir.tar.gz
和tar czf dir.tar.gz dir/
命令执行相同的操作。其中一个例子tar
是与SSH和组合tar
(再次):tar cz Documents/ | ssh user@host 'tar xz
(rsync的当量将是:rsync -a Documents user@host:
)