Linux_文件与文件系统的压缩与打包
edited by zhangjianfei @2016/12/14/19:13
1·压缩技术原理:
在计算机中存储的最小单位为byte, 但事实上存在bit这个更小的单位,1byte=8bit,数字1存储的格式为00000001,前7个bit为空,自动补上1,但是这太占用空间了,所以压缩技术的原理就是记成‘7个0和1’
2·Linux包含了6种压缩命令:
*.Z: compress程序压缩的文件(基本已废弃不再使用)
已废弃,不再赘述,可以使用yum install ncompress安装
#compress [-rcv] filename/dirname
#uncompress filename.Z
-r: 连同目录下的文件一同压缩
-c: 将压缩数据输出到屏幕上
-v: 显示压缩后文件的信息以及压缩过程中的一些变化
*:默认情况下,被compress压缩的源文件会不见,若要保留,可以使用 -c+>
例如:#compress -c man.config > man.config.back.Z后,存在2个文件:man.config 和man.config.back.Z
*.gz:gzip程序压缩的文件
#gzip [-cdtv#] filename
#zcat filename.gz
-c :将压缩数据输出到屏幕上,可通过数据流重定向来处理
-d :解压缩的参数(gzip -d 解压缩,等同于zcat)
-t :检查压缩文件的一致性,看看是否有误
-v :显示源文件/压缩文件的压缩比信息
-#:压缩等级,-1最快效果最差,-9最慢效果最好,最好使用默认的-6
*:和compress一样,默认情况下源文件会不见,同样可以使用数据流重定向来保留
*.bz2:bzip2程序压缩的文件
#bzip2 [cdkzv#] filename
#bzcat filename.bz2
-c :同gzip
-d :同gzip
-k :保留源文件,且不会删除原始文件
-z :压缩的参数
-v :同gzip
-# :同gzip
*: zcat并不是解压缩命令,而是把压缩文件里的内容读出来
*.tar:tar程序打包的数据(未压缩)
将多个文件/目录进行打包
#tar [-j|-z] [cv] [-f 新建的文件名] 被打包压缩的文件名 <==打包与压缩
#tar [-j|-z] [tv] [-f 新建的文件名] <==查看文件名
#tar [-j|-z] [xv] [-f 新建的文件名] <==解压缩
-c :新建打包文件,可搭配-v查看过程中被打包的文件名
-t :查看打包文件的内容含有哪些文件名,重点在查看文件名
-x :解打包、解压缩,搭配-C指定目录
*:-c -t -x 不可同时出现
-j :通过bzip2支持进行解压缩/解打包,文件后缀名为*.tar.bz2
-z :通过gzip支持进行解压缩/解打包, 文件后缀名*.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f newfilename :文件名称需要自己定义,tar并不会主动创建文件名,因为-f后需要紧接 filename,所以该命令最好单独列出,不要和其他命令混用
-C :目录
-p :保留备份数据的原本属性与权限
-P :保留绝对路径,即允许备份数据中含有根目录存在
--exclude=FILE:压缩过程中,不要将FILE打包,即打包某目录时,不含该目录下的文件
使用tar只需记住以下3个实例即可:
压缩:#tar -jcv -f newfilename.tar.bz2 oldfilename
查询:#tar -jtv -f filename.tar.bz2
解压缩:#tar -jxv -f filename.tar.bz2 -C dirName
*在使用此命令的时候会出现警告:leading `/’ from member names, 解压之后我们发现 文件都变成了/childFilename的样子,tar帮我们去掉了根目录,因为在当前文件夹下, 如果保留了绝对路径,比如在/tmp下解压,去掉根目录的文件路径为/tmp/etc/a,如果 不去掉,那么就会变成/etc/a,会把etc下面原本的文件覆盖掉,这显然是不安全的。 如果确定要覆盖,可以使用-P命令
*.tar.gz:tar程序打包的数据,经过gzip压缩
*.tar.bz2:tar程序打包的数据,经过bzip2压缩