AIGC标识 麒麟系统终端gzip与tar命令使用教程




麒麟系统终端
gzip 与 tar 命令使用教程


文件压缩与打包完全指南

目录

一、文件压缩打包基础概念

二、gzip 命令详解

2.1 基本语法与常用选项

2.2 压缩文件操作

2.3 解压文件操作

2.4 查看压缩文件内容

2.5 gzip 压缩级别说明

三、tar 命令详解

3.1 基本语法与常用选项

3.2 打包与解包操作

3.3 tar 配合 gzip 压缩(.tar.gz)

3.4 查看打包文件内容

3.5 追加文件与更新文件

四、gzip 与 tar 组合使用实战

五、常见场景实战案例

六、常见问题与排错

七、命令速查表

一、文件压缩打包基础概念

在 Linux(包括银河麒麟操作系统)终端中,文件的压缩和打包是两个不同的概念,新手很容易混淆:

1. 打包(Archive)

将多个文件或目录合并成一个单独的文件,文件总大小基本不变。最常用的打包工具是 tar(Tape Archive),生成的文件后缀通常为 .tar。

2. 压缩(Compression)

通过压缩算法将大文件变小,减少磁盘占用。gzip 是最常用的 Linux 压缩工具,压缩后的文件后缀通常为 .gz。

💡 提示:在实际使用中,我们通常先用 tar 将多个文件打包成一个 .tar 文件,再用 gzip 压缩成 .tar.gz(也简写为 .tgz)文件,这就是 Linux 下最常见的"压缩包"格式。

二、gzip 命令详解

gzip 是 GNU 组织开发的压缩程序,采用 DEFLATE 算法,压缩速度快,压缩率适中,是 Linux 系统默认的压缩工具之一。gzip 只能压缩单个文件,不能直接压缩目录(需要先用 tar 打包)。

2.1 基本语法与常用选项

基本语法:

gzip [选项] 文件名

选项

功能说明

-c

将压缩/解压结果输出到标准输出,不修改原文件

-d

解压模式,相当于 gunzip 命令

-f

强制压缩/解压,即使目标文件已存在也覆盖

-k

保留原始文件,不删除源文件(默认 gzip 压缩后会删除原文件)

-l

列出压缩文件的详细信息(压缩率、原大小、压缩后大小)

-r

递归处理,将指定目录下的所有文件分别压缩

-v

显示压缩/解压过程的详细信息

-1~-9

压缩级别,1最快压缩率最低,9最慢压缩率最高,默认为6

⚠️ 注意:默认情况下,gzip 压缩文件后会删除原始文件!如果需要保留原文件,请使用 -k 选项。

2.2 压缩文件操作

(1)基本压缩(压缩后删除原文件)

kylin@kylin:~$ gzip test.txt
# 压缩后生成 test.txt.gz,原文件 test.txt 被删除

(2)压缩时保留原文件

kylin@kylin:~$ gzip -k test.txt
# 生成 test.txt.gz,同时保留原文件 test.txt

(3)显示压缩过程

kylin@kylin:~$ gzip -v test.txt
test.txt: 60.5% -- replaced with test.txt.gz
# 显示文件名、压缩率、结果文件名

(4)递归压缩目录下所有文件

kylin@kylin:~$ gzip -r documents/
# 将 documents 目录下的所有 .txt、.log 等文件分别压缩成 .gz,不会打包成一个文件

💡 记忆技巧:gzip 默认"压完删源",-k 代表 keep(保留),-v 代表 verbose(详细输出)。

2.3 解压文件操作

gzip 解压有三种等价写法,效果完全相同:

方法一:使用 gzip -d 解压

kylin@kylin:~$ gzip -d test.txt.gz
# 解压后生成 test.txt,原 .gz 文件被删除

方法二:使用 gunzip 命令解压

kylin@kylin:~$ gunzip test.txt.gz
# 效果和 gzip -d 完全一样

方法三:使用 zcat 查看并解压到标准输出

kylin@kylin:~$ zcat test.txt.gz > test.txt
# 将压缩内容输出重定向到文件,不删除原 .gz 文件

⚠️ 注意:如果目标文件已经存在,gzip 会询问是否覆盖。使用 -f 选项可以强制覆盖不提示:gzip -df test.txt.gz

2.4 查看压缩文件内容

