• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
珂儿吖
博客园    首页    新随笔    联系   管理    订阅  订阅
压缩与解压缩
打包工具tar 打包备份cpio 压缩工具汇总 linux

 

前言

一、打包工具tar

1.1 tar简介

1.2 tar选项详解

1.3 tar补充——包分隔之split

1.4 打包备份 cpio

二、压缩工具汇总

2.1 compress/uncompress(.Z文件)

2.2 gzip/gunzip(.gz文件)

2.3 bzip2/bunzip2/bzcat(.bz2文件)

2.4 xz/unxz/xzcat(.xz文件)

2.5 打包压缩zip/unzip(.zip文件)

 

前言

在我们使用计算机的过程中,会需要文件传输,当文件特别大的时候,我们就需要用到压缩工具。在windows系统下,最常见的压缩文件只有两种,一个是 “.rar”,另一个是“.zip”。而在我们的linux系统下,可就大大不同了,它有“.Z”、“.gz”、“.bz2”、“.xz”、“.zip”等众多的压缩文件名,接下来,我们就来分别说一说这些linux系统下常见的压缩文件。

 

一、打包工具tar

1.1 tar简介

可能有人会有疑问,为什么明明是一个介绍压缩与解压缩的博客,怎么一开始就说打包工具!!!∑(゚Д゚ノ)ノ当然这不是小编写错,我们在介绍压缩文件之前,首先要弄明白一个概念,压缩和打包。

所谓打包,就是把一大堆文件或目录什么的变成一个总的文件;而压缩则是把一个比较大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?这是由于Linux中的很多压缩程序只能针对一个文件进行压缩,所以当你想压缩一大堆文件的时候,就需要先把这些文件打包到一起,然后才可以用我们的压缩程序进行压缩。

在linux下,最常用的打包工具就是tar了。接下来我们就详细说一说这个命令。

命令:tar

格式:tar [OPTION]...

 

1.2 tar选项详解

(1)创建归档

tar -cf /PATH/TO/SOMEFILE.tar FILE…

-c是表示产生新的包,-f指定包的文件名。

 1 [root@ keer app]# ll
 2 total 28
 3 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
 4 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
 5 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
 6 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
 7 [root@ keer app]# tar -cf app.tar ./*                ------------把当前目录下所有文件打包到app.tar中
 8 [root@ keer app]# ll
 9 total 60
10 -rw-r--r--. 1 root root 30720 Aug 11 19:53 app.tar
11 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
12 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
13 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
14 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry

 

(2)追加文件至归档  (注:不支持对压缩文件的追加)

tar -rf /PATH/TO/SOMEFILE.tar FILE…

-r是表示增加文件的意思。


(3)查看归档文件中的文件列表

tar -tvf /PATH/TO/SOMEFILE.tar

-t是列出文件的意思,-v是对文件进行长列出(详细信息)

Example: 

 1 [root@ keer app]# tar -tvf app.tar 
 2 -rw-r--r-- root/root     15131 2017-08-11 19:44 ./functions
 3 -rw-r--r-- root/root       999 2017-08-11 19:51 ./god
 4 -rw-r--r-- root/root        36 2017-08-11 20:01 ./nihao
 5 -rw-r--r-- root/root      3518 2017-08-11 19:44 ./passwd
 6 -rw-r--r-- root/root       288 2017-08-11 19:47 ./poetry
 7 [root@ keer app]# tar -rf app.tar nihao      ------------追加nihao文件至app.tar中
 8 [root@ keer app]# tar -tvf app.tar           ------------查看app.tar中的文件列表
 9 -rw-r--r-- root/root     15131 2017-08-11 19:44 ./functions
10 -rw-r--r-- root/root       999 2017-08-11 19:51 ./god
11 -rw-r--r-- root/root        36 2017-08-11 20:01 ./nihao
12 -rw-r--r-- root/root      3518 2017-08-11 19:44 ./passwd
13 -rw-r--r-- root/root       288 2017-08-11 19:47 ./poetry
14 -rw-r--r-- root/root        36 2017-08-11 20:01 nihao 

