十五、工具压缩、解压缩
压缩工具
compress/uncompress: .Z结尾 (很少用)
gzip/gunzip: .gz结尾
bzip2/bunzip2: .bz2结尾
xz/unxz: .xz后缀,.lzma和.raw后缀
1、默认删除被压缩的文件,为了节约空间。保留原文件必须启用选项
2、压缩比不高:快速、高效
3、纯文本压缩,二进制压缩意义不大
4、bzip2,xz不支持递归压缩
压缩及归档工具: zip/unzip: .zip后缀
1、通用的工具: VMS,Unix,MSDOS,OS/2,Windows(Windows 原生支持的压缩),Window 9x/NT/XP,Minix
2、tar和压缩工具共同的作用
3、支持归档压缩目录
归档工具: tar,cpio(特殊场景)
1、归档后,文件可能变大。(书放在箱子里,箱子的重量)
2、压缩/解压缩后不会删除原文件
3、压缩时,带调用压缩的选项。展开时,可以不带选项,自动识别。 -Jcf tar.xz
4、支持归档或压缩目录
一、gzip/gunzip/zcat命令
1、LZ77压缩算法
2、压缩目录,-r
3、默认删除被压缩的文件
gzip [OPTIONS...] FILE -c --stdout ## 压缩后的结果输出到标准输出 所以要跟> 重定向输出。(目的不自动删除原文件) -d ## 调用gunzip实现解压缩 -r,--recursive ## 递归压缩 -# 1,9 ##默认为6 , 压缩比,越大,文件小,消耗的cpu时针周期越长 zcat FILE 不展开文件,查看压缩文件的内容
1、准备文件 [root@izpo45bh60h6bsz ~]# cp /etc/{fstab,init.d/functions} /tmp/ [root@izpo45bh60h6bsz ~]# ls -l /tmp/ -rw-r--r-- 1 root root 358 8月 13 18:08 fstab -rw-r--r-- 1 root root 15131 8月 13 18:08 functions 2、压缩文件 [root@izpo45bh60h6bsz ~]# cd /tmp [root@izpo45bh60h6bsz tmp]# ls fstab functions [root@izpo45bh60h6bsz tmp]# gzip fstab [root@izpo45bh60h6bsz tmp]# ls fstab.gz functions ## 原文件被删除 3、解压缩文件 root@izpo45bh60h6bsz tmp]# gunzip fstab.gz [root@izpo45bh60h6bsz tmp]# ls fstab functions ## 解压的文件被删除 4、保留原文件,压缩 [root@izpo45bh60h6bsz tmp]# gzip -c fstab > fstab.gz [root@izpo45bh60h6bsz tmp]# ls fstab fstab.gz functions [root@izpo45bh60h6bsz tmp]# ls -l -h -rw-r--r-- 1 root root 358 8月 13 18:08 fstab ## 对比 -rw-r--r-- 1 root root 266 8月 13 18:10 fstab.gz ## 对比 -rw-r--r-- 1 root root 15K 8月 13 18:08 functions 5、保留原文件,解压 [root@izpo45bh60h6bsz tmp]# gzip -d -c fstab.gz > fstab.1 [root@izpo45bh60h6bsz tmp]# ls -lh -rw-r--r-- 1 root root 358 8月 13 18:12 fstab ## 对比 -rw-r--r-- 1 root root 358 8月 13 18:12 fstab.1 ## 对比 -rw-r--r-- 1 root root 266 8月 13 18:10 fstab.gz -rw-r--r-- 1 root root 15K 8月 13 18:08 functions 6、低压缩比和高压缩比解压的区别 1)低压缩:速度快,效率高 [root@izpo45bh60h6bsz tmp]# gzip -c -1 fstab > fstab.1.gz 2)高压缩,速度慢,浪费cpu时钟周期,文件压缩后的文件小 [root@izpo45bh60h6bsz tmp]# gzip -c -9 fstab > fstab.2.gz [root@izpo45bh60h6bsz tmp]# ls -lh fstab.1.gz fstab.2.gz -rw-r--r-- 1 root root 267 8月 13 18:14 fstab.1.gz -rw-r--r-- 1 root root 266 8月 13 18:14 fstab.2.gz 7、压缩目录 [root@izpo45bh60h6bsz tmp]# cp -r /etc/pam.d . [root@izpo45bh60h6bsz tmp]# gzip -r pam.d [root@izpo45bh60h6bsz tmp]# ls pam.d/ atd.gz fingerprint-auth-ac.gz .... 8、解压目录 [root@izpo45bh60h6bsz tmp]# gunzip pam.d/* [root@izpo45bh60h6bsz tmp]# ls pam.d/ atd fingerprint-auth 9、不展开文件查看文件的内容 [root@izpo45bh60h6bsz tmp]# zcat fstab.gz # # /etc/fstab # Created by anaconda on Fri Feb 24 02:58:22 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=07151862-c2b9-45dc-bf7a-af8d2a6fa6c1 / ext3 defaults 1 1 /www/swap swap swap defaults 0 0 [root@izpo45bh60h6bsz tmp]#
二、bzip2/bunzip2/bzcat命令
1、LZ77,LZ78压缩算法,支持比gzip更高级的算法
2、不能压缩目录
3、默认删除被压缩的文件
bzip2 [OPTIONS....] FILE -k,keep ## 不删除原文件,保持原文件 -d ## 调用bunzip2解压文件 -#,1-9 ## 压缩级别。压缩比,越大,文件小,消耗的cpu时针周期越长 -q,quiet ## 静默模式,适用于脚本中
1、准备文件 [root@izpo45bh60h6bsz tmp]# cp /var/log/messages /tmp [root@izpo45bh60h6bsz tmp]# ls /tmp/messages /tmp/messages 2、压缩文件 [root@izpo45bh60h6bsz ~]# cd /tmp [root@izpo45bh60h6bsz tmp]# bzip2 messages [root@izpo45bh60h6bsz tmp]# ls messages* messages.bz2 3、解压缩文件 [root@izpo45bh60h6bsz tmp]# bunzip2 messages.bz2 [root@izpo45bh60h6bsz tmp]# ls messages* messages 4、保留原文件,压缩 [root@izpo45bh60h6bsz tmp]# bzip2 -k messages [root@izpo45bh60h6bsz tmp]# ls messages* messages messages.bz2 5、保留原文件,解压 [root@izpo45bh60h6bsz tmp]# rm messages rm:是否删除普通文件 "messages"?y [root@izpo45bh60h6bsz tmp]# ls messages* messages.bz2 [root@izpo45bh60h6bsz tmp]# bzip2 -d -k messages.bz2 [root@izpo45bh60h6bsz tmp]# ls messages* messages messages.bz2 6、低压缩比和高压缩比解压的区别 [root@izpo45bh60h6bsz tmp]# bzip2 -1 -k messages [root@izpo45bh60h6bsz tmp]# bzip2 -9 messages.new [root@izpo45bh60h6bsz tmp]# ls -lh messages* -rw------- 1 root root 469K 8月 13 18:26 messages -rw------- 1 root root 21K 8月 13 18:26 messages.bz2 ## 对比 -rw------- 1 root root 18K 8月 13 18:31 messages.new.bz2 ## 对比 7、不展开文件查看文件的内容 [root@izpo45bh60h6bsz tmp]# bzcat messages.bz2 Aug 12 10:00:29 izpo45bh60h6bsz pure-ftpd[5446]: (?@140.205.225.185) [INFO] New connection from 140.205.225.185 Aug 12 10:00:29 izpo45bh60h6bsz pure-ftpd[5446]: (?@140.205.225.185) [ERROR] Unable to read the indexed puredb file (or old format detected) - Try pure-pw mkdb
三、xz/unxz/xzcat命令 (CentOS7 主流)
1、流行的压缩工具,压缩算法比bzip2更为有效
2、不支持压缩目录
xz [OPTIONS...] FILE... -k :保留源文件,无须输出重定向 -c,--stdout -d :解压缩,相当于bunzip2 -# :指定压缩比,默认为6 -q ## 静默模式 -F FORMAT ## xz,lzma,raw 默认为xz xzcat FILE 不展开压缩文件,查看文件解压的内容
1、准备文件 [root@izpo45bh60h6bsz tmp]# rm /tmp/* -rf [root@izpo45bh60h6bsz tmp]# cp /etc/fstab /etc/issue . 2、压缩文件 [root@izpo45bh60h6bsz tmp]# xz issue [root@izpo45bh60h6bsz tmp]# ls fstab issue.xz 3、解压缩文件 [root@izpo45bh60h6bsz tmp]# xz -d issue.xz [root@izpo45bh60h6bsz tmp]# ls fstab issue 4、保留原文件,压缩 [root@izpo45bh60h6bsz tmp]# xz -k issue [root@izpo45bh60h6bsz tmp]# ls fstab issue issue.xz [root@izpo45bh60h6bsz tmp]# xz -c fstab > fstab.xz [root@izpo45bh60h6bsz tmp]# ls fstab fstab.xz issue issue.xz 5、保留原文件,解压 [root@izpo45bh60h6bsz tmp]# ls fstab.xz issue.xz [root@izpo45bh60h6bsz tmp]# xz -d -k fstab.xz issue.xz [root@izpo45bh60h6bsz tmp]# ls fstab fstab.xz issue issue.xz 6、低压缩比和高压缩比解压的区别 -rw-r--r-- 1 root root 358 8月 13 18:40 fstab.bak [root@izpo45bh60h6bsz tmp]# xz -k -1 fstab [root@izpo45bh60h6bsz tmp]# mv fstab fstab.bak [root@izpo45bh60h6bsz tmp]# xz -k -9 fstab.bak -rw-r--r-- 1 root root 324 8月 13 18:40 fstab.bak.xz -rw-r--r-- 1 root root 332 8月 13 18:40 fstab.xz 7、lzma格式压缩 [root@izpo45bh60h6bsz tmp]# ls fstab [root@izpo45bh60h6bsz tmp]# xz -F lzma fstab [root@izpo45bh60h6bsz tmp]# ls fstab.bak.xz fstab.lzma issue pam.d 8、不展开文件查看文件的内容 [root@izpo45bh60h6bsz tmp]# xzcat fstab.xz # # /etc/fstab # Created by anaconda on Fri Feb 24 02:58:22 2017 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=07151862-c2b9-45dc-bf7a-af8d2a6fa6c1 / ext3 defaults 1 1 /www/swap swap swap defaults 0 0 9、静默模式,错误输出流不输出至标准输出 [root@izpo45bh60h6bsz tmp]# xz fstab.xz xz: fstab.xz: File already has `.xz' suffix, skipping [root@izpo45bh60h6bsz tmp]# xz -q fstab.xz
以上3个压缩工具只能针对文件操作,无法对文件夹进行压缩,因此,在linux中对文件夹有个归档打包操作,然后再进行压缩。
归档:zip、tar、cpio ;归档不会删除源文件,其主要目的是用于备份数据
四、zip/unzip命令,归档和压缩工具
1、解压后的文件名同压缩前的文件名
2、压缩/解压缩后不会删除原文件
3、支持压缩目录
zip FILE.zip FILE ... -d, --delete 不展开归档,删除归档中的文件 -r , 递归归档 -q, 静默模式
1、归档 [root@izpo45bh60h6bsz tmp]# zip hello fstab.bak.xz fstab.xz issue.xz [root@izpo45bh60h6bsz tmp]# ls -lh 总用量 20K -rw-r--r-- 1 root root 324 8月 13 18:40 fstab.bak.xz -rw-r--r-- 1 root root 324 8月 13 18:40 fstab.xz -rw-r--r-- 1 root root 1.2K 8月 13 18:54 hello.zip -rw-r--r-- 1 root root 80 8月 13 18:39 issue.xz 2、展开 [root@izpo45bh60h6bsz tmp]# ls hello.zip pam.d [root@izpo45bh60h6bsz tmp]# unzip hello.zip Archive: hello.zip extracting: fstab.bak.xz extracting: fstab.xz extracting: issue.xz [root@izpo45bh60h6bsz tmp]# ls fstab.bak.xz fstab.xz hello.zip issue.xz pam.d 3、归档目录 [root@izpo45bh60h6bsz tmp]# find . -maxdepth 1 -type f -delete [root@izpo45bh60h6bsz tmp]# ls pam.d [root@izpo45bh60h6bsz tmp]# zip pam.d.zip pam.d [root@izpo45bh60h6bsz tmp]# ll 总用量 8 drwxr-xr-x 2 root root 4096 8月 13 18:43 pam.d -rw-r--r-- 1 root root 162 8月 13 18:58 pam.d.zip 4、展开归档 [root@izpo45bh60h6bsz tmp]# mv pam.d pam.d.bak [root@izpo45bh60h6bsz tmp]# unzip pam.d.zip Archive: pam.d.zip creating: pam.d/ [root@izpo45bh60h6bsz tmp]# ls pam.d pam.d.bak pam.d.zip [root@izpo45bh60h6bsz tmp]# ls pam.d 5、归档目录 [root@izpo45bh60h6bsz tmp]# zip pam.d.1.zip pam.d.bak/* [root@izpo45bh60h6bsz tmp]# zip -r pam.d.zip pam.d 6、展开归档 [root@izpo45bh60h6bsz tmp]# unzip pam.d.zip 7、静默模式:展开时/归档时不显示多余的信息 [root@izpo45bh60h6bsz tmp]# unzip -q pam.d.zip
五、tar GNUtar归档工具 (重点)
1、解压后的文件名同压缩前的文件名
2、压缩/解压缩后不会删除原文件
3、支持归档目录
tar [OPTIONS...] FILE... (注意:tar命令选项可以忽略“ - ”) -cvf FILE.tar FILE... 创建归档 -xvf FILE.tar FILE... 展开归档 -tvf FILE.tar FILE... 不展开归档,查看归档的文件 -f FILE.tar 归档后的文件名 -v ,verbose详细信息 -C /PATH/TO/DIR 展开至指定目录
-j ,归档后,调用bzip2工具对文件压缩 -J , 归档后,调用xz -z , 调用gzip **命令可省略 - ,例如 -cvf 可写为 cvf
补充: tar -r -f /PATH/TO/SOMEFILE.tar FILE... 追加文件至归档;但不支持对压缩文件追加
注意: 使用-x 解包过程中如果不指定解包路径,那么会按照原路径解包,会覆盖原文件,这一点要特别小心,尤其是原路径下的文件在打包后修改过。
1、创建归档 [root@izpo45bh60h6bsz tmp]# tar cvf hello.tar ./* 2、展开归档 [root@izpo45bh60h6bsz tmp]# tar xvf hello.tar 3、不展开,查看内容 root@izpo45bh60h6bsz tmp]# tar tf hello.tar 4、展开至指定目录 [root@izpo45bh60h6bsz tmp]# mkdir test [root@izpo45bh60h6bsz tmp]# tar xvf hello.tar -C test/ [root@izpo45bh60h6bsz tmp]# ls test/ hello pam.d pam.d.1.zip pam.d.bak pam.d.zip 5、归档后以bzip2工具压缩 [root@izpo45bh60h6bsz tmp]# tar jcf total.tar.bz2 ./* total.tar.bz2 6、归档后以xz工具压缩 [root@izpo45bh60h6bsz tmp]# tar Jcf total.tar.xz ./* total.tar.xz 7、归档后以gzip工具压缩 [root@izpo45bh60h6bsz tmp]# tar zcf total.tar.gz ./* total.tar.gz