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

Bor*_*nin 35 tar

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

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

Ste*_*itt 65

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

\n

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

\n
tar -cv -b 1 -f file.tar file.txt\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

  • 对这个奇怪的球默认值的解释:Tar 曾经常用于实际的磁带,它通常具有如此奇怪的块大小 (4认同)
  • 注意,当输出转到常规文件或使用传递给“bsdtar”的压缩选项进行压缩时,libarchive 的“bsdtar”(也支持“-b”)默认使用 512 字节块(压缩文件本身最终将被*填充) * 到 10k 块,但如果它不转到常规文件)。 (2认同)
  • @rackandboneman:“tar”字面意思是磁带存档,所以是的,这种格式是围绕直接写入磁带而设计的,这并不奇怪。 (2认同)

d.c*_*.c. 29

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

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

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

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