(4)展开归档

tar -xf /PATH/TO/SOMEFILE.tar

-x是解包的意思

tar -xf /PATH/TO/SOMEFILE.tar -C /PATH/

-C是指定新的路径存储解包后的文件

Example:

 1 [root@ keer app]# tar -cvf test.tar /etc/passwd /etc/group       -----------打包/etc/passwd和/etc/group到test.tar中
 2 tar: Removing leading `/' from member names
 3 /etc/passwd
 4 /etc/group
 5 [root@ keer app]# ll
 6 total 76
 7 -rw-r--r--. 1 root root 30720 Aug 12 08:46 app.tar
 8 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
 9 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
10 -rw-r--r--. 1 root root    36 Aug 11 20:01 nihao
11 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
12 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
13 -rw-r--r--. 1 root root 10240 Aug 12 08:55 test.tar
14 [root@ keer app]# tar -xf test.tar                               ------------解包test.tar
15 [root@ keer app]# ll
16 total 80
17 -rw-r--r--. 1 root root 30720 Aug 12 08:46 app.tar
18 drwxr-xr-x. 2 root root  4096 Aug 12 08:55 etc               ------------解包test.tar生成的文件目录
19 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
20 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
21 -rw-r--r--. 1 root root    36 Aug 11 20:01 nihao
22 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
23 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
24 -rw-r--r--. 1 root root 10240 Aug 12 08:55 test.tar
25 [root@ keer app]# ll etc/* 
26 -rw-r--r--. 1 root root 1500 Aug  8 17:57 ./etc/group
27 -rw-r--r--. 1 root root 3518 Aug  8 17:57 ./etc/passwd 

(5)结合压缩工具实现:归档并压缩(配合cf使用)

-j:bzip2    -z:gzip    -J:xz

-T选项指定输入文件,-X选项指定包含要排除的文件列表  

    tar -zcvf mybackup.tgz -T /root/includefilelist -X  /root/ excludefilelist

Includefilelist和excludefilelist两个文件存的都是文件的路径,Includefilelist文件里存的路径是需要补充的文件,excludefilelist文件里存的路径是需要排除的文件。比如在我们需要大批量进行打包压缩的时候,我们可以把打包和压缩放在一条命令中进行,此时,我们就可以把需要打包的文件路径存在Includefilelist文件,然而这些文件中可能有一部分我们是不需要的,就可以将其路径存在excludefilelist文件。当然名字是可以随心所欲的认定~

 1 [root@ keer app]# tar -jcf files.tar.bz2 /etc/passwd /etc/group      ----------把/etc/passwd和/etc/group打包并压缩至files.tar.bz2中
 2 tar: Removing leading `/' from member names
 3 [root@ keer app]# ll
 4 total 84
 5 -rw-r--r--. 1 root root 30720 Aug 12 08:46 app.tar
 6 drwxr-xr-x. 2 root root  4096 Aug 12 08:55 etc
 7 -rw-r--r--. 1 root root  1866 Aug 12 09:11 files.tar.bz2
 8 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
 9 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
