所在位置:

Linux下的压缩和解压缩详解

在操作Linux文件的时候,压缩和解压缩是非常常见的一种操作,而且要非常熟悉,Linux下的最常用的打包压缩解压缩工具就是 tar,下面先来说一下什么叫文件打包和文件压缩,然后来说举例说一下这些工具的用法:

什么叫文件打包

将多个文件或者目录合并成一个文件,用来进行文件的备份和传输

什么叫文件压缩

通过压缩算法把文件的体积缩小,同时会将多个文件合并至一起方便传输

Linux支持的压缩格式

  1. *.gz:gzip 程序压缩文件
  2. *.bz2:bzip2 程序压缩文件
  3. *.tar:tar程序打包文件,并未压缩
  4. *.tar.gz,tar打包的文件,使用gzip压缩
  5. *.tar.bz2, tar打包的文件,使用bzip2压缩
  6. *.zip,zip打包压缩的文件

gzip 工具的使用

格式:gzip 参数 文件名

注意:

  • gzip 压缩和解压缩都会把原文件删除的,可以使用 -c 参数来保留原文件
  • gzip 只能压缩和解压缩 普通文件 ,对于目录是不支持的,但是在目录里有普通文件,可以使用 -r 参数进行目录里的所有文件进行压缩和解压缩

可选的参数:

  • -c 将压缩的数据输入到屏幕上
  • -d 解压缩
  • -v 显示压缩比
  • -t 检查文件是否损坏
  • -r 递归操作目录里的文件
  • -1 到 -9 ,压缩比,-1 最快,-9 最慢, 默认是 -6
举例

压缩文件,生成后缀是 .gz 的文件

$ cd /home
$ echo "hello world" > /home/test.txt
$ gzip test.txt # 生成 test.txt.gz 文件

解压缩文件,并显示压缩比等信息

$ cd /home
$ gzip -dv test.txt.gz # 生成 test.txt 文件,等同于 gunzip -v test.txt.gz

压缩文件,同时保留原文件

$ cd /home
$ gzip -c test.txt > test.txt.gz

检查 gz 文件是否损坏

$ cd /home
$ gzip -t test.txt.gz

用最快速度来压缩文件 (速度越快,压缩的体积就会越大)

$ cd /home
$ gzip -v1 test.txt # 注意 v 参数不能写在后面

压缩 test 目录里的几个文件和 a.txt 文件

$ cd /home
$ gzip -rv test a.txt

解压缩 test 目录里的几个文件和 a.txt.gz 文件

$ cd /home
$ gzip -drv test

bzip2 工具的使用

格式:bzip2 参数 文件名

注意: bzip2 压缩和解压缩都会把原文件删除的,可以使用 -k 参数来保留原文件

可选的参数:

  • -c 将压缩的数据输入到屏幕上
  • -d 解压缩
  • -k 保留原文件
  • -v 显示压缩比
  • -t 检查文件是否损坏
  • -1 到 -9 ,压缩比,-1 最快,-9 最慢, 默认是 -6
举例

压缩文件,生成后缀是 .bz2 的文件

$ cd /home
$ echo "hello world" > /home/test.txt
$ bzip2 test.txt # 生成 test.txt.bz2 文件

解压缩文件,并显示压缩比等信息

$ cd /home
$ bzip2 -dv test.txt.bz2 # 生成 test.txt 文件

压缩文件,同时保留原文件

$ cd /home
$ bzip2 -k test.txt # 或者 bzip2 -c test.txt > test.txt.bz2

检查 bz2 文件是否损坏

$ cd /home
$ bzip2 -t test.txt.bz2

用最快速度来压缩文件 (速度越快,压缩的体积就会越大)

$ cd /home
$ bzip2 -v1 test.txt # 注意 v 参数不能写在后面

tar 工具的使用

压缩格式: tar [-jcv] -f 文件名.tar.bz2 文件或者目录

  • tar [-zcv] -f 文件名.tar.gz 文件或者目录
  • tar [-jcv] -f 文件名.tar.bz2 文件或者目录

