​您好,我是goldsunC

让我们一起进步吧!

假如你认为文章排版不太好看,可关注我的公众号,文章同步发出,只不过知乎不支持Markdown。

序言

我们晓得,在面向对象的程序设计中,一切皆对象。而在Linux操作系统中,一切皆文件,因而我们总会跟文件打交道。

Linux文件系统很庞大复杂,不过有好多时侯,在我们须要将文件分享给其他人的时侯,常常会用到文件压缩,由于假如文件太大的话在分享给其他人时就须要传输更多的数据。下载一个几十M的压缩包和下载几百M的源文件,恐怕你们就会选择后者吧。或则有时侯我们须要对文件进行备份,源文件数据量太会议占用更多c盘空间,也须要压缩。诸如以上的情况,我们常常会用到文件压缩和解压这一操作。

用惯了Windows的我们可能认为这是一个很简单的事情,有好多软件能轻松实现文件压缩和解压,例如小弟最喜欢的Bandzip,特别轻量级的一个小压缩软件,使用它只须要简单的点几下才能轻松实现文件压缩和解压的操作,简直不要太便捷。并且用Linux的话,假如我们用shell来操作,可就无法简单点几下就完成任务了。我们须要把握一些简单的压缩知识以及命令操作。

哪些是文件压缩

目前我们使用的计算机系统中都是使用所谓的字节单位(byte)来计量。而事实上,bit才是计算机最小的计量单位,而1Byte=8bit,假如我们只须要记忆一个数字1,那系统会怎样记录?是的,它会如此记录:

00000001

由于一个字节等于八个比特,每位比特值为0或1,假若记录一个数字1,它会在最右侧抢占1个位,而其它的7个位则会被手动地填上0。虽然那7个位应当是空的才对。不过sogou pinyin linux,计算机为了要满足我们的操作系统数据的读写,所以才会将该数据转为字节的方式来记录。

解压命令linuxzip_linux解压bz2 命令_解压命令Linux

而一些聪明的计算机工程师就是借助一些复杂的估算方法,将那些没有用到的空间丢下来,以让文件占用的空间变小,这就是压缩的技术。

还有一种压缩技术,它是将重复的数据进行统计记录。诸如,假如某个数据为[111111······]共有100个1时,这么压缩技术会记录为[100个1]而不是真的有100个1的位存在。这样也能给精简文件记录的容量。

压缩技术简单来讲,就是将文件中的一些没有用到的空间塞满,让空间借助率更高而已。而且既然你压缩了文件,这么我们的操作系统其实难以之间读取她们,为此,假如想要使用这种被压缩过的文件,就必须将它还原为未压缩前的状态,这也就是解压缩。

压缩文件最大的用处就是让文件的容量变小,以至于你可以在相同的空间储存更多的文件,或则在网路传输时传输的更快。

Linux常见压缩指令

在Linux环境中,压缩文件的扩充名大多是:.tar、.tar.gz、.tgz、.gz、.Z、.bz2、.xz。

假如你有一些Linux基础,我们晓得在Linux中文件的扩充名并没有哪些实际的作用,那为何会有这样的扩充名呢?

这是由于Linux支持的压缩命令特别多,且不同的命令所使用的压缩技术并不相同,因而彼此之间就可能难以互通压缩/解压缩文件。所以使用扩充名以让你晓得该文件是使用了哪种压缩命令压缩的,好拿来对照着解压缩。其实Linux文件的属性和文件名没有绝对关系,而且清晰的文件名可以拿来帮我们人类这小耳朵来判别。

*.Z            compress程序压缩的文件;
*.zip        zip程序压缩的文件;
*.gz        gzip程序压缩的文件;
*.bz2        bzip2程序压缩的文件;
*.xz        xz程序压缩的文件;
*.tar        tar程序打包的文件,没有被压缩;
*.tar.gz    tar程序打包的文件,经过gzip的压缩;
*.tar.bz2    tar程序打包的文件,经过bzip2的压缩;
*.tar.xz    tar程序打包的文件,经过xz的压缩;

Linux上常见的压缩命令是gzip、bzip2和xz,而compress实际上早已被gzip替换了。其中zip命令虽然早就有了,主要是为了支持Windows常见的zip压缩包。

gzip是由GNU计划所开发下来的压缩命令,bzip2及xz是GNU后来开发出的压缩比更好的压缩命令。不过不管那个命令,一般仅能针对一个文件来压缩和解压缩,这么以来,每次压缩与解压缩都要一大堆文件岂不可恶,这个时侯,打包,tar就变得十分重要。

tar可以将好多个文件打包成为一个文件,即使是目录也不在话下,不过单纯的tar并没有压缩功能,仅仅才能打包而已linux环境变量,后来在GNU计划中,将整个tar与压缩的功能结合在了一起,这么能够更便捷的进行压缩与打包了。