不需要解压,直接查看 gz 压缩包内的文件内容:

(1)查看压缩包信息

kylin@kylin:~$ gzip -l test.txt.gz
compressed uncompressed ratio uncompressed_name
56 117 60.7% test.txt
# 显示压缩后大小、原大小、压缩率、原文件名

(2)不解压直接查看文本内容

kylin@kylin:~$ zcat test.txt.gz
# 或者使用
kylin@kylin:~$ gzip -c -d test.txt.gz
# 直接在终端输出文件内容,不会生成解压后的文件

2.5 gzip 压缩级别说明

gzip 提供 1-9 共 9 个压缩级别:

级别

特点

适用场景

-1

最快速度,压缩率最低

大文件临时压缩,追求速度

-6

默认级别,平衡速度与压缩率

大多数日常场景

-9

最慢速度,最高压缩率

文件长期归档,备份存储

示例:使用最高压缩率压缩

kylin@kylin:~$ gzip -9 -k largefile.log
# 以最高压缩率压缩,保留原文件

三、tar 命令详解

tar(Tape Archive,磁带归档)最初用于将数据备份到磁带上,现在是 Linux 下最常用的打包工具,可以将多个文件、目录打包成一个 .tar 文件,并且可以配合 gzip、bzip2、xz 等压缩工具直接生成压缩包。

3.1 基本语法与常用选项

基本语法:

tar [主选项+辅助选项] 目标文件 源文件/目录

主选项(五选一,必须有一个):

主选项

功能

-c

create 创建新的打包文件(打包用)

-x

extract 解包/提取文件(解包用)

-t

list 列出打包文件中的内容列表

-r

append 向已有的 tar 包末尾追加文件

-u

update 更新包中已存在的文件(仅更新比包内新的版本)

常用辅助选项:

辅助选项

功能

-z

通过 gzip 过滤,即调用 gzip 压缩/解压(处理 .tar.gz / .tgz)

-j

通过 bzip2 过滤,即调用 bzip2 压缩/解压(处理 .tar.bz2)

-J

通过 xz 过滤,即调用 xz 压缩/解压(处理 .tar.xz,压缩率最高)

-v

verbose 显示详细过程,列出正在处理的文件名

-f

file 指定打包/解包的文件名,该选项必须放在最后,后面紧跟文件名

-p

保留文件原有权限和属性(备份时推荐使用)

-P

使用绝对路径打包,保留路径开头的 /

-C

指定解包到哪个目录(Change directory)

--exclude=PATTERN

打包时排除匹配 PATTERN 的文件

⚠️ 重要提醒:-f 选项必须紧跟文件名,必须放在所有选项的最后面!例如:tar -zcvf 是正确的,tar -zfcv 是错误的。

💡 记忆口诀:打包是 -czvf(创建、gzip、详细、文件),解包是 -xzvf(提取、gzip、详细、文件),记这两个组合足够应对90%场景。

3.2 打包与解包操作

(1)仅打包不压缩(生成 .tar 文件)

# 将 docs 目录打包成 docs.tar
kylin@kylin:~$ tar -cvf docs.tar docs/
docs/
docs/readme.txt
docs/notes.md
# -c 创建,-v 显示过程,-f 指定文件名

(2)解包 .tar 文件

# 将 docs.tar 解包到当前目录
kylin@kylin:~$ tar -xvf docs.tar
# -x 提取,解包所有文件

# 解包到指定目录 /tmp
kylin@kylin:~$ tar -xvf docs.tar -C /tmp/

3.3 tar 配合 gzip 压缩(.tar.gz)

这是 Linux 下最常用的压缩打包方式,使用 -z 选项直接调用 gzip 压缩:

(1)打包并 gzip 压缩(生成 .tar.gz / .tgz)

# 打包并压缩 project 目录,最常用的命令
kylin@kylin:~$ tar -zcvf project.tar.gz project/
# 可以简写为 .tgz 后缀:
kylin@kylin:~$ tar -zcvf project.tgz project/

(2)解压 .tar.gz 文件

# 解压 .tar.gz 到当前目录
kylin@kylin:~$ tar -zxvf project.tar.gz

# 解压到指定目录 /opt
kylin@kylin:~$ tar -zxvf project.tar.gz -C /opt/
# 注意:目标目录必须已经存在,否则会报错