解压缩格式 tar [-jxv] -f 文件名.tar.bz2 -C 解压缩的目录

  • tar [-zxv] -f 文件名.tar.gz -C 解压缩的目录
  • tar [-jxv] -f 文件名.tar.bz2 -C 解压缩的目录

可选的参数:

  • -c 打包文件
  • -x 解压缩或者解打包文件,可以用 -C 指定解打包的目录
  • -j 通过压缩或者解压缩成 bz2 文件
  • -z 通过压缩或者解压缩成 gz 文件
  • -t 查看打包的文件里有什么文件
  • -f 指定文件名,必须在参数的最后
举例

打包文件,生成后缀是 .tar 的文件,同时会保留原文件

$ cd /home
$ echo "hello world" > /home/test.txt
$ tar -cvf test.txt.tar test.txt # 生成 test.text.tar 文件

在当前目录解打包文件,同时会保留原文件

$ cd /home
$ tar -xvf test.txt.tar  # 在当前目录生成 test.text 文件

指定目录解打包文件,同时会保留原文件

$ cd /home
$ tar -xvf test.txt.tar  -C dir1 # 把解打包生成 test.txt 文件放到 dir1 目录

查看打包文件里面有什么文件

$ cd /home
$ tar -tvf test.txt.tar

打包压缩成gz文件,生成后缀是 .tar.gz 的文件,同时会保留原文件

$ cd /home
$ echo "hello world" > /home/test.txt
$ mkdir -p dir2 dir3
$ tar -zcvf dir.tar.gz test.txt dir2 dir3  # 生成 dir.tar.gz 文件

在当前目录打包解压缩gz文件,同时会保留原文件

$ cd /home
$ tar -zxvf dir.tar.gz  # 在当前目录打包解压缩 dir.tar.gz 文件

指定目录打包解压缩gz文件,同时会保留原文件

$ cd /home
$ tar -zxvf dir.tar.gz  -C mydir # 在 mydir 目录打包解压缩 dir.tar.gz 文件

打包压缩成bz2文件,生成后缀是 .tar.bz2 的文件,同时会保留原文件

$ cd /home
$ echo "hello world" > /home/test.txt
$ mkdir -p dir2 dir3
$ tar -jcvf dir.tar.bz2 test.txt dir2 dir3  # 生成 dir.tar.bz2 文件

在当前目录打包解压缩bz2文件,同时会保留原文件

$ cd /home
$ tar -jxvf dir.tar.bz2  # 在当前目录打包解压缩 dir.tar.bz2 文件

指定目录打包解压缩bz2文件,同时会保留原文件

$ cd /home
$ tar -zxvf dir.tar.bz2 -C mydir # 在 mydir 目录打包解压缩 dir.tar.bz2 文件

解压缩指定的某个目录,比如说 test.tar.bz2 里有一个文件叫做 a.c,现在只解压缩出 a.c 文件

$ tar -jtvf test.tar.bz2 # 查看 test 里的 a.c 的路径
$ tar -jxvf test.tar.bz2 test/a.c  # 后面跟要解压缩文件的路径和文件

zip 工具的使用

格式:zip 压缩文件名.zip 目录或者文件

举例

打包压缩成zip文件,生成后缀是 .zip 的文件,同时会保留原文件,参数 -r 表示递归目录,不然只会压缩目录,不会压缩目录里的文件

$ cd /home
$ zip -r dir.zip file1 dir1

删除 zip 压缩包指定的 a.c 文件

$ unzip -v test.zip  # 查看 zip 里是否有 a.c 文件
$ zip test.zip -d a.c

unzip 工具的使用

格式:unzip 压缩文件名.zip

举例

在当前目录打包解压缩zip文件,同时会保留原文件

$ cd /home
$ unzip dir.zip

打包解压缩zip文件,同时会保留原文件和指定解压缩目录

$ cd /home
$ unzip -d newdir dir.zip

查看解压缩 test.zip 文件里有什么文件

$ unzip -v test.zip

【上一篇】mysql的基本操作

【下一篇】Linux下的find命令详解