gizp

gzip几乎是应用最广的压缩命令了,它所构建的压缩文件扩充名为.gz。该命令基本句型如下:

gzip[-cdtv#]filename

其各选项参数简介如下:

如右图所示,在我的Templates目录下有一个文件services,假如我想要将其压缩,我可以如此做:

解压命令Linux_linux解压bz2 命令_解压命令linuxzip

从图中可以见到,gzip-vservices即可将该文件压缩,同时压缩以后压缩文件的扩充名加上了.gz,而加上了-v参数促使复印出了文件的压缩比等信息,可以看见文件被压缩了将近80%,这个疗效早已很不错了。

须要注意的是,当使用gzip进行压缩时,压缩以后源文件就不再存在了。据悉,使用gzip压缩的文件在Windows系统中可以被WinRAR、7zip、Bandzip等这种软件解压缩,挺好用。

而当我们把文件压缩以后,通常情况下会把文件先解压缩再访问,而实际上,我们可以使用zcat、zmore、zless、zgrep等命令来之间读取压缩文件。是不是很熟悉?只是在我们的常用命令前加了z而已。

如图所示使用zmore读取一页services.gz文件:

另外,实际上我们可以在压缩文件的时侯不删掉源文件,如例:

gzip-cservices>services.gz

这样的话压缩文件以后源文件还在,同时生成了压缩文件。其重点在于-c和>的使用linux解压bz2 命令,-c可以将先前要转成压缩文件的数据内容弄成文字类型在屏幕上输出,之后我们可以通过>这个符号,将原先应当从屏幕输出的数据,转成输出到文件还不是屏幕,所以就能否构建出一个新的压缩文件。

bzip2和xz

学会了gzip,虽然bzip2和xz差不多也都会了,这两个用法和gzip差不多,主要是为了提供更好的压缩比而诞生的。

bzip2命令基本句型如下:

bzip2[-cdkzv#]filename

解压命令Linux_linux解压bz2 命令_解压命令linuxzip

其各选项参数简介如下:

xz命令基本句型如下:

xz[-dtlkc#]filename

总的来说,gzip->bzip2->xz是一个压缩比越来越好,并且执行时间越来越长的变化。假如你在乎时间成本,可以使用gzip,假如想压缩的更好,使用xz,至于bzip2,则比较折中。

打包指令tar

上面提到的压缩指令大多都只能对单一文件进行压缩,尽管gzip、bzip2、xz也就能对目录进行压缩,不过它们对目录的压缩是指将目录内的所有文件分别进行压缩的操作。而不像在Windows系统,可以通过软件直接将许多数据包成一个文件的款式。

在Linux下,则有专门的打包指令:tar。

这个指令不仅仅可以对文件进行打包,同时可以通过压缩指令的支持,将文件同时进行压缩。

tar命令基本句型如下:

各选项参数简介如下:

tar命令的参数比较多,也说明了其能实现的操作比较多。

其中的-c,-t,-x三个参数不能同时出现,由于它们分别代表打包压缩、查看文件名、解压缩之意。

其中的-z,-j,-J三个参数也不能同时出现,由于它们分别代表用哪一种压缩命令进行支持。

打包指令使用方式也比较简单,只须要明白各个参数的意义使用时加以选择即可,不过比较重要的是字体加粗的三个参数。

其中-p指保留数据的原先权限与属性,这个比较好理解,Linux本就是一个权限十分严格的系统,虽然是一个多人多任务的系统,权限的管理十分重要,不明白的朋友可自行学习。保留原先权限与属性可以促使打包后的文件与原先的文件更加一模一样。

-P指数据中包含/根目录,也就是说默认情况下是不包含根目录的。为何要除去根目录?主要是为了安全。由于我们使用tar备份的数据有可能会解压缩回去使用,假如除去了根目录,解压缩后的文件都会在当前文件夹形成,而假如包含了根目录,解压缩后的文件会可能会覆盖先前文件下的数据。

举个反例,你打包了/etc/下的所有文件进行备份,假如除去了根目录/,这么假如你解压时在的是Templates文件夹,这么文件目录就弄成了Templates/etc/,而假如没有去除根目录,他都会覆盖你本来来的/etc。也就是备份数据都会把当前系统文件覆盖。这时侯你可能会想,既然是备份,不就是为了恢复那种状态吗,直接覆盖了不是更好?不过万一你那种备份的数据版本比较旧呢?你只是打开查看一下一些内容而已,结果备份数据直接把你当前数据覆盖了,你怎么是好?

--exclude==FILE的意思是在打包的时侯不包含指定的文件,比如一个文件下有四个文件,你想打包其中的三个linux解压bz2 命令,你只须要在打包的时侯使用此参数指定哪个文件即可。

•end•

走在路上

goldsunC

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复