(3)压缩时排除特定文件

# 打包项目目录,但排除 .git 目录和所有 .log 文件
kylin@kylin:~$ tar -zcvf project.tar.gz project/ \
--exclude=project/.git \
--exclude="*.log" \
--exclude="node_modules"

3.4 查看打包文件内容

不解包,直接查看 tar 包内的文件列表:

# 查看 tar 包内容列表
kylin@kylin:~$ tar -tvf docs.tar

# 查看 tar.gz 压缩包内容列表
kylin@kylin:~$ tar -ztvf project.tar.gz
# 输出格式和 ls -l 类似:权限、所有者、大小、日期、文件名

# 只提取包内的单个文件,不需要全部解压
kylin@kylin:~$ tar -zxvf project.tar.gz project/readme.txt
# 只解压出 readme.txt 文件,其他文件不提取

3.5 追加文件与更新文件

(1)向已有的 tar 包追加文件(仅支持未压缩的 .tar)

# 向 docs.tar 中追加 newfile.txt
kylin@kylin:~$ tar -rvf docs.tar newfile.txt
# 注意:-r 不能用于 .tar.gz 压缩包,必须先解压再重新压缩

(2)更新包中文件

# 只更新包中比源文件旧的文件
kylin@kylin:~$ tar -uvf docs.tar docs/readme.txt
# 如果 readme.txt 比包内的版本新,就替换;否则不操作

⚠️ 注意:压缩后的 .tar.gz 文件不能直接追加或更新文件。如果需要修改,必须先解压,修改后重新压缩,或者直接重新打包覆盖原文件。

四、gzip 与 tar 组合使用实战

虽然新版 tar 已经内置了 -z 选项可以直接调用 gzip,但在某些场景下,我们仍需要手动组合使用两个命令,比如通过管道处理流数据:

方法一:tar + gzip 分步操作(不推荐,仅作理解)

# 第一步:先用 tar 打包
kylin@kylin:~$ tar -cvf project.tar project/

# 第二步:再用 gzip 压缩
kylin@kylin:~$ gzip project.tar
# 生成 project.tar.gz,原 project.tar 被删除

# 等价于 tar -zcvf project.tar.gz project/

方法二:通过管道组合(高级用法)

# 打包后通过管道直接传给 gzip 压缩,不生成中间 .tar 文件
kylin@kylin:~$ tar -cvf - project/ | gzip -k > project.tar.gz

# 查看压缩包内容,通过管道传给 less 分页
kylin@kylin:~$ tar -ztvf project.tar.gz | less

# 解压并通过管道直接 grep 查找内容,不需要落盘
kylin@kylin:~$ tar -zxf project.tar.gz -O | grep "关键词"

💡 提示:tar 选项中的 - 代表标准输出/标准输入,配合管道 | 可以实现非常灵活的数据流处理,在备份、脚本自动化中非常有用。

不同压缩算法对比:

压缩方式

选项

后缀名

特点

gzip

-z

.tar.gz / .tgz

速度快,兼容性最好,最常用

bzip2

-j

.tar.bz2

压缩率比gzip高,速度稍慢

xz

-J

.tar.xz

压缩率最高,速度最慢,适合大文件归档

五、常见场景实战案例

案例1:备份用户主目录

# 备份 /home/kylin 目录,保留权限,显示进度,排除缓存
kylin@kylin:~$ tar -zcvpf /backup/kylin_backup_$(date +%Y%m%d).tar.gz \
/home/kylin \
--exclude="/home/kylin/.cache" \
--exclude="/home/kylin/Downloads"

# -p 保留原有权限,$(date +%Y%m%d) 自动生成带日期的文件名,如 kylin_backup_20250615.tar.gz

案例2:解压系统源码包并编译安装

# 以安装 nginx 为例(需要 root 权限)
kylin@kylin:~$ cd /usr/local/src
kylin@kylin:/usr/local/src$ sudo wget https://nginx.org/download/nginx-1.26.1.tar.gz
kylin@kylin:/usr/local/src$ sudo tar -zxvf nginx-1.26.1.tar.gz
kylin@kylin:/usr/local/src$ cd nginx-1.26.1/
# 之后执行 ./configure && make && make install

案例3:批量压缩日志文件

