美文网首页
Linux文件压缩

Linux文件压缩

作者: yousiku | 来源:发表于2018-11-29 22:55 被阅读0次

    压缩与解压

    gzip

    gzip是linux上应用最广泛的压缩指令,它创建的压缩文件后缀名为.gz

    用法:

    gzip [选项] 文件名

    常用选项:
    • -c: 打印压缩后到内容
    • -d: 解压缩
    • -v: 显示出压缩比等信息
    • -数字: 压缩等级,-1表示最快但是压缩比最差,-9表示最慢但是压缩比最好,默认为-6
    演示

    将 /etc/services 拷贝到当前目录,压缩并打印压缩比信息

    [yousiku@localhost ~]$ cp /etc/services .
    [yousiku@localhost ~]$ ls
    services
    [yousiku@localhost ~]$ gzip -v services 
    services:    79.7% -- replaced with services.gz
    [yousiku@localhost ~]$ ls
    services.gz
    

    可以看到,使用gzip会直接将原文件压缩为.gz文件。
    若想要将.gz压缩文件解压,可以加上-d选项:

    [yousiku@localhost ~]$ gzip -d services.gz 
    [yousiku@localhost ~]$ ls
    services
    

    而在上一步中我们发现直接使用gzip指令压缩文件后原文件不会保留,若想要在压缩时保留原文件可以这样:

    [yousiku@localhost ~]$ gzip -c services > services.gz
    [yousiku@localhost ~]$ ls
    services  services.gz
    

    -c选项是打印压缩后的文件内容,而>符号表示将要打印的内容重定向到service.gz文件中,因此压缩后到内容就保存在了service.gz中

    试试不同的压缩等级:

    [yousiku@localhost ~]$ gzip -1vc services > service1.gz
    services:    76.6%
    [yousiku@localhost ~]$ gzip -9vc services > service9.gz
    services:    79.8%
    

    可以看到使用-9选项的压缩比更高(压缩比是指压缩后减少的文件大小比原文件大小),但是在压缩速度上要慢些

    如果想要不将压缩文件解压直接查看文件内容,使用cat是不行的,这样会得到解压后的内容,显示为乱码。这时我们可以使用zcat命令就可以直接查看压缩文件原来的内容了:

    [yousiku@localhost ~]$ zcat service1.gz
    

    xz

    xz与gzip相比拥有更高的压缩比,但是在压缩速度上会慢不少。通过xz压缩的文件名后缀为.xz

    用法

    xz [选项] 文件名

    常用选项
    • -d: 解压缩
    • -v: 列出压缩比信息
    • -k: 保留原文件
    • -c: 打印压缩内容
    • -数字: 压缩等级,-1表示最快但是压缩比最差,-9表示最慢但是压缩比最好,默认为-6
    演示

    直接压缩并打印压缩比信息

    [yousiku@localhost ~]$ xz -v services
    services (1/1)
      100 %        97.3 KiB / 654.6 KiB = 0.149                                    
    [yousiku@localhost ~]$ ls
    service1.gz  service9.gz  services.xz 
    

    services 被压缩成了services.xz,并且可以看到通过xz命令压缩文件的压缩比为1-0.149=85.1%,压缩比较gzip指令高不少,但是速度会慢很多

    解压:

    [yousiku@localhost ~]$ xz -d services.xz 
    

    打包指令:tar

    前面提到的gzipxz只能对单一的文件压缩,但在实际使用过程中我们常常需要对整个目录打包成一个大文件一起压缩,tar指令即可实现这样的功能,不仅于此,它还能在打包的同时将打包文件压缩成各种格式的压缩文件,包括.gz.xz

    常用选项
    • -c: 创建打包文件
    • -t: 查看打包后的文件里有哪些文件名
    • -x: 解打包或解压缩
    • -z: 通过gzip压缩或解压缩,此时建议指定压缩后文件后缀为.tar.gz
    • -J: 通过xz压缩或解压缩,此时建议指定压缩后文件后缀为.tar.xz
    • -f: 要打包压缩生成或解压解包的文件名
    • -C: 在特定的目录解压缩
    用法

    tar [选项] -f [打包或压缩后到文件名] [要打包的目录]

    演示

    /etc打包到当前目录的etc.tar文件(由于打包/etc需要root权限,因此先切换到root账户):

    [yousiku@localhost ~]$ su -
    密码:
    上一次登录:四 11月 29 22:44:31 CST 2018pts/0 上
    [root@localhost ~]# tar -c -f ./etc.tar /etc
    tar: 从成员名中删除开头的“/”
    [root@localhost ~]# ls
    anaconda-ks.cfg  etc.tar
    

    此时生成的etc.tar文件并没有经过压缩

    分别按gzip方式和xz方式打包压缩:

    [root@localhost ~]# tar -zc -f ./etc.tar.gz /etc
    tar: 从成员名中删除开头的“/”
    [root@localhost ~]# tar -Jc -f ./etc.tar.xz /etc
    tar: 从成员名中删除开头的“/”
    [root@localhost ~]# ll
    总用量 44000
    -rw-------. 1 root root     1257 10月 20 07:01 anaconda-ks.cfg
    -rw-r--r--. 1 root root 28313600 11月 29 22:50 etc.tar
    -rw-r--r--. 1 root root  9787847 11月 29 22:59 etc.tar.gz
    -rw-r--r--. 1 root root  6943872 11月 29 22:59 etc.tar.xz
    

    可以看到,生成的文件中etc.tar由于没有经过压缩所以最大,而etc.tar.gzetc.tar.xz经过压缩后体积较etc.tar小很多

    直接查看打包文件里面包含的文件名:

    [root@localhost ~]# tar -t -f etc.tar.xz
    

    解包出etc目录到当前目录:

    [root@localhost ~]# tar -x -f etc.tar.gz
    [root@localhost ~]# ls
    anaconda-ks.cfg  etc  etc.tar  etc.tar.gz  etc.tar.xz
    

    若想仅仅将打包文件中的其中一个文件解包出来可以用如下用法:
    tar -x -f [打包文件] [待解包的文件]
    如,将etc.tar.gz中的etc/shadow文件解包出来(这里先将上一步解包出的etc目录删除否则目录冲突):

    [root@localhost ~]# rm -rf etc
    [root@localhost ~]# tar -x -f etc.tar.gz etc/shadow
    [root@localhost ~]# ls
    anaconda-ks.cfg  etc  etc.tar  etc.tar.gz  etc.tar.xz
    [root@localhost ~]# ls etc
    shadow
    

    这样解包出的etc目录下就只有shadow文件了

    目前我们经常要从网上下载的软件包大都是后缀名为.tar.gz的形式,而如果用gzip解压的话得到的是.tar文件,这样就还需要用tar解包;但是使用tar -x命令可以一步到位直接将.tar.gz文件解压解包出来,可以说tar指令在文件压缩打包的用途最为广泛!

    思维导图

    Linux文件压缩打包.png

    相关文章

      网友评论

          本文标题:Linux文件压缩

          本文链接:https://www.haomeiwen.com/subject/kdsqcqtx.html