命令介绍

gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令,通过此命令压缩得到的新文件,其扩展名通常标记为“.gz”。

注意:
gzip 命令只能用来压缩文件,不能压缩目录,即便指定了目录,也只能压缩目录内的所有文件。

命令格式

gzip 命令的基本格式如下: gzip [选项] 源文件

命令中的源文件,当进行压缩操作时,指的是普通文件;当进行解压缩操作时,指的是压缩文件。

该命令常用的选项及各自的含义说明:

选项 含义 备注
-c 将压缩数据输出到标准输出中,并保留源文件。 -
-d 对压缩文件进行解压缩。 -
-r 递归压缩指定目录下以及子目录下的所有文件。 -
-v 对于每个压缩和解压缩的文件,显示相应的文件名和压缩比。 -
-l 对每一个压缩文件,显示以下字段: -
-数字 用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6。 -

命令实例

实例一:基本压缩

gzip 压缩命令非常简单,甚至不需要指定压缩之后的压缩包名,只需指定源文件名即可。我们来试试:

1
2
3
4
5
[root@ubuntu2204-101 ~ 11:23:10]# gzip data.zip etc/ user.zip
gzip: etc/ is a directory -- ignored # 目录不压缩,略过了

[root@ubuntu2204-101 ~ 11:23:28]# ls
data.zip.gz etc snap user.zip.gz # 分别压缩了 data.zip 和 user.zip ,而不是将这 2 个文件压缩在一起

实例二:递归压缩

参数: -r,递归压缩。递归压缩是指将目录及子目录下的所有文件单独压缩(而非压缩成一个文件),且目录下的子目录不会被压缩,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 压缩前:
[root@ubuntu2204-101 /data 20:41:07]# tree tar/
tar/
├── shadow
├── test1
│   └── bolt.service
├── test2
├── test3
└── test4
└── passwd

4 directories, 3 files


# 执行压缩:
[root@ubuntu2204-101 /data 20:41:13]# gzip -r tar/ # 这里没有报错,因为子目录下有文件


# ls 查看发现 tar 目录依旧存在:
[root@ubuntu2204-101 /data 20:41:34]# ls
data.tar.bz2 data.tar.gz tar


# 再次查看 tar 目录结构:目录及子目录下的所有文件都被单独压缩了
[root@ubuntu2204-101 /data 20:41:35]# tree tar/
tar/
├── shadow.gz
├── test1
│   └── bolt.service.gz
├── test2
├── test3
└── test4
└── passwd.gz

4 directories, 3 files

实例三:压缩时保留源文件

我们知道,使用 gzip 压缩时会影响源文件(源文件消失),但是我们也可以保留,那就是使用参数 -c ,用法如下:

1
2
3
4
5
[root@ubuntu2204-101 /tmp/tar 20:47:43]# gzip -c shadow > shadow.gz

# 查看
[root@ubuntu2204-101 /tmp/tar 20:49:27]# ls
shadow shadow.gz test1 test2 test3 test4

实例四:解压缩

gzip 可以对其自身压缩的文件进行解压缩,格式如下:gzip -d 压缩文件

1
2
3
4
5
6
7
8
9
# 为了实验更加清晰,我们先删除上面保留的源文件:
[root@ubuntu2204-101 /tmp/tar 20:49:29]# rm -rf shadow

# 解压:
[root@ubuntu2204-101 /tmp/tar 20:50:06]# gzip -d shadow.gz

# 查看:
[root@ubuntu2204-101 /tmp/tar 20:50:13]# ls
shadow test1 test2 test3 test4

注意:

  • 解压缩时,源文件必须存在,否则会报错。
  • 解压缩时,源文件必须是 gzip 压缩的文件,否则会报错。
  • 使用该命令对文件进行压缩,都会对源文件造成影响(删除),除非使用 -c 参数配合重定向可以保留外