跳转至

Linux 手册 | 压缩命令

不管是在 Linux 还是其他操作系统中,关于数据的压缩和解压缩操作是经常被用到的。由于在 Windows 平台文件的相关操作被傻瓜化了,到了 Linux 平台让好多小伙伴感觉有点束手无策,本篇文章中主要为大家讲解基于 Linux 的常用压缩包操作,格式包含:tar.gz, .tgz, .tar.bz2, .zip, .rar, .tar.xz

tar 工具

在 Linux 操作系统中默认自带两个原始的压缩工具分别是 gzip 和 bzip2 , 但是它们都有先天的缺陷, 不能打包压缩文件, 每个文件都会生成一个单独的压缩包, 并且压缩之后不会保留原文件, 这是一件不能忍的事情。

Linux 中自带一个打包工具,叫做 tar , 默认情况下该工具是不能进行压缩操作的,在这种情况下 tar 和 gzip , bzip2 就联姻了, 各自发挥各自的优势, Linux 下最强大的打包压缩工具至此诞生。

我们在使用 tar 进行压缩和解压缩的时候, 只需要指定相对用的参数, 在其内部就会调用对应的压缩工具 gzip 或者 bzip2 完成指定的操作。

压缩 (.tar.gz .tar.bz2 .tgz)

如果使用 tar 完成文件压缩, 涉及的参数如下, 在使用过程中参数没有先后顺序:

  • c: 创建压缩文件;
  • z: 使用gzip的方式进行文件压缩;
  • j: 使用bzip2的方式进行文件压缩;
  • v: 压缩过程中显示压缩信息, 可以省略不写;
  • f: 指定压缩包的名字。

一般认为 .tgz 文件就等同于 .tar.gz 文件, 因此它们的压缩方式是相同的。

Bash
1
2
3
4
5
6
# 语法: 
$ tar 参数 生成的压缩包的名字 要压缩的文件(文件或者目录)

# 备注: 关于生成的压缩包的名字, 建议使用标准后缀, 方便识别:
    - 压缩使用 gzip 方式,  标准后缀格式为: .tar.gz
    - 压缩使用 bzip2 方式, 标准后缀格式为: .tar.bz2  
以 gzip 压缩方式
# 查看目录内容
[root@VM-8-14-centos ~/luffy]# ls
get  onepiece.txt  robin.txt

# 压缩目录中所有文件, 如果要压缩某几个文件, 直接指定文件名即可
[root@VM-8-14-centos ~/luffy]# tar zcvf all.tar.gz *
get/                     # ....... 压缩信息
get/link.lnk             # ....... 压缩信息
get/onepiece/            # ....... 压缩信息
get/onepiece/haha.txt
get/link.txt
onepiece.txt
robin.txt

# 查看目录文件, 多了一个压缩文件 all.tar.gz
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz  get  onepiece.txt  robin.txt
以 bzip2 压缩方式
# 查看目录内容
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz  get  onepiece.txt  robin.txt

# 压缩目录中除 all.tar.gz 的文件和目录
[root@VM-8-14-centos ~/luffy]# tar jcvf part.tar.bz2 get onepiece.txt robin.txt 
get/                   # ....... 压缩信息
get/link.lnk           # ....... 压缩信息
get/onepiece/          # ....... 压缩信息
get/onepiece/haha.txt
get/link.txt
onepiece.txt
robin.txt

# 查看目录信息, 多了一个压缩文件 part.tar.bz2
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz  get  onepiece.txt  part.tar.bz2  robin.txt

解压缩 (.tar.gz .tar.bz2 .tgz)

如果使用 tar 进行文件的解压缩, 涉及的参数如下, 在使用过程中参数没有先后顺序:

  • x: 释放压缩文件内容;
  • z: 使用 gzip 的方式进行文件压缩, 压缩包后缀为 .tar.gz
  • j: 使用 bzip2 的方式进行文件压缩, 压缩包后缀为 .tar.bz2
  • v: 解压缩过程中显示解压缩信息;
  • f: 指定压缩包的名字。

使用以上参数是将压缩包解压到当前目录, 如果需要解压到指定目录, 需要指定参数 -C。 一般认为 .tgz 文件就等同于 .tar.gz 文件, 解压缩方式是相同的。解压的语法格式如下:

Bash
1
2
3
4
5
# 语法1: 解压到当前目录中
$ tar 参数 压缩包名 

# 语法2: 解压到指定目录中
$ tar 参数 压缩包名 -C 解压目录
gzip 解压缩
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz  get  onepiece.txt  part.tar.bz2  robin.txt  temp

