且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

玩转Linux压缩及归档

更新时间:2022-10-02 16:28:54

1.关于压缩

在Linux上常见的压缩文件格式有:gzip,bzip2,xz,zip等。

gzip-->.gz  bzip2-->.bz2   xz-->.xz  zip-->.zip。

gzip,bzip2,xz只支持对文件进行压缩,zip支持对目录进行压缩。

gzip出现的早,然后是bzip2,然后是xz。它们的压缩比慢慢变大。


2.常用压缩命令的使用

gzip

1
2
3
4
5
6
7
[root@localhost test]# ls -lh
total 8.0K
-rw-r--r-- 1 root root 1.7K Jul  1 19:17 inittab
[root@localhost test]# gzip inittab 
[root@localhost test]# ls -lh
total 8.0K
-rw-r--r-- 1 root root 830 Jul  1 19:17 inittab.gz

说明:

  • 只支持对单个文件进行压缩,只需要指定待压缩文件,压缩后自动追加后缀.gz

  • 解压可以使用gunzip或者gzip -d【gzip -d可能更常用些,d表示decompress】

  • 在WINDOWS中,我们常常可以双击一个压缩文件来查看里面的文件,也就是说我们并不想解压,只是想查看下。LINUX下,对于.gz压缩文件,可以使用zcat来查看里面的文本文件内容

  • 需要注意的是,gzip压缩完文件后,会删除原文件的

  • 可以指定压缩比,例如gzip -8 xxx。压缩比越小,压缩速度越快,压缩后的文件也越大,默认的压缩比为6



bzip2

1
2
3
4
5
6
7
8
9
10
[root@localhost test]# bzip2 inittab
[root@localhost test]# ls -lh
total 16K
-rw-r--r-- 1 root root 831 Jul  1 22:51 inittab2.gz
-rw-r--r-- 1 root root 898 Jul  1 23:10 inittab.bz2
[root@localhost test]# bzip2 -d inittab.bz2 
[root@localhost test]# ls -lh
total 16K
-rw-r--r-- 1 root root 1.7K Jul  1 23:10 inittab
-rw-r--r-- 1 root root  831 Jul  1 22:51 inittab2.gz

说明:

  • bzip2同gzip有很多相似的地方,比如只支持单文件进行压缩,解压缩bunzip2=bzip2 -d , 不解压查看bzcat,删除原文件,支持压缩比。

  • bzip2有一个常用选项,-k表示,即不删除原文件,Keep (don't delete) input files during compression or decompression.



xz

同上面的用法.

xz xxx

xz -d xxx.xz

unxz xxx.xz

xzcat xxx.xz


zip

  • 支持目录压缩,其实就是先archive,后进行压缩

  • zip your.zip file1 file2 file3...

  • zip your.zip dir

  • unzip xxx.zip


3.归档:tar

注意到,很多时候,我们希望对多个文件或者目录进行gzip,bzip2,xz压缩,但是gzip/bzip2/xz又仅仅支持单文件压缩,那么怎么办呢?我们可以先将多个文件或者目录整合成一个文件,然后就可以对其进行压缩了。把多个文件整合的过程就是归档,即archive.而tar就是一个这样的工具。

实例:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost test]# tar -cf 1.tar mtab fstab
[root@localhost test]# ls -l
total 84
-rw-r--r-- 1 root root 10240 Jul  2 05:37 1.tar
-rw-r--r-- 1 root root   952 Jul  2 05:23 1.zip
-rw-r--r-- 1 root root  5342 Jul  2 05:24 2.zip
-rw-r--r-- 1 root root   532 Jul  2 05:23 fstab
-rw-r--r-- 1 root root   898 Jul  1 23:10 inittab.bz2
-rw-r--r-- 1 root root   900 Jul  1 23:10 inittab.xz
-rw-r--r-- 1 root root  1666 Jul  1 22:51 inittab2
-rw-r--r-- 1 root root   318 Jul  2 05:23 mtab
drwxr-xr-x 2 root root  4096 Jul  2 05:24 profile
1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost test]# tar -xf 1.tar
[root@localhost test]# ls -l
total 84
-rw-r--r-- 1 root root 10240 Jul  2 05:37 1.tar
-rw-r--r-- 1 root root   952 Jul  2 05:23 1.zip
-rw-r--r-- 1 root root  5342 Jul  2 05:24 2.zip
-rw-r--r-- 1 root root   532 Jul  2 05:23 fstab
-rw-r--r-- 1 root root   898 Jul  1 23:10 inittab.bz2
-rw-r--r-- 1 root root   900 Jul  1 23:10 inittab.xz
-rw-r--r-- 1 root root  1666 Jul  1 22:51 inittab2
-rw-r--r-- 1 root root   318 Jul  2 05:23 mtab
drwxr-xr-x 2 root root  4096 Jul  2 05:24 profile


说明:

  • -x表示展开归档,-c表示create archive,-f指定archive filename。

  • 归档时,可以指定一些属性,比如有些文件具有ACL扩展属性,那么可以使用--xattrs。

  • 对多个文件先归档,然后进行压缩,这样的话,需要分两步,可否一步完成。tar可以调用压缩工具的。如:

tar -czf  ....   表示先归档,然后gzip压缩

tar -cjf   ....   表示先归档,然后bzip2压缩

1
2
3
4
5
6
7
[root@localhost test]# tar -jcf 3.tar.bz2 fstab inittab2
[root@localhost test]# ls -l
total 1112
-rw-r--r--  1 root root   10240 Jul  2 05:37 1.tar
-rw-r--r--  1 root root     952 Jul  2 05:23 1.zip
-rw-r--r--  1 root root    5342 Jul  2 05:24 2.zip
-rw-r--r--  1 root root    1181 Jul  2 18:34 3.tar.bz2
  • 如果我们想对xxx.tar.gz,xxx.tar.bz2,xxx.tar.xz进行解压缩+展开归档的话,可以一步调用tar完成。如tar -xf xxx.tar.gz。因为tar可以自动识别后缀名然后调用解压工具完成解压操作。

  • 同样的,如果不想展开归档,只是想查看下的话,-t选项即可。


本文转自zfz_linux_boy 51CTO博客,原文链接:http://blog.51cto.com/zhangfengzhe/1434287,如需转载请自行联系原作者