linux中文件与文件系统的压缩与解压缩命令

一、压缩原理

一个文件可以被压缩是因为计算机系统中使用byte单位来计量,实际上计算机最小的单位是bit,1byte=8bit。计算机是以二进制来记录数据,例如保存1,在1byte里只占一位(1bit),前面剩余7位用0补齐。这样空间没有完全填入有效信息。一些工程师就利用复杂的计算方式将这些没有使用到的空间腾出来,让文件占用空间变小。这就是压缩技术。衡量指标叫压缩比(压缩前与压缩后文件所占磁盘大小之比)

二、 linux系统常见压缩命令

2.1压缩文件扩展名
压缩文件扩展名大多是*.tar , *.tar.gz , *.tgz , *.gz , *.Z , *.bz2 。这样写是因为linux支持的压缩命令非常多,不同的压缩命令压缩技术不一样因而彼此间无法相互压缩/解压缩。这样写为了方便知道压缩文件是那种压缩命令制作出来的好对着解压缩,这只是给人看的计算机随便命名不影响文件属性。
2.2常见扩展名解释
*.Z 是compress程序压缩的文件
*.gz 是gzip程序压缩的文件
*.bz2 是 bzip2 程序压缩的文件
*.tar 是tar程序打包的数据,并没有压缩
*.tar.gz是tar程序打包的文件,其中经过gzip的压缩
*.tar.bz2是tar程序打包的文件,其中经过bzip2的压缩
2.3各个压缩命令详解
2.3.1 compress压缩命令
用法:
压缩:copress [-rvc] 要压缩的文件或目录
解压缩:uncompress 文件.Z (后面接已压缩的文件)
选项与参数:
-r :可以连同目录下的也同时予以压缩
-c:将压缩数据输出成standard output (输出到屏幕上)
-v:可以显示出压缩后文件信息以及压缩过程中一些文件名变化
举例:

 compress -v ceshi.txt #执行命令后发现原来的ceshi.txt不见了,变成了ceshi.txt.Z 

在默认情况下被compress压缩的源文件会不见,而压缩文件会被创建,而且扩展名会变成*.Z。如果想保留源文件可以用-c语法

 compress -c ceishi.txt >ceishi.txt.Z # -c这个参数会将压缩的数据输出到屏幕上而不是写入*.Z的压缩文件,所以可以通过数据流重定向的方法将数据输入成另一个文件 

2.3.2 gzip压缩命令
gzip是应用最广泛的压缩命令了。gzip可以解开compress、zip与gzip等软件压缩的文件。gzip命令是用来替代compress压缩命令的,压缩效果更好。
用法
gzip [-cdtv#] 文件名
参数:
-c:将压缩数据输出到屏幕上,可通过数据流重定向来处理
-d:解压缩参数
-t :可以用来检验一个压缩文件的一致性,看文件有无错误
-v: 可以显示出源文件与压缩文件的压缩比信息
-#:压缩等级,-1最快,但是效果最差,-9最慢,但是压缩比最好,默认是-6。
举例

gzip -v ceishi.txt #压缩后原来的ceishi.txt不见了变成cheshi.txt.gz 

与compress类似,当时用gzip压缩时原本的文件会被压缩成*.gz的文件名,原文件不存在了。
使用zcat命令,如果压缩文件是文本文件,可以直接显示出压缩文件的内容,例如

 zcat cheshi.txt gzip -d ceishi.txt #解压缩命令 

2.3.3 bzip2压缩命令
bzip2压缩命令是用来取代gzip的,压缩效果更佳。
用法
bzip2 [-cdkzv#] 文件名
参数:
-c:将压缩过程产生的数据输出到屏幕上
-d:解压缩参数
-k :保留源文件,不会删除原始文件
-z:压缩参数
-v:可以显示出源文件与压缩文件的压缩比信息
-#:与gzip相同,表示压缩的参数,-9最佳,-1最快
举例

 bzip2 -z man.config #扩展名变成man.config.bz2 

使用bzcat命令来读取压缩文件的数据而不需要解压压缩文件
*** 2.3.4打包命令***
tar可以将多个文件或者目录打包成一个大文件,同时还可以通过gzip/bzip2的支持将打包文件同时进行压缩
用法
tar [-j] [-z] [cv] [-f 新建的文件名] filename 打包与压缩
tar [-j|-z] [tv][-f 新建的文件名] 查看文件名
tar [-j|z] [xv] [-f 新建的文件名] [-C 目录] 解压缩
参数:
-c:新建打包文件。可搭配-v来查看过程中被打包的文件名(filename)
-t:查看打包的文件的内容有哪些文件名,重点查看文件名
-x:解打包或者解压缩的功能,可以与-C(大写)搭配,在特定目录解开
-j:通过bzip2的支持进行压缩与解压缩,此时的文件名最好为*.tar.bz2
-z: 通过gzip的支持进行压缩与解压缩,此时文件名最好为*.tar.gz
-v:在压缩与解压缩过程中将正在处理的文件名显示出来
-f filename: -f后面接要被处理的文件名,建议-f单独写一个参数
-C: 用在向特定目录解压缩时
-P(大写):保留备份数据的原本属性和权限,常用于备份重要配置文件
-p(小写):保留绝对路径,即允许备份数据中含有根目录
举例

 tar -zpcv -f /root//etc.tar.gz /etc #备份etc目录 #这里会有一个警告:删除了文件名开头的‘/’,这样做主要是为了安全以防解压恢复时覆盖源文件 tar -ztv -f /root/etc.tar.gz #可以看到打包的文件没有根目录