打包压缩命令:tar,zip,gzip,bzip2
常用的打包工具:tar;
压缩工具:zip、gzip、bzip2
11.1.zip
功能:兼容unix和windows,可以一次性压缩多个文件
语法:zip 压缩后的路径文件 需要压缩的文件1 文件2
常用选项:
-r:递归压缩
解压缩:
unzip 需要解压的文件 (默认解压到当前目录)
unzip 需要解压的文件 -d 解压后的路径
示例:
[[email protected] tmp]# zip /tmp/123.zip /etc/* [[email protected] tmp]# unzip 123.zip -d test/ [[email protected] tmp]# ls test/ etc
11.2.gzip
功能:只能压缩单个文件,压缩速度相对较快,压缩率较低,cpu消耗相对较低
语法:gzip 需要压缩的文件
gzip 需要压缩的文件1 需要压缩的文件2
常用选项:
-c:保留源文件压缩和解压缩
-v:打印详细信息
-d 解压缩的参数
-t 检查压缩文件,看是否有错误
-# 压缩等级1-9,越高越好,但也越慢,默认是6
解压缩:
gunzip 需要解压的文件
gzip -d 需要解压的文件
查看压缩文件:
zcat
问题1:gzip工具能不能压缩一个目录?
答案是不能的
示例:
[[email protected] tmp]# gzip * #压缩当前目录下的所有文件 [[email protected] tmp]# ll #只有目录没有压缩 total 207200 -rw-r--r--. 1 0 0 32 May 20 13:33 1addf98dffa.gz -rw-r--r--. 1 0 0 31 May 20 13:35 1ddf67dfdf.gz -rw-r--r--. 1 0 0 71460 Jun 4 11:49 20170609.tar.gz -rw-r--r--. 1 0 0 31 May 20 13:33 3dfdf7ghhn.gz drwxr-xr-x. 2 0 0 4096 Jun 4 11:30 etc [[email protected] tmp]# gzip -d * #解压当前目录的所有文件
11.3.bzip2
功能:只能压缩单个文件,压缩率相对较高,压缩速度相对慢 cpu消耗相对较高
语法:
bzip2 需要压缩的文件
bzip2 需要压缩的文件1 需要压缩的文件2
常用选项:
-c 将压缩过程中产生的数据输出到屏幕上
-d 解压缩参数
-k 保留原文件
-z 压缩的参数
-v 显示压缩比
-# 压缩等级1-9,和gzip一样
解压缩:
bunzip2 需要解压的文件
bzip2 -d 需要解压的文件
查看压缩文件
bzcat
示例:
[[email protected] test]# bzip2 -v9 serial.conf #打印压缩比 serial.conf: 1.784:1, 4.485 bits/byte, 43.93% saved, 1302 in, 730 out. [[email protected] test]# ls serial.conf.bz2 serial.conf.bz2 [[email protected] test]# ls serial.conf #但是原文件没有了 ls: cannot access serial.conf: No such file or director [[email protected] test]# bzip2 -z -k serial.conf #加-k就保留了原文件 [[email protected] test]# ls serial.conf* serial.conf serial.conf.bz2
11.4.tar
功能:打包工具
语法:tar [OPTION...] [FILE]...
参数:
-c:创建一个tar包
--delete : 从归档文件 (而非磁带) 中删除
-f:指定包名
-z:调用gzip压缩工具压缩
-j:调用bzip2压缩工具压缩
-v:显示详细信息
-x:解压
-t:查看tar包内容
-r:追加文件到tar包
-J:调用xz压缩工具
-C:指定解压的路径
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
说明:
参数前面-可有可无
示例:
#把/etc目录下的文件全部打包成为/tmp/etc.tar,打包压缩名可以随便起,常规是以tar,便于区分 [[email protected] ~]# tar cvf /tmp/etc.tar /etc #只打包,不压缩 [[email protected] ~]# ll /tmp/etc.tar -rw-r--r--. 1 root root 27013120 Jun 4 16:50 /tmp/etc.tar [[email protected] ~]# tar zcvf /tmp/etc.tar.gz /etc #打包并以gzip压缩,.tgz也是一样 [[email protected] ~]# ll /tmp/etc.tar.gz -rw-r--r--. 1 root root 9181726 Jun 4 16:52 /tmp/etc.tar.gz [[email protected] ~]# tar jcvf /tmp/etc.tar.bz2 /etc #打包并以bzip2压缩,.tbz2也是一样 [[email protected] ~]# ll /tmp/etc.tar.bz2 -rw-r--r--. 1 root root 8161113 Jun 4 16:55 /tmp/etc.tar.bz2 #如何查看打包或者压缩文件里都有哪些文件 [[email protected] tmp]# tar tf etc.tar.gz #带t就是查看,带f是指定报名 [[email protected] tmp]# tar tvf etc.tar.gz #v是详细信息,就想ls -l的长格式打印 #解压tar包到指定路径 [[email protected] tmp]# tar xf etc.tar.gz -C /home/test #-C是指定路径 #往tar包追加内容 [[email protected] tmp]# tar -r /var -f etc.tar.gz #实践证明不能对压缩文件进行追加 tar: Cannot update compressed archives tar: Error is not recoverable: exiting now [[email protected] tmp]# tar -r /var/cache -f etc.tar #对打包的tar追加报错 tar: Removing leading `/‘ from member names [[email protected] tmp]# tar -rP /var -f etc.tar #追加进去了,这里用到了P选项 #释放tar包指定文件到指定目录 [[email protected] etc]# tar xvf etc.tar etc/passwd -C /tmp [[email protected] tmp]# tar xvf etc.tar.gz etc/passwd -C /tmp #压缩文件也是一样的方式 etc/passwd #排除文件后再压缩文件 [[email protected] tmp]# tar zcvf /tmp/var.tar.tgz /var --exclude=*.html [[email protected] tmp]# tar tf var.tar.tgz |grep -E "*.html" #过滤出来的,但不是以.html结尾的 var/www/error/contact.html.var var/www/error/HTTP_FORBIDDEN.html.var var/www/error/HTTP_VARIANT_ALSO_VARIES.html.var
注意:
tar工具尽量使用相对路径,参数f最好放到最后
11.5 练习:
1、找出/etc下面以.conf结尾的文件,并将其复制到/home下的backup目录中、
[[email protected] tmp]# mkdir /home/backup [[email protected] tmp]# find /etc -type f -name "*.conf" -exec cp {} /home/backup \; [[email protected] tmp]# ls /home/backup/ 10-autohint.conf kexec-disable.conf 10-no-sub-pixel.conf krb5.conf 10-sub-pixel-bgr.conf ldap.conf 10-sub-pixel-rgb.conf ld.so.conf
2、将/home/backup下的所有文件全部打包并压缩到/tmp目录下名字为“5天以后的日期.tar.gz”
[[email protected] tmp]# tar czvf /tmp/$(date +%Y%m%d --date=‘5 days‘).tar.gz /home/backup/* [[email protected] tmp]# date +%Y%m%d 20170604 [[email protected] tmp]# ll total 653284 -rw-r--r--. 1 root root 0 May 20 21:33 1addf98dffa -rw-r--r--. 1 root root 0 May 20 21:35 1ddf67dfdf -rw-r--r--. 1 root root 71460 Jun 4 19:49 20170609.tar.gz
3、将/tmp下刚刚压缩的包解压到新建目录/tmp/test中,并打包成“当前的系统时间.tar”
[[email protected] backup]# mkdir test [[email protected] backup]# tar xf 20170609.tar.gz -C test/ [[email protected] backup]# tar cvf ./$(date +%T).tar * [[email protected] backup]# ls *.tar 19:56:09.tar
4、将/tmp/find.test文件追加到刚刚打好的tar包里
[[email protected] tmp]# cd /tmp [[email protected] tmp]# touch find.test [[email protected] tmp]# tar -r find.test -f /tmp/test/home/backup/19\:56\:09.tar [[email protected] tmp]# tar tf /tmp/test/home/backup/19\:56\:09.tar xcompose.conf xim.conf yum.conf find.test