10 -rw-r--r--. 1 root root    36 Aug 11 20:01 nihao
11 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
12 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
13 -rw-r--r--. 1 root root 10240 Aug 12 08:55 test.tar 
 1 [root@ keer app]# cat includefilelist 
 2 /etc/init.d/
 3 /root/bin
 4 /app
 5 [root@ keer app]# cat excludefilelist 
 6 /root/bin/createuser21.sh
 7 /root/bin/createyonghu21.sh
 8 [root@ keer app]# tar -zcvf mybackup.tgz -T ./includefilelist -X ./excludefilelist   ----------把includefilelist中写的文件打包,除了excludefilelist中写的文件
 9 tar: Removing leading `/' from member names
10 /etc/init.d
11 /root/bin/
12 /root/bin/jiaozuoye21.sh
13 /root/bin/sumspace21.sh
14 /root/bin/links.sh
15 /root/bin/disk.sh
16 /root/bin/argsnum21.sh
17 /root/bin/createsh21.sh
18 /root/bin/nologin21.sh
19 /root/bin/reset21.sh
20 /root/bin/hello.sh
21 /root/bin/sumfile21.sh
22 /root/bin/systeminfo.sh
23 /root/bin/hostping21.sh
24 /root/bin/sumid21.sh
25 /root/bin/backup.sh
26 /root/bin/per21.sh
27 /root/bin/login21.sh
28 /root/bin/excute21.sh
29 /root/bin/checkdisk21.sh
30 /app/
31 /app/poetry
32 /app/functions
33 /app/mybackup.tgz
34 /app/test.tar
35 /app/god
36 /app/files.tar.bz2
37 /app/includefilelist
38 /app/passwd
39 /app/nihao
40 /app/excludefilelist
41 /app/etc/
42 /app/etc/group
43 /app/etc/passwd
44 /app/app.tar
45 
46 #以上打包的所有文件中,不包含/root/bin/createuser21.sh,/root/bin/createyonghu21.sh这两个文件。
47 
48 [root@ keer app]# ll
49 total 112
50 -rw-r--r--. 1 root root 30720 Aug 12 08:46 app.tar
51 drwxr-xr-x. 2 root root  4096 Aug 12 08:55 etc
52 -rw-r--r--. 1 root root    54 Aug 12 09:19 excludefilelist
53 -rw-r--r--. 1 root root  1866 Aug 12 09:11 files.tar.bz2
54 -rw-r--r--. 1 root root 15131 Aug 11 19:44 functions
55 -rw-r--r--. 1 root root   999 Aug 11 19:51 god
56 -rw-r--r--. 1 root root    28 Aug 12 09:18 includefilelist
57 -rw-r--r--. 1 root root 18307 Aug 12 09:20 mybackup.tgz             ------生成的文件
58 -rw-r--r--. 1 root root    36 Aug 11 20:01 nihao
59 -rw-r--r--. 1 root root  3518 Aug 11 19:44 passwd
60 -rw-r--r--. 1 root root   288 Aug 11 19:47 poetry
61 -rw-r--r--. 1 root root 10240 Aug 12 08:55 test.tar

 

1.3 tar补充——包分隔之split

如果我们在打包的过程中,打包出来的文件大小过大,可能依然不适合传输,此时我们可以把这个文件用split命令分割成多个小文件,这样可能更加方便我们的储存和传输,当然,在解包的时候,我么可以再将其还原成一个完整的文件。

命令:split

格式:split -b size -d tar-file-name prefix-name

    -b表示每个输出文件的大小,-d表示输出的结尾以数字标示(如果不加-d则以字母表示为后缀)

Example:

1、split -b 1M -d mybackup.tgz mybackup-parts

2、split -b 1M mybackup.tgz mybackup-parts


1.4 打包备份cpio

     cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。

命令:cpio

格式:cpio [选项] > 文件名或设备名

      cpio [选项] < 文件名或设备名

选项:    -o 将文件拷贝打包成文件或将文件输出到设备上

          -i 解包,将打包文件解压或将设备上的备份还原到系统

          -t 预览,查看文件内容或输出到设备上的文件内容

          -v 显示打包过程中的文件名称

          -d 解包生成目录,在cpio还原时,自动的建立目录

          -c 一种较新的存储方式

 1 [root@ keer app]# find -type f |cpio -o > /app/etc_f.cpio         ----------通过重定向把/etc/下的普通文件进行打包备份
 2 [root@ keer app]# ll
 3 total 204
 4 -rw-r--r--. 1 root root  30720 Aug 12 08:46 app.tar
 5 drwxr-xr-x. 2 root root   4096 Aug 12 08:55 etc
 6 -rw-r--r--. 1 root root 107008 Aug 12 09:31 etc_f.cpio
 7 -rw-r--r--. 1 root root     54 Aug 12 09:19 excludefilelist
 8 -rw-r--r--. 1 root root   1866 Aug 12 09:11 files.tar.bz2
 9 -rw-r--r--. 1 root root      0 Aug 12 09:26 functions
10 -rw-r--r--. 1 root root    999 Aug 11 19:51 god
11 -rw-r--r--. 1 root root     28 Aug 12 09:18 includefilelist
12 -rw-r--r--. 1 root root  18307 Aug 12 09:20 mybackup.tgz
13 -rw-r--r--. 1 root root     36 Aug 11 20:01 nihao
14 -rw-r--r--. 1 root root   3518 Aug 11 19:44 passwd
15 -rw-r--r--. 1 root root    288 Aug 11 19:47 poetry
16 -rw-r--r--. 1 root root  10240 Aug 12 08:55 test.tar
17 
18 # 查看刚刚打包的文件内容:
19 
20 [root@ keer app]# cpio -vt < etc_f.cpio |less
21 -rw-r--r--   1 root     root          288 Aug 11 19:47 poetry
22 -rw-r--r--   1 root     root            0 Aug 12 09:26 functions
23 -rw-r--r--   1 root     root        18307 Aug 12 09:20 mybackup.tgz
24 -rw-r--r--   1 root     root        10240 Aug 12 08:55 test.tar
25 -rw-r--r--   1 root     root          999 Aug 11 19:51 god
26 -rw-r--r--   1 root     root         1866 Aug 12 09:11 files.tar.bz2
27 -rw-r--r--   1 root     root           28 Aug 12 09:18 includefilelist
28 -rw-r--r--   1 root     root         3518 Aug 11 19:44 passwd
29 -rw-r--r--   1 root     root           36 Aug 11 20:01 nihao
30 -rw-r--r--   1 root     root           54 Aug 12 09:19 excludefilelist
31 -rw-r--r--   1 root     root        35328 Aug 12 10:33 etc_f.cpio
32 -rw-r--r--   1 root     root        30720 Aug 12 08:46 app.tar

    新建一个目录,并将文件恢复到该目录下

 1 [root@ keer app]# mkdir etc
 2 [root@ keer app]# ll
 3 total 196
 4 drwxr-xr-x. 2 root root   4096 Aug 12 10:51 etc
 5 -rw-r--r--. 1 root root 101888 Aug 12 10:33 etc_f.cpio
 6 [root@ keer app]# cd etc/
 7 [root@ keer etc]# pwd
 8 /app/etc
 9 [root@ keer etc]# cpio -id < ../etc_f.cpio 
10 199 blocks
11 [root@ keer etc]# ll
12 total 128
13 -rw-r--r--. 1 root root 30720 Aug 12 10:52 app.tar
14 -rw-r--r--. 1 root root 35328 Aug 12 10:52 etc_f.cpio
15 -rw-r--r--. 1 root root    54 Aug 12 10:52 excludefilelist
16 -rw-r--r--. 1 root root  1866 Aug 12 10:52 files.tar.bz2
17 -rw-r--r--. 1 root root     0 Aug 12 10:52 functions
18 -rw-r--r--. 1 root root   999 Aug 12 10:52 god
19 -rw-r--r--. 1 root root    28 Aug 12 10:52 includefilelist
20 -rw-r--r--. 1 root root 18307 Aug 12 10:52 mybackup.tgz
21 -rw-r--r--. 1 root root    36 Aug 12 10:52 nihao
22 -rw-r--r--. 1 root root  3518 Aug 12 10:52 passwd
23 -rw-r--r--. 1 root root   288 Aug 12 10:52 poetry
24 -rw-r--r--. 1 root root 10240 Aug 12 10:52 test.tar

    有时使用cpio命令打包的文件过大,我们还可以使用压缩命令对其进行压缩

1 [root@ keer app]# bzip2 -k -9 etc_f.cpio 
2 [root@ keer app]# ll -h
3 total 232K
4 drwxr-xr-x. 2 root root 4.0K Aug 12 10:52 etc
5 -rw-r--r--. 1 root root 100K Aug 12 10:33 etc_f.cpio
6 -rw-r--r--. 1 root root  35K Aug 12 10:33 etc_f.cpio.bz2

 

二、压缩工具汇总

2.1 compress/uncompress(.Z文件)

命令:compress  压缩

格式:compress [-dfvcVr] [-b maxbits] [file ...]

选项:  -d:解压缩,相当于uncompress(不能补齐)

     -c:将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

      -v:显示详情(压缩过程)

          -f:默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

命令:uncompress  解压缩(可以补齐)

格式:uncompress [file ...]

Example:

1 [root@ keer app]# ll -h
2 total 1.3G
3 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
4 [root@ keer app]# compress passwd         ----------压缩passwd
5 [root@ keer app]# ll -h
6 total 117M
7 -rw-r--r--. 1 root root 117M Aug 12 11:07 passwd.Z

    由上可以看出,这个工具的压缩效率不是很高,而且会覆盖原文件,我们怎么才能保留原文件并且也压缩呢?

1 [root@ keer app]# compress -c passwd > passwd.Z
2 [root@ keer app]# ll -h
3 total 1.4G
4 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
5 -rw-r--r--. 1 root root 117M Aug 12 11:16 passwd.Z

    当然这种方法可能会导致文件的权限改变0.0所以建议不要使用这种方法。

    如果我们压缩的文件中有带有硬链接的文件呢?我们加上 -f 选项即可:

 1 [root@ keer app]#ll -h
 2 total 1.4G
 3 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
 4 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz
 5 -rw-r--r--. 1 root root 117M Aug 12 11:16 passwd.Z
 6 [root@ keer app]#
 7 [root@ keer app]#ll -h
 8 total 1.4G
 9 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
10 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz
11 -rw-r--r--. 1 root root 117M Aug 12 11:16 passwd.Z
12 [root@ keer app]#ln passwd passwd.ln
13 [root@ keer app]#ll -h
14 total 2.6G
15 -rw-r--r--. 2 root root 1.3G Aug 12 11:07 passwd
16 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz
17 -rw-r--r--. 2 root root 1.3G Aug 12 11:07 passwd.ln        ------------注意硬链接数
18 -rw-r--r--. 1 root root 117M Aug 12 11:16 passwd.Z
19 [root@ keer app]#compress passwd
20 passwd has 1 other links: unchanged
21 [root@ keer app]#compress -f  passwd
22 [root@ keer app]#ll -h
23 total 1.4G
24 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz
25 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd.ln        ------------注意硬链接数
26 -rw-r--r--. 1 root root 117M Aug 12 11:07 passwd.Z

  下面给大家说一下解压缩,一共三种方法:

1 [root@ keer app]# compress -d passwd.Z
2 [root@ keer app]# uncompress passed.Z
3 [root@ keer app]# zcat passwd.Z > passwd

       由上可以看出,我们有一个解压缩的万能工具——zcat。这个命令后面直接跟需要解压缩的文件名,但是这个命令出来的内容也是直接打印的,需要配合重定向使用。

在本文介绍的所有压缩工具中,只有compress -d 命令是不可以补齐的,其他的都可以,这个要注意喏。所以这个工具其实并不是很好用。

 

2.2 gzip/gunzip(.gz文件)

命令:gzip

格式:gzip [OPTION]... FILE ...

选项:        -d 解压缩,相当于gunzip

-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

-v 显示详细过程。

-# 数字越大,压缩比越高,速度越慢,文件越小。

-1 等于 --fast

-2,3,4,5,6(default),7,8

-9 等于 --best

Example:

1 [root@ keer app]# gzip -c passwd > passwd.gz    -----------保留原文件并对passwd进行压缩
2 [root@ keer app]# ll -h
3 total 1.4G
4 -rw-r--r--. 1 root root 1.3G Aug 12 11:07 passwd
5 -rw-r--r--. 1 root root 7.8M Aug 12 11:23 passwd.gz

         可以看出,这个的压缩效率还是蛮高的,这个命令有一个设定压缩比的功能,用数字1-9表示,下面我们就来演示一下:

 1 [root@ keer app]# gzip -c1 passwd > passwd.1.gz
 2 [root@ keer app]# gzip -c6 passwd > passwd.6.gz
 3 [root@ keer app]# gzip -c9 passwd > passwd.9.gz
 4 
 5 #我们只来对比一下1,6,9。别的就不做过多演示
 6 
 7 [root@ keer app]# ll 
 8 total 1477020
 9 -rw-r--r--. 1 root root 1330664794 Aug 12 11:07 passwd
10 -rw-r--r--. 1 root root   35703636 Aug 12 14:34 passwd.1.gz
11 -rw-r--r--. 1 root root    8162665 Aug 12 14:35 passwd.6.gz
12 -rw-r--r--. 1 root root    7974465 Aug 12 14:36 passwd.9.gz
13 -rw-r--r--. 1 root root    8162665 Aug 12 11:23 passwd.gz

         从上面我们可以发现,passwd.6.gz和passwd.gz的大小是一样的,也就是说,gzip的默认压缩比是6

    gzip的解压方法也是三种,如下:
1 [root@ keer app]# gzip -d test_gzip.gz 
2 [root@ keer app]# gunzip test_gzip.gz 
3 [root@ keer app]# zcat test_gzip.gz > test_gzip

 

2.3 bzip2/bunzip2/bzcat(.bz2文件)

命令:bzip2

格式:bzip2 [OPTION]... FILE ...

选项:    -d 解压缩,相当于bunzip2&bzcat(bzcat需要配合重定向使用)

-k 保留原文件

-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

-v 显示详细过程。

-#         数字越大,压缩比越高,速度越慢,文件越小。

-1 等于 --fast

-2,3,4,5,6,7,8

-9 等于 --best (default)

Example:

    跟前面介绍到的两个压缩工具相比,bzip2工具不仅提高了压缩比,还可以保留原文件,可以说是非常好用了( • ̀ω•́ )✧但是但是!压缩的时间真的是很长了╮(╯﹏╰)╭所以太大的文件不建议用这个工具

1 [root@ keer app]# ll -h
2 total 146M
3 -rw-r--r--. 1 root root 146M Aug 12 15:28 test
4 [root@ keer app]# bzip2 -k test       -------------压缩test文件
5 [root@ keer app]# ll -h
6 total 147M
7 -rw-r--r--. 1 root root 146M Aug 12 15:28 test
8 -rw-r--r--. 1 root root 564K Aug 12 15:28 test.bz2

     同样的,我们也来说一下如何解压

1 [root@ keer app]# bunzip2 test.bz2
2 [root@ keer app]# bzip2 -d test.bz2
3 [root@ keer app]# bzcat test.bz2 > test

 

2.4 xz/unxz/xzcat(.xz文件)

命令:xz

格式:xz [OPTION]... FILE...

选项:  -d 解压缩   xzcat

     -k 保留原文件

     -f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

     -v 显示详细过程。

     -#   数字越大,压缩比越高,速度越慢,文件越小。

       -0 等于 --fast

       -1 -2,3,4,5,6(default),7,8

       -9 等于 --best

Example:

        当当当当,本文中介绍的所有压缩工具中最好用的来了~xz与上文中介绍的三个工具相比,压缩比可是高的吓人喏

 1 [root@ keer app]# ll -h
 2 total 162M
 3 -rw-r--r--. 1 root root 146M Aug 12 15:28 test
 4 -rw-r--r--. 1 root root 564K Aug 12 15:28 test.bz2
 5 -rw-r--r--. 1 root root 870K Aug 12 15:42 test.gz
 6 -rw-r--r--. 1 root root  15M Aug 12 15:42 test.Z
 7 [root@ keer app]# xz -kv test
 8 100 %        23.6 KiB / 145.6 MiB = 0.000    11 MiB/s       0:13             
 9 [root@ keer app]# ll -h
10 total 162M
11 -rw-r--r--. 1 root root 146M Aug 12 15:28 test
12 -rw-r--r--. 1 root root 564K Aug 12 15:28 test.bz2
13 -rw-r--r--. 1 root root 870K Aug 12 15:42 test.gz
14 -rw-r--r--. 1 root root  24K Aug 12 15:28 test.xz
15 -rw-r--r--. 1 root root  15M Aug 12 15:42 test.Z

          这就可以很清楚的对比出xz的压缩比有多大了,而且xz的压缩时间也很快喏~0.0

    我们再来说一下xz如何解压

1 [root@ keer app]# xz -d test.xz 
2 [root@ keer app]# xzcat test.xz > test

 

2.5 打包压缩zip/unzip(.zip文件)

命令:zip(打包压缩)

格式:zip -r 包名文件1路径  文件二路径 …

zip命令是将多个文件进行打包压缩,所以直接在包名后跟文件路径即可。如果不加包名,会默认将第一个文件作为包名,该文件不参与打包压缩的过程。

命令:unzip(打包解压缩)

格式:unzip file...

unzip解压时,会在当前目录下新建一个文件夹,文件夹内储存包内的所有文件。文件的权限不变。

补充:

|zip 将生成的文件名 –

可以将管道前的输出结果转为文件并压缩。通过此方式压缩的文件只能使用“unzip -p 压缩包 > 新文件 ”来解压缩

unzip -p 预览解压缩后的内容到屏幕,可以配合重定向将结果保存到指定文件,权限会发生变化。(一般用于单个文件的压缩和解压缩)

Example:

 1 [root@ keer app]# zip -r files /etc/group /etc/passwd      ----------打包压缩/etc/group和/etc/passwd文件
 2   adding: etc/group (deflated 51%)
 3   adding: etc/passwd (deflated 64%)
 4 [root@ keer app]# ll 
 5 total 4
 6 -rw-r--r--. 1 root root 2336 Aug 12 15:50 files.zip
 7 [root@ keer app]# unzip -d lianxi files.zip                -----------解压文件files.zip到lianxi目录下
 8 Archive:  files.zip
 9   inflating: lianxi/etc/group        
10   inflating: lianxi/etc/passwd       
11 [root@ keer app]# ll
12 total 8
13 -rw-r--r--. 1 root root 2336 Aug 12 15:50 files.zip
14 drwxr-xr-x. 3 root root 4096 Aug 12 15:51 lianxi
15 [root@ keer app]# cd lianxi/
16 [root@ keer lianxi]# ll
17 total 4
18 drwxr-xr-x. 2 root root 4096 Aug 12 15:51 etc
19 [root@ keer lianxi]# cd etc/
20 [root@ keer etc]# ll
21 total 8
22 -rw-r--r--. 1 root root 1500 Aug  8 17:57 group
23 -rw-r--r--. 1 root root 3518 Aug  8 17:57 passwd
 1 [root@ keer app]# find /etc/ -type f | zip etc.zip -             -----------压缩
 2   adding: - (deflated 86%)
 3 [root@ keer app]# ll
 4 total 24
 5 -rw-r--r--. 1 root root 16230 Aug 12 15:55 etc.zip
 6 [root@ keer app]# unzip -p etc.zip > etc.zz                      -----------解压
 7 [root@ keer app]# ll
 8 total 140
 9 -rw-r--r--. 1 root root  16230 Aug 12 15:55 etc.zip
10 -rw-r--r--. 1 root root 117360 Aug 12 15:55 etc.zz

 

 

    以上,如有不足之处还请大家多多指教诺(〃'▽'〃)

作者:珂儿吖

出处:http://www.cnblogs.com/keerya/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,希望尊重劳动成果哟~

posted on 2017-08-12 16:37  珂儿吖  阅读(709)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3