我使用 tar -cvzf 命令压缩了一个大型常规 unix 文件 (.dat(。此文件的大小约为 200 GB。 压缩后,它的大小变成了27gb。但是在读取该压缩文件中的数据时,我可以看到在文件开头添加的匿名数据。 这可能吗? 我尝试再次解压缩该文件,发现解压缩的文件没有此类匿名记录。
GNU tar 命令是自由软件。请研究其源代码。当然,请阅读它的手册页 tar(1(。
实际上,tar
存档以头文件tar.h
中记录的标头开头。有一个与焦油相关的POSIX标准。
另见彼得·米勒的迟到实用程序。
不要将tar
存档与 Info-ZIP 处理的存档混淆zip
存档(因此zip
和unzip
命令(。
GNU zip - 一个压缩器,可以由tar
启动的gzip
程序,特别是你的tar czvf
命令 - 也是自由软件,当然你应该研究它的源代码,如果有兴趣。
一些Unix shell(特别是sash或busybox(有一个内置的tar
。
我尝试再次解压缩该文件,发现解压缩的文件没有此类匿名记录。
AFAIK,大多数Linux文件系统试图或多或少地实现基于read(2(和write(2(系统调用的POSIX标准,并且他们不知道记录。如果你需要"记录",可以考虑使用数据库(如sqlite或PostGreSQL(或索引文件(如GDBM( - 两者都建立在Linux文件系统或块设备之上。
另请阅读一本关于操作系统的好教科书。
请注意,"大型常规 unix 文件"主要是字节序列。它们内部没有记录的概念,除了作为其他用户空间程序通过 syscalls(2( 使用的约定。另请参阅 path_resolution(7( 和 inode(7(。