我运行命令:
tar -cf myArchive.tar myDirectory/
gzip myArchive.tar
然后我将文件复制到许多不可靠的介质上,然后使用以下命令将其解压缩:
tar -xzf myArchive.tar.gz
我压缩了tar球这一事实,是否可以以任何方式保证未包装内容的完整性或至少是CRC?
我运行命令:
tar -cf myArchive.tar myDirectory/
gzip myArchive.tar
然后我将文件复制到许多不可靠的介质上,然后使用以下命令将其解压缩:
tar -xzf myArchive.tar.gz
我压缩了tar球这一事实,是否可以以任何方式保证未包装内容的完整性或至少是CRC?
Answers:
tar
本身不会写下校验和以供以后比较。如果您gzip
有tar
存档,则可以使用该功能。
tar
用途compress
。如果-Z
在创建存档tar
时使用该标志,则compress
在读取或写入存档时将使用该程序。从gzip
联机帮助页:
标准压缩格式的设计不允许进行一致性检查。
但是,您可以使用该-z
参数。然后tar
通过读写档案gzip
。并gzip
写一个CRC校验码。要显示该校验和,请使用该命令:
$ gzip -lv archive.tar.gz
method crc date time compressed uncompressed ratio uncompressed_name
defla 3f641c33 Sep 25 14:01 24270 122880 80.3% archive.tar
从gzip
联机帮助页:
当使用前两种格式(意味着gzip或zip)时,gunzip检查32位CRC。
tar
没有完整性检查。例:
$ echo JJJJJJJJJJJJJJJJJJ > b
$ tar cvf a.tar b
$ sed -i s/JJJJJJJJJJJJJJJJJJ/tttttttttttttttttt/g a.tar
$ tar xvf a.tar
$ cat b
tttttttttttttttttt
看到,a.tar
存档的内容已更改,因此文件的b
内容完全不同,但是tar并未注意到这一点。对于任何tar都是如此,包括tar-1.28(最新)和tar两种格式--format=gnu --format=posix
。该pax
命令(备用tar阅读器)pax -r < a.tar
也不会注意到存档更改。
如果tar解包时发现错误,它将打印一条消息并以非零退出值退出。此行为与创建tar文件后使用的压缩算法无关。
如果要验证文件是否已通过不可靠的链接成功发送到目标,请在发送前创建文件的md5和,并在接收后验证md5和。
tar
自己负责。如果需要,您可以添加一个附加层:如果tar文件的完整性得到了验证,那么tar归档文件中的内容也可以。但是所有这些首先都应该由用于传输数据的协议来处理。
tar
(至少没有的-z
选项)不执行完整性检查。另外,接受的答案也说明了这一点。问题是:是否gzip
(或使用该-z
选项)添加完整性检查?