为什么 tar 存档比文本文件大很多,10240 字节?

为什么 tar 存档比文本文件大很多,10240 字节?

我已经检查过这两个问题(问题一,问题二),但它们对我理解没有帮助。我有一个file.txt包含 40 行字符串的文件Hello World!ls -l显示其大小为 520 字节。现在我将这个文件归档tar -cvf file.tar file.txt,当我ls -l再次归档时,我看到它file.tar是 10240 字节。为什么?

我读过一些手册并了解到归档和压缩是不同的事情。但有人可以解释一下它是如何工作的吗?

答案1

tar默认情况下,存档的最小大小为 10240 字节;看GNUtar手册详细信息(但这不是 GNU 特定的)。

使用 GNU tar,您可以通过指定不同的块大小或不同的块因子或两者来减少此问题:

tar -cv -b 1 -f file.tar file.txt

结果仍然会大于file.txt,因为除了其本身之外file.tar还存储有关元数据。在大多数情况下,您将看到一个用于文件元数据(名称、大小、时间戳、所有权、权限)的块,然后是文件内容,然后是两个用于归档结束条目的块,因此包含非归档的最小归档零长度文件的大小为四个块(2,048 字节和一个 512 字节块)。file.txtfile.txt

答案2

tar除了简单地存储文件之外,还需要做三件事:

  1. 存储元数据(文件名、模式、所有者、组、日期...)
  2. 标记文件末尾。
  3. 标记存档的结尾。

tar意思是“磁带档案”。对于磁带来说,确定文件结尾在哪里很重要,并且即使在搜索时设备也需要知道它(磁带移动速度更快)。因此,为了磁带方便, tar 在每个文件的末尾添加了一些零,并在存档的末尾添加了另一组血清。您指出的第二个问题确实解释了这一点。

您可以使用查看存档中的内容hexdump -C archive.tar |less

相关内容