今天扣丁学堂给大家介绍一下关于如何在Linux使用文件压缩,首先Linux系统为文件压缩提供了许多选择,关键是选择一个最适合你的。
如果你对可用于Linux系统的文件压缩命令或选项有任何疑问,你也许应该看一下aproposcompress这个命令的输出。如果你有机会这么做,你会惊异于有如此多的的命令来进行压缩文件和解压缩文件;此外还有许多命令来进行压缩文件的比较、检验,并且能够在压缩文件中的内容中进行搜索,甚至能够把压缩文件从一个格式变成另外一种格式(如,将.z格式变为.gz格式)。
你可以看到只是适用于bzip2压缩的全部条目就有这么多。加上zip、gzip和xz在内,你会有非常多的选择。
$aproposcompress|grep^bz
bzcat(1)-decompressesfilestostdout
bzcmp(1)-comparebzip2compressedfiles
bzdiff(1)-comparebzip2compressedfiles
bzegrep(1)-searchpossiblybzip2compressedfilesforaregularexpression
bzexe(1)-compressexecutablefilesinplace
bzfgrep(1)-searchpossiblybzip2compressedfilesforaregularexpression
bzgrep(1)-searchpossiblybzip2compressedfilesforaregularexpression
bzip2(1)-ablock-sortingfilecompressor,v1.0.6
bzless(1)-fileperusalfilterforcrtviewingofbzip2compressedtext
bzmore(1)-fileperusalfilterforcrtviewingofbzip2compressedtext
在我的Ubuntu系统上,aproposcompress命令的返回中列出了60条以上的命令。
压缩算法
压缩并没有普适的方案,某些压缩工具是有损压缩,例如一些压缩用于减少mp3文件大小,而能够使聆听者有接近原声的音乐感受。但是在Linux命令行上压缩或归档用户文件所使用的算法必须能够精确地重新恢复为原始数据。换句话说,它们必须是无损的。
这是如何做到的?让我们假设在一行上有300个相同的字符可以被压缩成像“300x”这样的字符串,但是这种算法对大多数文件没有很大的用处,因为文件中不可能包含长的相同字符序列比完全随机的序列更多。压缩算法要复杂得多,从Unix早期压缩首次被引入以来,它就越来越复杂了。
在Linux系统上的压缩命令
在Linux系统上最常用的文件压缩命令包括zip、gzip、bzip2、xz。所有这些压缩命令都以类似的方式工作,但是你需要权衡有多少文件要压缩(节省多少空间)、压缩花费的时间、压缩文件在其他你需要使用的系统上的兼容性。
有时压缩一个文件并不会花费很多时间和精力。在下面的例子中,被压缩的文件实际上比原始文件要大。这并不是一个常见情况,但是有可能发生——尤其是在文件内容达到一定程度的随机性。
$timezipbigfile.zipbigfile
adding:bigfile(default0%)
real0m0.055s
user0m0.000s
sys0m0.016s
$ls-lbigfile*
-rw-r--r--1rootroot012月2022:36bigfile
-rw-------1rootroot16412月2022:41bigfile.zip
注意该文件压缩后的版本(bigfile.zip)比原始文件(bigfile)要大。如果压缩增加了文件的大小或者减少很少的比例,也许唯一的好处就是便于在线备份。如果你在压缩文件后看到了下面的信息,你不会从压缩中得到什么受益。
(defalted1%)
文件内容在文件压缩的过程中有很重要的作用。在上面文件大小增加的例子中是因为文件内容过于随机。压缩一个文件内容只包含0的文件,你会有一个相当震惊的压缩比。在如此极端的情况下,三个常用的压缩工具都有非常棒的效果。
-rw-rw-r--1shsshs10485760Dec812:31zeroes.txt
-rw-rw-r--1shsshs49Dec817:28zeroes.txt.bz2
-rw-rw-r--1shsshs10219Dec817:28zeroes.txt.gz
-rw-rw-r--1shsshs1660Dec812:31zeroes.txt.xz
-rw-rw-r--1shsshs10360Dec812:24zeroes.zip
令人印象深刻的是,你不太可能看到超过1000万字节而压缩到少于50字节的文件,因为基本上不可能有这样的文件。
在更真实的情况下,大小差异总体上是不同的,但是差别并不显著,比如对于确实不太大的jpg图片文件来说。
-rw-r--r--1shsshs13522Dec1118:58image.jpg
-rw-r--r--1shsshs13875Dec1118:58image.jpg.bz2
-rw-r--r--1shsshs13441Dec1118:58image.jpg.gz
-rw-r--r--1shsshs13508Dec1118:58image.jpg.xz
-rw-r--r--1shsshs13581Dec1118:58image.jpg.zip
在对大的文本文件同样进行压缩时,你会看到显著的不同。
$ls-ltextfile*
-rw-rw-r--1shsshs8740836Dec1118:41textfile
-rw-rw-r--1shsshs1519807Dec1118:41textfile.bz2
-rw-rw-r--1shsshs1977669Dec1118:41textfile.gz
-rw-rw-r--1shsshs1024700Dec1118:41textfile.xz
-rw-rw-r--1shsshs1977808Dec1118:41textfile.zip
在这种情况下,xz相较于其他压缩命令有效的减小了文件大小,对于第二的bzip2命令也是如此。
查看压缩文件
这些以more结尾的命令(bzmore等等)能够让你查看压缩文件的内容而不需要解压文件。
bzmore(1)-fileperusalfilterforcrtviewingofbzip2compressedtext
lzmore(1)-viewxzorlzmacompressed(text)files
xzmore(1)-viewxzorlzmacompressed(text)files
zmore(1)-fileperusalfilterforcrtviewingofcompressedtext
为了解压缩文件内容显示给你,这些命令做了大量的计算。但在另一方面,它们不会把解压缩后的文件留在你系统上,它们只是即时解压需要的部分。
$xzmoretextfile.xz|head-1
Hereistheagendafortomorrow'sstaffmeeting:
比较压缩文件
有几个压缩工具箱包含一个差异命令(例如:xzdiff),那些工具会把这些工作交给cmp和diff来进行比较,而不是做特定算法的比较。例如,xzdiff命令比较bz2类型的文件和比较xz类型的文件一样简单。
如何选择最好的Linux压缩工具
如何选择压缩工具取决于你工作。在一些情况下,选择取决于你所压缩的数据内容。在更多的情况下,取决你组织内的惯例,除非你对磁盘空间有着很高的敏感度。下面是一般性建议:
zip对于需要分享给或者在Windows系统下使用的文件最适合。
gzip或许对你要在Unix/Linux系统下使用的文件是最好的。虽然bzip2已经接近普及,但gzip看起来仍将长期存在。
bzip2使用了和gzip不同的算法,并且会产生比gzip更小的文件,但是它们需要花费更长的时间进行压缩。
xz通常可以提供最好的压缩率,但是也会花费相当长的时间。它比其他工具更新一些,可能在你工作的系统上还不存在。
以上就是关于如何在Linux使用文件压缩的详细介绍,最后体系在压缩文件时,你有很多选择,而在极少的情况下,并不能有效节省磁盘存储空间。扣丁学堂的Linux培训课程从基础入门开始教,不论学员是否拥有基础在扣丁学堂都能顺利的学习,扣丁学堂不仅有专业的老师和与时俱进的课程体系,还有大量的Linux视频教程供学员观看学习,想要学好Linux开发的小伙伴快快行动吧。扣丁学堂Linux技术交流群:659974587。