我是一个新的 Linux 用户,还在学习它。据我了解,默认情况下,该tar
命令(单独且不带z
,j
或等选项J
)不会压缩文件。它仅将多个文件捆绑到一个文件中。下面是我的测试。
root@u2004:~# du -sh /etc/
11M /etc/
root@u2004:~# tar cf etc.tar /etc
tar: Removing leading `/' from member names
root@u2004:~# du -sh etc.tar
6.6M etc.tar
root@u2004:~#
可以看到,/etc
目录下的文件一共11M。将它们归档到单个文件后,新的归档文件为 6.6M。大小差异从何而来?是因为文件是连续写入并挤在一起的吗?
默认情况下
du
,以“块”为单位测量文件大小。因此,每个小文件(小于一个块)根据需要占用尽可能多的块,其余部分为空。但它不能被另一个文件使用(因为一个块只能属于一个文件)。因此,您有一些“浪费”的字节数。tar
另一方面,连接所有文件。“浪费”的空间要少得多。如果您想更好地预测 tar 大小,可以使用 key
-b
for 。du
意思是如果你跑
你会得到彼此更接近的数字。差异将来自文件的描述。第一种情况下的目录大小和第二种情况下的 tar 标头大小。
要进一步调查,您可以从以下内容开始:
这将告诉您该目录所在的物理设备(列文件系统)
在此处定义您的设备,您将获得该设备上块的大小。
如果你这样做
du /some_test_dir
并且那个目录是空的 - 你会得到一个块大小。如果您现在放置一个文件(或许多文件),所有这些文件的长度都为零,那么
du
在目录上仍然会给出一个块大小 - 这是因为文件根本不占用任何空间,以及关于它们的信息存储在目录的块中。对于下一个测试,在这个目录中创建 N 个文件,每个文件的大小都小于一个块。实际大小无关紧要,它必须大于零,小于一个块。现在
du
目录上会给你(N+1)*block
。这里每个文件都占用一个块,而目录本身占用一个块。如果您有很多文件(多少取决于文件系统),那么目录本身可以增长,以便在其中存储文件信息。但是目录大小将始终是块大小的倍数。