要节省空间那么直接xz,压缩率刚刚的
centos7 root@parallels:/var/log# du -sh a.txt485M a.txtcentos7 root@parallels:/var/log# time xz a.txtreal 0m47.252suser 0m47.066ssys 0m0.178scentos7 root@parallels:/var/log# du -sh a.txt.xz724K a.txt.xzcentos7 root@parallels:/var/log# rpm -qa xzxz-5.2.2-1.el7.x86_64
在Linux系统上有很多工具可以用来压缩文件,但它们的行为方式或产生的压缩程度并不相同。在这篇文章中,我们将对其中的五个工具进行比较。
Linux上有不少压缩文件的命令。其中最新最有效的是xz,但它们都有优点,既能节省磁盘空间,又能保存文件供以后使用。在这篇文章中,我们将对这些压缩命令进行比较,并指出它们的显著区别。
tar
tar命令不是专门的压缩命令。它一般是用来把一些文件拉成一个文件,方便传送到另一个系统,或者把文件作为一个相关的组进行备份。它还提供了压缩这个功能,这是很有意义的,增加z压缩选项就可以实现这个功能。当在tar命令中加入z选项的压缩功能时,tar会使用gzip来进行压缩。
$ tar cfz bigfile.tgz bigfile ^ ^ | | +- new file +- file to be compressed$ ls -l bigfile*-rw-rw-r-- 1 shs shs 103270400 Apr 16 16:09 bigfile-rw-rw-r-- 1 shs shs 21608325 Apr 16 16:08 bigfile.tgz
请注意文件大小的显著减少。如果你喜欢,你可以使用tar.gz扩展名,这可能会使文件的特征更明显一些,但大多数Linux用户可能会认识到tgz的意思是一样的--tar和gz的组合,以表明该文件是一个压缩的tar文件。压缩完成后,你将同时拥有原始文件和压缩文件。要将多个文件收集在一起,并在一个命令中压缩产生的 "tar",使用相同的基本语法,但指定要包含的文件为一组,而不是单个文件。下面是一个例子。
$ tar cfz bin.tgz bin/* ^ ^ | +-- files to include + new file
zip
zip 命令创建了一个压缩文件,同时保留了原始文件的完整性。语法很简单,除了和tar一样,你必须记住你的原始文件应该是命令行的最后一个参数。
$ zip ./bigfile.zip bigfileupdating: bigfile (deflated 79%)$ ls -l bigfile bigfile.zip-rw-rw-r-- 1 shs shs 103270400 Apr 16 11:18 bigfile-rw-rw-r-- 1 shs shs 21606889 Apr 16 11:19 bigfile.zip
gzip
gzip命令使用起来非常简单。你只需输入 "gzip",后面跟着你要压缩的文件名。与上述命令不同的是,gzip将对文件进行 "原地 "加密,换句话说,原始文件将被加密后的文件所取代。换句话说,原始文件将被加密后的文件所取代。
$ gzip bigfile$ ls -l bigfile*-rw-rw-r-- 1 shs shs 21606751 Apr 15 17:57 bigfile.gz
bzip2
与gzip命令一样,bzip2会对你选择的文件进行 "原地 "压缩,只留下原始文件。
$ bzip bigfile$ ls -l bigfile*-rw-rw-r-- 1 shs shs 18115234 Apr 15 17:57 bigfile.bz2
xz
作为压缩命令团队中相对较新的一员,xz在压缩文件的能力方面是一个领跑者。和前面两个命令一样,你只需要向命令提供文件名。同样,原始文件也会被压缩。
$ xz bigfile$ ls -l bigfile*-rw-rw-r-- 1 shs shs 13427236 Apr 15 17:30 bigfile.xz
对于大文件,你可能会注意到,xz比其他压缩命令需要更长的运行时间,但压缩结果非常令人印象深刻。需要考虑的比较大多数人都听过这样一句话:"大小不是万能的"。所以,让我们来比较一下文件大小以及其他一些问题,当你制定计划如何压缩文件时,需要考虑的问题。,下面显示的统计数据都与压缩上面显示的示例命令中使用的单个文件--bigfile有关。这个文件是一个大而随机的文本文件。压缩率将在一定程度上取决于文件的内容。
缩小大小
经过比较,上面显示的各种压缩命令得到了以下结果。百分比代表压缩后的文件与原始文件的比较。
-rw-rw-r-- 1 shs shs 103270400 Apr 16 14:01 bigfile-------------------------------------------------------rw-rw-r-- 1 shs shs 18115234 Apr 16 13:59 bigfile.bz2 ~17%-rw-rw-r-- 1 shs shs 21606751 Apr 16 14:00 bigfile.gz ~21%-rw-rw-r-- 1 shs shs 21608322 Apr 16 13:59 bigfile.tgz ~21%-rw-rw-r-- 1 shs shs 13427236 Apr 16 14:00 bigfile.xz ~13%-rw-rw-r-- 1 shs shs 21606889 Apr 16 13:59 bigfile.zip ~21%
xz命令胜出,最后只有原文件的13%大小,但这些压缩命令都使原文件大小减少了不少。
无论原始文件是否被替换bzip2、gzip和xz命令都是用压缩版本替换原始文件。而tar和zip命令则不会。
运行时间
xz命令似乎比其他命令需要更多的时间来加密文件。对于bigfile来说,大概的时间是。
command run-timetar 4.9 secondszip 5.2 secondsbzip2 22.8 secondsgzip 4.8 secondsxz 50.4 seconds
解压时间可能比压缩时间小得多。
文件权限
无论您在原始文件上设置了什么权限,压缩文件的权限将基于您的umask设置,但bzip2除外,它保留了原始文件的权限。
与Windows的兼容性
zip命令可以创建一个文件,这个文件可以在Windows系统、Linux和其他Unix系统上使用(即解压),而不需要安装其他工具,这些工具可能可用,也可能不可用。
解压文件
解压文件的命令与压缩文件的命令类似。在运行了上面所示的压缩命令后,这些命令将适用于解压bigfile。
tar: tar xf bigfile.tgz
zip:unzip bigfile.zip
gzip: gunzip bigfile.gz
bzip2: bunzip2 bigfile.gz2
xz: xz -d bigfile.xz 或 unxz bigfile.xz。
运行你自己的压缩比较
如果你想自己运行一些测试,抓取一个大的但可替换的文件,并使用上面显示的每个命令压缩它--最好使用一个新的子目录。如果你想在测试中包含xz,你可能必须先安装xz.这个脚本可以使比较更容易,但可能需要几分钟来完成。
#!/bin/bash# ask user for filenameecho -n "filename> "read filename# you need this because some commands will replace the original filecp $filename $filename-2# clean up first (in case previous results are still available)rm $filename.*tar cvfz ./$filename.tgz $filename > /dev/nullzip $filename.zip $filename > /dev/nullbzip2 $filename# recover original filecp $filename-2 $filenamegzip $filename# recover original filecp $filename-2 $filenamexz $filename# show resultsls -l $filename.*# replace the original filemv $filename-2 $filename
参考:
https://www.networkworld.com/article/3538471/how-to-compress-files-on-linux-5-ways.html