和windows一样,linux也支持文件压缩与解压的功能,文件压缩的原理就是降低文件中数据的重复度与冗余度,简单来说就是如果你你存储了一个数字1占用了一个位而剩下的七个位就没办法再使用了,通过文件压缩可以将这七个位有效的利用起来,又比如你要存储一个1000000000的数字,如果你正常表示的话至少需要十个位来表示,但是如果你表示为一个1,十个1的话也同样存储了相同的信息。这两个例子就简单的将压缩的原理表示出来了,下面我们就详细看一下linux具体的压缩以及解压的命令;
一.linux常见的压缩与解压命令
首先看一下linux常见的压缩文件扩展名:
*.Z compress程序压缩的文件
*.gz gzip程序压缩的文件
*.bz2 bzip2程序压缩的文件
*.tar tar程序打包的数据,并没有压缩过
*.tar.gz tar程序打包的文件,其中经过gzip的压缩
*.tar.bz2 tar程序打包的文件,其中经过bzip2的压缩
以上可知Linux上常见的压缩命令就是gzip与bzip2两个
1.compress
由于compress比较老旧,基本上已经不用了所以这里只简单介绍下copress压缩和解压缩的命令:
压缩:compress [-rcv] 文件或目录
解压缩:uncompress 文件.Z
这里解释下-c这个参数,使用了-c这个参数后可以在保留原文件的基础上生成一个压缩文件,而不加参数的话压缩出压缩文件后,原文件就不再了;
2.gzip,zcat
gzip是现在比较用的比较广的压缩命令,它可以解开compress,zip,与gzip等软件的压缩文件,下面来看下详细的操作:
gzip [-cdtv#] 文件名
zcat 文件名.gz //用来读取压缩文件内的文本文件
参数:
-c:将压缩的数据输出到屏幕上,可通过数据流重定向来处理
-d:解压缩
-t:可以用来检验一个压缩文件的一致性,看看文件有没有错误
-v:可以显示出原文件/压缩文件的压缩比等信息
-#:压缩等级,-1最快,-9最慢,默认为-6
示例:
[guoyong@localhost guo]$ ll
总用量 4
-rw-rw-r--. 1 guoyong guoyong 3617 4月 28 14:33 readme.txt
[guoyong@localhost guo]$ #对readme.txt进行压缩】
[guoyong@localhost guo]$ gzip -v readme.txt
readme.txt: 57.9% -- replaced with readme.txt.gz
[guoyong@localhost guo]$ ll
总用量 4
-rw-rw-r--. 1 guoyong guoyong 1553 4月 28 14:33 readme.txt.gz
[guoyong@localhost guo]$ #可以看见文件大小减少了2000B左右
[guoyong@localhost guo]$ #下面进行解压
[guoyong@localhost guo]$ gzip -d readme.txt.gz
[guoyong@localhost guo]$ ll
总用量 4
-rw-rw-r--. 1 guoyong guoyong 3617 4月 28 14:33 readme.txt
3.bzip,bzcat
bzip2提供比gzip更好的压缩比,详细使用如下:
bzip2 [-cdkzv#] 文件名
bzcat 文件名.bz2
参数:
-c:将压缩过程中产生的数据输出到屏幕上
-d:解压缩的参数
-k:保留原文件,不会删除原始的文件
-z:: -d 选项的补充,强制进行压缩操作,而不管执行的是哪个程序。
-v:可以显示出原文件/压缩文件的压缩比等信息
-#:与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快
示例:
[root@localhost guo]# ll
总用量 4
-rw-rw-r--. 1 guoyong guoyong 3617 4月 28 14:33 readme.txt
[root@localhost guo]# #这里对readme.txt压缩
[root@localhost guo]# bzip2 -zv readme.txt
readme.txt: 2.192:1, 3.649 bits/byte, 54.38% saved, 3617 in, 1650 out.
[root@localhost guo]# ll
总用量 4
-rw-rw-r--. 1 guoyong guoyong 1650 4月 28 14:33 readme.txt.bz2
[root@localhost guo]# 可以看到文件被压缩了,文件大小减少了大约2000B
[root@localhost guo]# #使用zcat读取文件
[root@localhost guo]# ll
总用量 4
-rw-rw-r--. 1 guoyong guoyong 1650 4月 28 14:33 readme.txt.bz2
[root@localhost guo]# bzcat readme.txt.bz2
Adobe Systems Incorporated
Flash Player for Linux
Version 25.0.0.148
[root@localhost guo]# #解压
[root@localhost guo]# bzip2 -d readme.txt.bz2
[root@localhost guo]# ll
总用量 4
-rw-rw-r--. 1 guoyong guoyong 3617 4月 28 14:33 readme.txt
二.打包命令
前一节的gzip和bzip2只能对单个文件进行压缩,那么linux能否像windows的winrar一样对多个文件或目录进行打包呢?答案明显是肯定的
要对多个文件或目录进行打包就要用到tar这个强大的命令了,下面我们就看看tar怎么用;
tar [-j][-z][cv] [-f 新建的文件名] filename //打包与压缩
tar [-j][-z][tv] [-f 新建的文件名] //查看文件名
tar [-j][-z] [xv] [-f 新建的文件名] [-C 目录] //解压缩
参数:
-c:新建打包文件,可搭配-v来查看过程中被打包的文件名
-t:查看打包文件的内容含有哪些文件名,重点在查看文件名
-x:解打包或解压缩的功能,可以搭配-C在特定目录解开
//注意-c,-t,-x不能同时出现在一条命令中
-j:通过bzip2的支持进行压缩/解压缩,此时文件名最好为*.tar.bz2
-z:通过gzip的支持进行压缩/解压缩,此时文件名最好为*.tar.gz
-f filename:-指定存档或设备 (缺省为 /dev/rmt0)
-C 目录:这个参数用在解压缩是,若要在特定目录解压缩,可以使用这个参数
tar的命令可以简单记录为下面三个;
压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压的目录
压缩示例:
[root@localhost /]# #对/etc目录所有文件进行备份
[root@localhost /]# tar -zpcv -f /root/etc.tar.gz /etc #z为使用gzip压缩,p为保留原文件的权限,c为新建打包文件,v显示哪些文件被打包了
[root@localhost /]# ll /root/etc*
-rw-r--r--. 1 root root 11238031 4月 28 16:14 /root/etc.tar.gz
查看示例:
[root@localhost /]# tar -ztv -f /root/etc.tar.gz #查看压缩文件\
解压示例:
[root@localhost ~]# #将压缩文件解压到/tmp下
[root@localhost tmp]# tar -zxv -f /root/etc.tar.gz -C /tmp
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/resolv.conf
etc/fonts/
etc/fonts/conf.d/
etc/fonts/conf.d/65-0-lohit-telugu.conf
etc/fonts/conf.d/59-liberation-sans.conf
etc/fonts/conf.d/66-ucs-miscfixed.conf
etc/fonts/conf.d/59-liberation-mono.conf
etc/fonts/conf.d/65-wqy-microhei.conf
...........
只解开一部分文件:
[root@localhost etc]# #首先查找想要解开的文件例如updatedb.conf
[root@localhost etc]# tar -ztv /root/etc.tar.gz |grep "updatedb.conf"
[root@localhost etc]# tar -ztv -f /root/etc.tar.gz |grep "updatedb.conf"
-rw-r--r-- root/root 513 2016-11-05 01:47 etc/updatedb.conf
[root@localhost etc]# tar -zxv -f /root/etc.tar.gz etc/updatedb.conf
etc/updatedb.conf
[root@localhost etc]# ll
总用量 4
-rw-r--r--. 1 root root 513 11月 5 01:47 updatedb.conf//这时只有一个文件update.conf