1. 压缩比:压缩前和压缩后的文件体积大小之比。压缩比越高,文件压缩后的体积越小
2. 压缩目的:用时间换空间,压缩体积小,但是需要大量的cpu使用来计算
3. 工具和文件的后缀:
a. compress/unpress, .z
b. gzip/gunzip, .gz
c. bzip2/bunzip2, .bz2
d. xz/unxz, .xz
e. zip/unzip
f. 归档工具:tar,cpio
4. gzip, gunzip, zcat – compress or expand files
示例:压缩解压
[root@bogon ~]#cp /var/log/messages-20170322 ./messages [root@bogon ~]#ll -h total 1.8M -rw------- 1 root root 1.8M Apr 25 20:38 messages [root@bogon ~]#gzip messages #压缩文件,同时删除源文件,同时自动加后缀.gz,显示为红色 [root@bogon ~]#ll -h total 244K -rw------- 1 root root 242K Apr 25 20:38 messages.gz [root@bogon ~]#gunzip messages.gz #解压文件,同时删除压缩文件 [root@bogon ~]#ll -h total 1.8M -rw------- 1 root root 1.8M Apr 25 20:38 messages
命令:zcat messages.gz 自动找一个临时文件夹,解压,并把解压的文件展示出来
gzip 参数:
i. -d –decompress –uncompress解压缩,相当于gunzip
ii. -#:指定压缩比,默认为6,数字越大,压缩比越大,(1-9)
1. gzip -9 messages
iii. -c:压缩并保留原文件
[root@localhost ~]#ll -h total 240K -rw------- 1 root root 239K Apr 25 20:38 messages.gz [root@localhost ~]#gzip -d messages.gz #解压后也会删除原文件 [root@localhost ~]#ll total 1772 -rw------- 1 root root 1812332 Apr 25 20:38 messages [root@localhost ~]#gzip -c messages > messages.gz #将messages压缩并保留原文件 [root@localhost ~]#ll -h total 2.0M -rw------- 1 root root 1.8M Apr 25 20:38 messages -rw-r--r-- 1 root root 242K Apr 25 21:56 messages.gz [root@localhost ~]#gzip -c -9 messages > messages1.gz #同时指定两个参数 [root@localhost ~]#ll -h total 2.3M -rw------- 1 root root 1.8M Apr 25 20:38 messages -rw-r--r-- 1 root root 239K Apr 25 21:56 messages1.gz -rw-r--r-- 1 root root 242K Apr 25 21:56 messages.gz
5. bzip2, bunzip2, bzcat – compress or expand files
b. bzip2 messages 压缩文件,同时删除源文件,同时自动加后缀.bz2,显示为红色
c. bunzip2 messages.bz2 解压文件,同时删除压缩文件
d. bzcat messages.bz2 自动找一个临时文件夹,解压,并把解压的文件展示出来
压缩解压示例:
[root@localhost ~]#bzip2 messages [root@localhost ~]#ll -h total 88K -rw------- 1 root root 87K Apr 25 20:38 messages.bz2 [root@localhost ~]#bunzip2 messages.bz2 [root@localhost ~]#ll -h total 1.8M -rw------- 1 root root 1.8M Apr 25 20:38 messages
bzip2 参数:
-d:解压缩,相当于bunzip2
#bzip2 -d messages.bz2
-#:指定压缩比,默认为6,数字越大,压缩比越大,(1-9)
bzip2 -9 messages
-k –keep:压缩并保留原文件
# bzip2 -k messages
6. xz/unxz/xzcat – xz [option]… file…
b. xz messages 压缩文件,同时删除源文件,同时自动加后缀.xz,显示为红色
c. unxz messages.xz 解压文件,同时删除压缩文件
d. xzcat messages.xz 自动找一个临时文件夹,解压,并把解压的文件展示出来
压缩解压示例
[root@localhost ~]#ll -h total 1.8M -rw------- 1 root root 1.8M Apr 25 20:38 messages [root@localhost ~]#xz messages [root@localhost ~]#ll -h total 60K -rw------- 1 root root 57K Apr 25 20:38 messages.xz [root@localhost ~]#unxz messages.xz [root@localhost ~]#ll -h total 1.8M -rw------- 1 root root 1.8M Apr 25 20:38 messages
xz参数:
-d:解压缩,相当于unxz
-#:指定压缩比,默认为6,数字越大,压缩比越大,(1-9)
xz -9 messages
-k:压缩并保留原文件
# xz -k messages
以上压缩命令不能压缩目录,要想压缩目录,先要归档操作,常用tar,cpio命令
7. tar:归档,不会删除源文件
命令格式: tar [option]… file…
参数:
c:创建归档,不会删除源文件
tar -cf /tmp/mylog.tar *.log 参数f必须在后面,将所有.log文件归档为mylog.tar
-x:展开归档,-C, –directory=DIR
change to directory DIR
tar -xf /root/mylog.tar 展开归档
tar -xf /root/mylog.tar -C /root/test 展开归档到某个文件夹
-t:不展开归档查看归档文件列表
tar -tf /root/mylog.tar
-z:gzip2 调用gzip来进行压缩解压
-zcf:#tar -zcf /root/mylog.tar.gz /tmp/test 将test目录归档并压缩为mylog.tar.gz
-zxf:#tar -zxf /root/mylog.tar.gz 将mylog.tar.gz解压,解压后的目录时原目录,即test目录
-j:bzip2 调用bzip2来进行压缩解压
-jcf:#tar -jcf /root/mylog.tar.bz2 /tmp/test 将test目录归档并压缩为mylog.tar.bz2
-jxf:#tar -jxf /root/mylog.tar.bz2 将mylog.tar.bz2解压,解压后的目录时原目录,即test目录
-J:xz 大写j 调用xz来进行压缩解压
-Jcf:#tar -Jcf /root/mylog.tar.xz /tmp/test 将test目录归档并压缩为mylog.tar.xz
如果这样打包后,在root目录下面解压,则会在root目录下生成tmp目录,tmp目录下面是test文件,为了避免这个问题,在当前目录下面创建压缩文件,即,后面的test文件使用相对路径
#cd /tmp
#tar -Jcf /root/hehe.tar.xz test 这样生成的解压文件就是源文件,最好是打包时,进入要打包的文件目录,减少目录层级注意
-Jxf:#tar -Jxf /root/mylog.tar.xz 将mylog.tar.xz解压,解压后的目录时原目录,即test目录
使用tar压缩时排除某个目录或文件
在/home/abc目录下有3个子目录:abc1、abc2、abc3、abc4,现在想把/home/abc目录下的abc1、abc2、abc3、打包成abc.tar.gz,不打包abc4。
cd /home
tar -zcvf abc.tar.gz –exclude=abc4 abc
-h:默认是打包软链本身,加上-h表示打包软链指向的文件
-p:保留文件的属性
[root@localhost /var/log]#tar cf /tmp/mylog.tar *.log [root@localhost /var/log]#cd /tmp [root@localhost /tmp]#ll -h -rw-r--r-- 1 root root 980K Apr 25 22:18 mylog.tar [root@localhost /tmp]#mkdir /root/test [root@localhost /tmp]#tar -xf ./mylog.tar -C /root/test #将tar包解压到指定目录中 [root@localhost /tmp]#cd /root/test/ [root@localhost ~/test]#ls anaconda.ifcfg.log anaconda.yum.log pm-powersave.log vmware-vmsvc.log Xorg.9.log anaconda.log boot.log spice-vdagent.log vmware-vmusr.log yum.log anaconda.program.log dracut.log vmware-install.log wpa_supplicant.log anaconda.storage.log mysqld.log vmware-tools-upgrader.log Xorg.0.log
综合示例,打包压缩,解压
[root@localhost /var/log]#cp *.log /root/test/ [root@localhost /var/log]#cd /root [root@localhost ~]#ls test [root@localhost ~]#tar Jcf /tmp/test.tar.xz test [root@localhost ~]#cd /tmp [root@localhost /tmp]#ll -h test.tar.xz -rw-r--r-- 1 root root 68K Apr 25 22:27 test.tar.xz [root@localhost /tmp]#cd /root/ [root@localhost ~]#ls test [root@localhost ~]#rm -rf test/ [root@localhost ~]#cd /tmp [root@localhost /tmp]#tar xf test.tar.xz -C /root [root@localhost /tmp]#cd /root [root@localhost ~]#ls test [root@localhost ~]#cd test/ [root@localhost ~/test]#ls anaconda.ifcfg.log anaconda.yum.log pm-powersave.log vmware-vmsvc.log Xorg.9.log anaconda.log boot.log spice-vdagent.log vmware-vmusr.log yum.log anaconda.program.log dracut.log vmware-install.log wpa_supplicant.log anaconda.storage.log mysqld.log vmware-tools-upgrader.log Xorg.0.log
当名字里面有:的时候,执行tar命令会出错,解决方法,在目录前面加./ 当前目录,如下:
[root@localhost /]#tar -Jcf c:d.tar.xz a.txt tar (child): Cannot connect to c: resolve failed tar: Child returned status 128 tar: Error is not recoverable: exiting now
[root@localhost /]#tar -Jcf ./c:d.tar.xz a.txt
测试压缩解压命令是否会对权限,属主属组,还有软链造成影响和破坏
[root@localhost ~]#useradd nginx [root@localhost ~]#chown -R nginx ./test/ #设置文件的属主为nginx [root@localhost ~]#ll total 4 drwxr-xr-x 2 nginx root 4096 Apr 25 22:26 test [root@localhost ~]#ls #创建软链对应的目录和文件 test [root@localhost ~]#mkdir file [root@localhost ~]#ls file test [root@localhost ~]#cd file/ [root@localhost ~/file]#ls [root@localhost ~/file]#echo hello > a [root@localhost ~/file]#echo hi >b [root@localhost ~/file]#ls a b [root@localhost ~]#cd test/ [root@localhost ~/test]#ls anaconda.ifcfg.log anaconda.log anaconda.program.log anaconda.storage.log anaconda.yum.log [root@localhost ~/test]#ln -sv ../file/ ./f `./f' -> `../file/' [root@localhost ~/test]#ll total 388 -rw------- 1 nginx root 2368 Apr 25 22:26 anaconda.ifcfg.log -rw------- 1 nginx root 22952 Apr 25 22:26 anaconda.log -rw------- 1 nginx root 43193 Apr 25 22:26 anaconda.program.log -rw------- 1 nginx root 173315 Apr 25 22:26 anaconda.storage.log -rw------- 1 nginx root 144804 Apr 25 22:26 anaconda.yum.log lrwxrwxrwx 1 root root 8 Apr 25 23:01 f -> ../file/ [root@localhost ~]#tar zcf test.tar.gz test [root@localhost ~]#ll total 56 drwxr-xr-x 2 root root 4096 Apr 25 23:00 file drwxr-xr-x 2 nginx root 4096 Apr 25 23:01 test -rw-r--r-- 1 root root 46333 Apr 25 23:25 test.tar.gz [root@localhost ~]#tar xf test.tar.gz -C /tmp [root@localhost ~]#cd /tmp [root@localhost /tmp]#ll total 4 drwxr-xr-x 2 nginx root 4096 Apr 25 23:01 test [root@localhost /tmp]#cd test/ [root@localhost /tmp/test]#ll total 388 -rw------- 1 nginx root 2368 Apr 25 22:26 anaconda.ifcfg.log -rw------- 1 nginx root 22952 Apr 25 22:26 anaconda.log -rw------- 1 nginx root 43193 Apr 25 22:26 anaconda.program.log -rw------- 1 nginx root 173315 Apr 25 22:26 anaconda.storage.log -rw------- 1 nginx root 144804 Apr 25 22:26 anaconda.yum.log lrwxrwxrwx 1 root root 8 Apr 25 23:26 f -> ../file/
结论:这个命令压缩解压会保留文件的属主和权限信息,不会损坏,复制软链的时候复制的是软链的本身,而不是软链对应的文件
8. zip zip/unzip 后缀名.zip
zip参数
-q 不显示指令执行过程。
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
-x<范本样式> 压缩时排除符合条件的文件。
zip -r foo foo -x \*.o #所有以.o结尾的文件都被排除了
-X 不保存额外的文件属性。
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
-<压缩效率> 压缩效率是一个介于1-9的数值。
-P password Use password to encrypt zipfile entries
unzip参数
-t 检查压缩文件是否正确
-P<密码> 使用zip的密码选项
-q 执行时不显示任何信息
-d<目录> 指定文件解压缩后所要存储的目录
说明,zip命令压缩默认是有压缩过程产生的
压缩解压示例,压缩目录要使用-r选项,解压到指定目录-d
[root@localhost ~]#ls test [root@localhost ~]#zip -r test.zip test/ adding: test/ (stored 0%) adding: test/Xorg.0.log (deflated 89%) adding: test/anaconda.yum.log (deflated 87%) adding: test/mysqld.log (stored 0%) adding: test/anaconda.log (deflated 83%) adding: test/vmware-install.log (deflated 67%) adding: test/vmware-tools-upgrader.log (deflated 46%) adding: test/anaconda.program.log (deflated 83%) adding: test/anaconda.storage.log (deflated 91%) adding: test/yum.log (stored 0%) adding: test/Xorg.9.log (deflated 78%) adding: test/pm-powersave.log (deflated 15%) adding: test/vmware-vmsvc.log (deflated 92%) adding: test/boot.log (deflated 69%) adding: test/spice-vdagent.log (stored 0%) adding: test/dracut.log (deflated 93%) adding: test/wpa_supplicant.log (stored 0%) adding: test/anaconda.ifcfg.log (deflated 83%) adding: test/vmware-vmusr.log (deflated 94%) [root@localhost ~]#ls test test.zip [root@localhost ~]#unzip test.zip -d /tmp/test Archive: test.zip creating: /tmp/test/test/ inflating: /tmp/test/test/Xorg.0.log inflating: /tmp/test/test/anaconda.yum.log extracting: /tmp/test/test/mysqld.log inflating: /tmp/test/test/anaconda.log inflating: /tmp/test/test/vmware-install.log inflating: /tmp/test/test/vmware-tools-upgrader.log inflating: /tmp/test/test/anaconda.program.log inflating: /tmp/test/test/anaconda.storage.log extracting: /tmp/test/test/yum.log inflating: /tmp/test/test/Xorg.9.log inflating: /tmp/test/test/pm-powersave.log inflating: /tmp/test/test/vmware-vmsvc.log inflating: /tmp/test/test/boot.log extracting: /tmp/test/test/spice-vdagent.log inflating: /tmp/test/test/dracut.log extracting: /tmp/test/test/wpa_supplicant.log inflating: /tmp/test/test/anaconda.ifcfg.log inflating: /tmp/test/test/vmware-vmusr.log [root@localhost ~]#cd /tmp/test [root@localhost /tmp/test]#ls test [root@localhost /tmp/test]#cd test/ [root@localhost /tmp/test/test]#ls anaconda.ifcfg.log anaconda.yum.log pm-powersave.log vmware-vmsvc.log Xorg.9.log anaconda.log boot.log spice-vdagent.log vmware-vmusr.log yum.log anaconda.program.log dracut.log vmware-install.log wpa_supplicant.log anaconda.storage.log mysqld.log vmware-tools-upgrader.log Xorg.0.log
静默压缩解压,不输出过程
[root@localhost ~]#zip -q -r test.zip test/ [root@localhost ~]#du -sh * 996K test 100K test.zip [root@localhost ~]#rm -rf test [root@localhost ~]#unzip -q test.zip -d /tmp [root@localhost ~]#echo $? 0
压缩后删除原文件
[root@localhost ~]#ls test [root@localhost ~]#zip -r -m -q test.zip test [root@localhost ~]#ll total 100 -rw-r--r-- 1 root root 99351 Apr 25 22:52 test.zip
设置密码
[root@localhost ~]#ls test [root@localhost ~]#zip -r -q -P 2345 test.zip test [root@localhost ~]#ll total 104 drwxr-xr-x 2 root root 4096 Apr 25 22:26 test -rw-r--r-- 1 root root 99855 Apr 25 22:54 test.zip [root@localhost ~]#rm -rf test [root@localhost ~]#unzip -q -P 2345 test.zip [root@localhost ~]#ls test test.zip
测试压缩解压命令是否会对权限,属主属组,还有软链造成影响和破坏
[root@localhost ~]#useradd nginx [root@localhost ~]#chown -R nginx ./test/ #设置文件的属主为nginx [root@localhost ~]#ll total 4 drwxr-xr-x 2 nginx root 4096 Apr 25 22:26 test [root@localhost ~]#ls #创建软链对应的目录和文件 test [root@localhost ~]#mkdir file [root@localhost ~]#ls file test [root@localhost ~]#cd file/ [root@localhost ~/file]#ls [root@localhost ~/file]#echo hello > a [root@localhost ~/file]#echo hi >b [root@localhost ~/file]#ls a b [root@localhost ~]#cd test/ [root@localhost ~/test]#ls anaconda.ifcfg.log anaconda.log anaconda.program.log anaconda.storage.log anaconda.yum.log [root@localhost ~/test]#ln -sv ../file/ ./f `./f' -> `../file/' [root@localhost ~/test]#ll total 388 -rw------- 1 nginx root 2368 Apr 25 22:26 anaconda.ifcfg.log -rw------- 1 nginx root 22952 Apr 25 22:26 anaconda.log -rw------- 1 nginx root 43193 Apr 25 22:26 anaconda.program.log -rw------- 1 nginx root 173315 Apr 25 22:26 anaconda.storage.log -rw------- 1 nginx root 144804 Apr 25 22:26 anaconda.yum.log lrwxrwxrwx 1 root root 8 Apr 25 23:01 f -> ../file/ ####开始 [root@localhost ~]#zip -r -q test.zip test [root@localhost ~]#ls file test test.zip [root@localhost ~]#unzip -d /tmp -q test.zip #解压到tmp目录下面 [root@localhost ~]#cd /tmp/ [root@localhost /tmp]#ll total 4 drwxr-xr-x 3 root root 4096 Apr 25 23:01 test [root@localhost /tmp]#cd test/ [root@localhost /tmp/test]#ll total 392 -rw------- 1 root root 2368 Apr 25 22:26 anaconda.ifcfg.log -rw------- 1 root root 22952 Apr 25 22:26 anaconda.log -rw------- 1 root root 43193 Apr 25 22:26 anaconda.program.log -rw------- 1 root root 173315 Apr 25 22:26 anaconda.storage.log -rw------- 1 root root 144804 Apr 25 22:26 anaconda.yum.log drwxr-xr-x 2 root root 4096 Apr 25 23:00 f [root@localhost /tmp/test]#cd f/ [root@localhost /tmp/test/f]#ls a b
结论:会破坏原有的属主,并默认将软链对应的文件复制到为软链的目录下面
文件分割:split
如果文件比较大,需要将其分割成小文件,可以使用split命令,分割的速度非常快
-b 表示设置每个分割包的大小,单位:K,M,G,T -d 参数指定生成的分割包后缀为数字的形式 -a x来设定序列的长度(默认值是2, 00,01...)
下面是示例:
tar -zcvf cm-11.tar.gz cm-11 split -b 4000M -d -a 1 cm-11.tar.gz cm-11.tar.gz. 其实以上两步也可以合并成一步来执行 tar -zcvf cm-11.tar.gz cm-11 | split -b 4000M -d -a 1 - cm-11.tar.gz.
执行命令后,生成压缩包如下:
-rw-r--r-- 1 root root 4194304000 May 20 14:00 cm-11.tar.gz.0 -rw-r--r-- 1 root root 4194304000 May 20 14:02 cm-11.tar.gz.1 -rw-r--r-- 1 root root 4194304000 May 20 14:03 cm-11.tar.gz.2 -rw-r--r-- 1 root root 4194304000 May 20 14:05 cm-11.tar.gz.3 -rw-r--r-- 1 root root 4194304000 May 20 14:06 cm-11.tar.gz.4 -rw-r--r-- 1 root root 4194304000 May 20 14:08 cm-11.tar.gz.5 -rw-r--r-- 1 root root 4194304000 May 20 14:09 cm-11.tar.gz.6 -rw-r--r-- 1 root root 2256379886 May 20 14:10 cm-11.tar.gz.7
分割后的压缩包解压命令如下:
cat cm-11.tar.gz.* | tar -zxv
–
–
–
评论前必须登录!
注册