15、Linux 打包压缩命令
打包(将多个文件/目录合并为一个文件)和压缩(减小文件体积)是日常管理文件的常用操作。常用工具包括 tar(主要用于打包,可结合压缩算法)、gzip、bzip2(单独压缩工具)以及跨平台的 zip 等
1. 核心概念:打包 vs 压缩
- 打包:将多个文件或目录合并成一个“包文件”(如
archive.tar),不改变文件大小,仅方便管理 - 压缩:通过算法减小文件体积(如
file.txt→file.txt.gz),通常针对单个文件;若要压缩多个文件/目录,需先打包再压缩
2. zip 与 unzip(跨平台压缩,Windows/Linux 通用)
zip 格式支持打包+压缩,且跨平台兼容性好(Windows 也可直接解压),适合需要与其他系统交换文件的场景
a. 安装(部分系统默认不安装)
# Debian/Ubuntu
sudo apt install zip unzip# RedHat/CentOS
sudo yum install zip unzip
b. 常用命令
-
创建 zip 压缩包:
# 压缩单个文件 zip file.zip file.txt# 递归压缩目录(-r 选项) zip -r dir.zip dir1/ # 压缩 dir1 目录及所有子文件# 压缩时显示过程(-v)并设置压缩级别(-1 最快,-9 最优,默认 -6) zip -r -9 -v archive.zip dir1/ file1.txt -
解压 zip 压缩包:
# 解压到当前目录 unzip archive.zip# 解压到指定目录(-d 选项) unzip archive.zip -d /tmp# 只解压 .png 的文件到当前目录 unzip png.zip "*.png"# 只解压出压缩包中的某个文件 unzip png.zip png/szj.jpg# 查看压缩包内容(不解压) unzip -l archive.zip -
解压时排除指定文件:
unzip archive.zip -x "*.log" # 解压时排除所有 .log 文件
3. 单独压缩工具(仅压缩单个文件)
gzip、bzip2 是独立的压缩工具,只能压缩单个文件(无法直接压缩目录),通常与 tar 配合使用。若单独使用,会替换原文件(生成压缩文件,删除原文件)
a. gzip(速度快,压缩率中等)
- 压缩文件:
gzip 文件名(生成.gz压缩文件,删除原文件) - 解压文件:
gunzip 压缩文件名.gz或gzip -d 压缩文件名.gz - 示例:
gzip file.txt # 压缩为 file.txt.gz,原 file.txt 被删除 gzip -c file.txt > file.txt.gz # 压缩 -c 会变成二进制,然后通过 > 写入 file.txt.gz,原 file.txt 不被删除gunzip file.txt.gz # 解压为 file.txt,原 .gz 文件被删除
b. bzip2(压缩率高于 gzip,速度稍慢)
- 压缩文件:
bzip2 文件名(生成.bz2压缩文件) - 解压文件:
bunzip2 压缩文件名.bz2或bzip2 -d 压缩文件名.bz2 - 示例:
bzip2 data.csv # 压缩为 data.csv.bz2 bunzip2 data.csv.bz2 # 解压为 data.csv
4. tar 命令:打包+压缩(最常用)
tar(tape archive)是 Linux 中最核心的打包工具,本身仅负责打包,但可通过选项调用 gzip、bzip2、xz 等压缩算法,实现“打包+压缩”一步完成。
a. 基本语法
# 创建压缩包(打包+压缩)
tar [选项] 压缩包名称.tar.xxx 源文件/目录 # 解压压缩包
tar [选项] 压缩包名称.tar.xxx [-C 目标目录] # -C 可选,指定解压到的目录(默认当前目录)
b. 常用选项
| 选项组合 | 压缩算法 | 压缩包后缀 | 功能说明(创建/解压通用) |
|---|---|---|---|
-czvf/-xzvf | gzip | .tar.gz | -c 创建,-x 解压,-z 用 gzip 算法,-v 显示过程,-f 指定压缩包 |
-cjvf/-xjvf | bzip2 | .tar.bz2 | -j 用 bzip2 算法(压缩率比 gzip 高,速度稍慢) |
i. 示例:创建压缩包
# 1. 用 gzip 算法打包并压缩 dir1、file1.txt 为 archive.tar.gz
tar -czvf archive.tar.gz dir1/ file1.txt
# 输出:显示打包的文件列表(因 -v 选项)# 2. 用 bzip2 算法打包压缩 /home/user 目录(仅打包,不压缩子目录软链接)
tar -cjvf user.tar.bz2 /home/user
ii. 示例:解压压缩包
# 1. 解压 archive.tar.gz 到当前目录
tar -xzvf archive.tar.gz# 2. 解压 user.tar.bz2 到 /tmp 目录(-C 指定目标目录)
tar -xjvf user.tar.bz2 -C /tmp
iii. 其他实用操作
-
查看压缩包内容(不解压):
tar -tzf archive.tar.gz # 查看 tar.gz 包内文件 tar -tjf user.tar.bz2 # 查看 tar.bz2 包内文件 -
打包时排除指定文件/目录:
# 打包 dir1 时,排除 dir1/temp/ 和 *.swp 临时文件 tar -czvf archive.tar.gz dir1/ --exclude=dir1/temp/ --exclude=*.swp -
解压时指定解压文件:
# 解压 archive.tar.gz 时,指定只解压 file1.txt 出来 tar -xzvf archive.tar.gz ./file1.txt
5. 压缩格式对比与选择
| 格式 | 工具组合 | 压缩率 | 速度 | 跨平台性 | 适用场景 |
|---|---|---|---|---|---|
.tar.gz | tar + gzip | 中 | 快 | 一般 | 日常备份、快速压缩 |
.tar.bz2 | tar + bzip2 | 较高 | 中 | 一般 | 对压缩率有要求,可接受稍慢速度 |
.zip | zip/unzip | 中 | 中 | 极好 | 需与Windows交换文件 |