# 将 all.tar.gz 压缩包解压缩到 temp 目录中
[root@VM-8-14-centos ~/luffy]# tar zxvf all.tar.gz -C temp
get/                      # 解压缩文件信息
get/link.lnk              # 解压缩文件信息
get/onepiece/             # 解压缩文件信息
get/onepiece/haha.txt     # 解压缩文件信息
get/link.txt
onepiece.txt
robin.txt

# 查看temp目录内容, 都是从压缩包中释放出来的
[root@VM-8-14-centos ~/luffy]# ls temp/
get  onepiece.txt  robin.txt
bzip2 解压缩
# 删除 temp 目录中的所有文件
[root@VM-8-14-centos ~/luffy]# rm temp/* -rf

# 查看 luffy 目录中的文件信息
[root@VM-8-14-centos ~/luffy]# ls
all.tar.gz  get  onepiece.txt  part.tar.bz2  robin.txt  temp

# 将 part.tar.bz2 中的文件加压缩到 temp 目录中
[root@VM-8-14-centos ~/luffy]# tar jxvf part.tar.bz2 -C temp
get/                         # 解压缩文件信息
get/link.lnk                 # 解压缩文件信息
get/onepiece/                # 解压缩文件信息
get/onepiece/haha.txt        # 解压缩文件信息
get/link.txt
onepiece.txt
robin.txt

# 查看 temp 目录中的文件信息
[root@VM-8-14-centos ~/luffy]# ls temp/
get  onepiece.txt  robin.txt

zip 工具

zip 格式的压缩包在 Linux 中也是很常见的, 在某些版本中需要安装才能使用。

Bash
1
2
3
4
5
6
7
8
# Ubuntu
$ sudo apt install zip      # 压缩
$ sudo apt install unzip    # 解压缩

# CentOS
# 因为 centos 可以使用 root 用户登录, 基于 root 用户安装软件, 不需要加 sudo
$ sudo yum install zip      # 压缩
$ sudo yum install unzip    # 解压缩

压缩 (.zip)

使用 zip 压缩目录需要注意一点, 必须要添加参数 -r, 这样才能将子目录中的文件一并压缩, 如果要压缩的文件中没有目录, 该参数就可以不写了。

另外使用 zip 压缩文件, 会自动生成文件后缀 .zip, 因此就不需要额外指定了。

Bash
# 语法: 后自动添加压缩包后缀 .zip, 如果要压缩目录, 需要添加参数 r
$ zip [-r]  压缩包名 要压缩的文件
示例
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
get  onepiece.txt  robin.txt  temp

# 压缩目录 get 和文件 onepiece.txt robin.txt 得到压缩包 all.zip(不需要指定后缀, 自动添加)
[root@VM-8-14-centos ~/luffy]# zip all onepiece.txt robin.txt get/ -r
  adding: onepiece.txt (stored 0%)
  adding: robin.txt (stored 0%)
  adding: get/ (stored 0%)
  adding: get/link.lnk (stored 0%)             # 子目录中的文件也被压缩进去了
  adding: get/onepiece/ (stored 0%)            # 子目录中的文件也被压缩进去了
  adding: get/onepiece/haha.txt (stored 0%)    # 子目录中的文件也被压缩进去了
  adding: get/link.txt (stored 0%)             # 子目录中的文件也被压缩进去了

# 查看目录文件信息, 多了一个压缩包文件 all.zip
[root@VM-8-14-centos ~/luffy]# ls
all.zip  get  onepiece.txt  robin.txt  temp

解压缩 (.zip)

对应 zip 格式的文件解压缩, 必须要使用 unzip 命令, 和压缩的时候使用的命令是不一样的。如果压缩包中的文件要解压到指定目录需要指定参数 -d, 默认是解压缩到当前目录中。

Bash
1
2
3
4
5
# 语法1: 解压到当前目录中 
$ unzip 压缩包名

# 语法: 解压到指定目录, 需要添加参数 -d
$ unzip 压缩包名 -d 解压目录
示例
# 查看目录文件信息
[root@VM-8-14-centos ~/luffy]# ls
all.zip  get  onepiece.txt  robin.txt  temp

# 删除 temp 目录中的所有文件
[root@VM-8-14-centos ~/luffy]# rm temp/* -rf

# 将 all.zip 解压缩到 temp 目录中
[root@VM-8-14-centos ~/luffy]# unzip all.zip -d temp/
Archive:  all.zip
 extracting: temp/onepiece.txt           # 释放压缩的子目录中的文件            
 extracting: temp/robin.txt              # 释放压缩的子目录中的文件            
   creating: temp/get/
 extracting: temp/get/link.lnk       
   creating: temp/get/onepiece/
 extracting: temp/get/onepiece/haha.txt  # 释放压缩的子目录中的文件
 extracting: temp/get/link.txt      

# 查看 temp 目录中的文件信息 
[root@VM-8-14-centos ~/luffy]# ls temp/
get  onepiece.txt  robin.txt