# 将 /var/log 目录下所有 .log 文件压缩,保留原文件,最高压缩率
kylin@kylin:~$ cd /var/log
kylin@kylin:/var/log$ sudo gzip -k -9 -r *.log

# 查看所有压缩日志的大小
kylin@kylin:/var/log$ sudo gzip -l *.gz

案例4:将文件压缩后通过网络传输到另一台机器

# 打包压缩后直接通过 ssh 传输到远程服务器,不需要在本地生成文件
kylin@kylin:~$ tar -zcvf - project/ | ssh user@192.168.1.100 "cat > /tmp/project.tar.gz"

# 在远程机器上可以直接解包
kylin@kylin:~$ tar -zcvf - project/ | ssh user@192.168.1.100 "tar -zxvf - -C /opt/"

案例5:测试压缩包是否损坏

# 验证 tar.gz 文件是否完整无损
kylin@kylin:~$ tar -ztvf project.tar.gz > /dev/null
# 如果没有输出任何错误信息,说明压缩包完好;如果有错误会提示 "Unexpected EOF" 等信息

六、常见问题与排错

1. 报错 "tar: Error is not recoverable: exiting now"

原因:压缩包损坏、下载不完整,或者选项用错(比如 .tar.gz 解压时没加 -z 选项)。
解决方法:重新下载/复制压缩包;检查文件后缀,对应使用正确的解压选项(-z/j/J)。

2. 报错 "gzip: stdin: not in gzip format"

原因:文件不是 gzip 格式,或者后缀名写错了(比如实际是 .tar 文件却用了 tar -zxvf)。
解决方法:使用 file 命令查看文件真实类型:file project.tar.gz,再选择正确的解压方式。

kylin@kylin:~$ file project.tar.gz
project.tar.gz: gzip compressed data, ...
# 如果显示 "POSIX tar archive" 说明是未压缩的 tar 文件,直接 tar -xvf 即可

3. 解压后文件权限不对

原因:解包时没有保留原权限,或者使用普通用户解压root创建的文件。
解决方法:备份时加 -p 选项保留权限;需要root权限的文件使用 sudo 解压。

4. 解压时提示 "Cannot open: No such file or directory"

原因:文件名写错了,或者 -C 指定的目标目录不存在。
解决方法:检查文件名拼写;先 mkdir 创建目标目录再解包。

5. 压缩后原文件没了

原因:gzip 默认会删除原文件,这是新手最容易踩的坑。
解决方法:压缩时加 -k 选项保留原文件。

七、命令速查表

gzip 常用命令速查:

操作

命令

压缩文件(删除原文件)

gzip filename

压缩文件(保留原文件)

gzip -k filename

压缩文件并显示进度

gzip -kv filename

最高压缩率压缩

gzip -k9 filename

解压文件

gzip -d filename.gz 或 gunzip filename.gz

查看压缩包信息

gzip -l filename.gz

不解压查看内容

zcat filename.gz

递归压缩目录下所有文件

gzip -r directory/

tar 常用命令速查:

操作

命令

打包不压缩

tar -cvf archive.tar file1 dir1/

打包并gzip压缩(最常用)

tar -zcvf archive.tar.gz dir1/

打包并bzip2压缩

tar -jcvf archive.tar.bz2 dir1/

打包并xz高压缩率

tar -Jcvf archive.tar.xz dir1/

解包 tar 文件

tar -xvf archive.tar

解压 tar.gz 文件

tar -zxvf archive.tar.gz

解压到指定目录

tar -zxvf archive.tar.gz -C /target/dir/

查看压缩包内容

tar -ztvf archive.tar.gz

只解压单个文件

tar -zxvf archive.tar.gz path/to/file

打包排除特定文件

tar -zcvf backup.tar.gz dir/ --exclude="*.log"

追加文件到tar包

tar -rvf archive.tar newfile.txt

验证压缩包完整性

tar -ztvf archive.tar.gz > /dev/null


💡 最后总结:日常使用只需要记住两个万能命令即可:

压缩打包:tar -zcvf 压缩包名.tar.gz 要压缩的文件/目录
解压提取:tar -zxvf 压缩包名.tar.gz [-C 目标目录]

内容由 AI 生成

posted @ 2026-10-22 11:49  lvxuel  阅读(17)  评论(0)    收藏  举报