我只是做了一个小实验,我用重复的文件创建了一个tar存档,看看它是否会被压缩,令我敬畏,事实并非如此!详细信息如下(为使阅读更愉悦,其结果):
$ dd if=/dev/urandom bs=1M count=1 of=a
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.114354 s, 9.2 MB/s
$ cp a b
$ ln a c
$ ll
total 3072
-rw-r--r-- 2 guido guido 1048576 Sep 24 15:51 a
-rw-r--r-- 1 guido guido 1048576 Sep 24 15:51 b
-rw-r--r-- 2 guido guido 1048576 Sep 24 15:51 c
$ tar -c * -f test.tar
$ ls -l test.tar
-rw-r--r-- 1 guido guido 2109440 Sep 24 15:51 test.tar
$ gzip test.tar
$ ls -l test.tar.gz
-rw-r--r-- 1 guido guido 2097921 Sep 24 15:51 test.tar.gz
$
首先,我创建了一个随机数据的1MiB文件(a)。然后我将其复制到文件b,并将其链接到c。创建tarball时,tar显然知道硬链接,因为tarball仅为〜2MiB而不是〜3Mib。
现在我期望gzip可以将tarball的大小减小到〜1MiB,因为a和b是重复的,并且应该在tarball中重复1MiB的连续数据,但是这没有发生。
为什么是这样?在这些情况下如何有效压缩压缩包?