linux常用命令(3)压缩命令

归档与压缩的区别

归档(Archiving)

  • 将多个文件/目录合并为单个文件
  • 不减少文件大小,只改变组织形式
  • 方便文件传输和管理
  • 示例:.tar文件

压缩(Compression)

  • 通过算法减少文件体积
  • 节省存储空间和传输带宽
  • 需要解压才能使用
  • 示例:.gz.bz2.xz.zip

常见压缩算法比较

算法 工具 扩展名 压缩率 速度 内存占用 适用场景
gzip gzip .gz 中等 日常文件压缩
bzip2 bzip2 .bz2 中等 中等 高压缩率需求
xz xz .xz 最高 大文件/长期存储
zip zip .zip 中等 中等 跨平台传输

1.tar 文件打包/解压

tar 本身是 打包工具 (将多个文件 / 目录合并为一个 .tar 归档文件),不直接压缩。但它可以结合 gzipbzip2xz 等压缩算法,实现 "打包 + 压缩" 一体操作,生成 .tar.gz.tar.bz2 等常见压缩包。

基本语法:tar [选项] [归档文件名] [要打包/解压的文件/目录]

核心选项(必记)

选项 含义 常用组合
-c 创建 新的归档文件(打包) -v-f 结合(-cvf
-x 提取 归档文件中的内容(解压) -v-f 结合(-xvf
-v 显示 打包 / 解压的详细过程(verbose,可选,方便查看进度) 几乎所有场景都可用
-f 指定 归档文件的名称(必须放在选项的最后,紧跟文件名) -f archive.tar.gz
-z 结合 gzip 算法压缩 / 解压(生成 .tar.gz.tgz -czvf(打包压缩)、-xzvf(解压)
-j 结合 bzip2 算法压缩 / 解压(生成 .tar.bz2 -cjvf-xjvf
-J 结合 xz 算法压缩 / 解压(生成 .tar.xz,压缩率更高,速度较慢) -cJvf-xJvf
-C 解压到 指定目录 (需在 -x 模式下使用) tar -xvf archive.tar -C /tmp/
-t 查看 归档文件中的内容(不解压) tar -tvf archive.tar
--exclude 打包时 排除 指定文件 / 目录 tar -czvf backup.tar.gz --exclude=tmp/ ./data/

常用场景示例

  1. 打包(仅合并文件,不压缩)

docs/ 目录和 file.txt 打包为 archive.tar

bash 复制代码
tar -cvf archive.tar docs/ file.txt  # -c(创建) -v(显示) -f(指定文件)
  1. 打包 + 压缩(最常用)

(1)gzip 压缩(.tar.gz/.tgz,兼容性最好)

bash 复制代码
tar -czvf backup.tar.gz data/ 	# 打包并压缩 data/ 为 backup.tar.gz
tar -xzvf backup.tar.gz  		# 解压 backup.tar.gz 到当前目录
tar -xzvf backup.tar.gz -C /opt/# 解压到指定目录 /opt/

(2)bzip2 压缩(.tar.bz2,压缩率略高于 gzip)

bash 复制代码
tar -cjvf logs.tar.bz2 /var/log/  # 打包压缩日志目录
tar -xjvf logs.tar.bz2            # 解压

(3)xz 压缩(.tar.xz,压缩率最高,适合大文件)

bash 复制代码
tar -cJvf video.tar.xz movie.mp4  # 压缩大视频文件
tar -xJvf video.tar.xz            # 解压
  1. 查看压缩包内容(不解压)
bash 复制代码
tar -tvf backup.tar.gz  # 查看 .tar.gz 中的文件列表
  1. 排除不需要的文件打包
bash 复制代码
tar -czvf project.tar.gz --exclude=project/temp/ --exclude=project/*.log project/
#打包project/目录,但排除project/temp/和project/*.log

2.zip :文件压缩(跨平台兼容)

zip压缩工具 (同时支持打包 + 压缩),生成的 .zip 文件可在 Windows、macOS 等系统直接解压,兼容性极强。但压缩率通常低于 tar.gztar.xz

基本语法:zip [选项] [压缩文件名.zip] [要压缩的文件/目录]

核心选项

选项 含义
-r 递归 压缩目录(必须加,否则只压缩目录本身,不包含内容)
-q 安静模式(不显示压缩过程)
-m 压缩后 删除原文件(move,慎用)
-u 向已有的 zip 压缩包中 添加新文件
-d 从已有的 zip 压缩包中 删除文件
-9 最高压缩级别(默认是 -6,级别越高,压缩率越高,速度越慢)

常用场景示例

  1. 压缩文件 / 目录
bash 复制代码
zip file.zip file.txt  			# 压缩单个文件 file.txt 为 file.zip
zip -r docs.zip docs/  			# 递归压缩 docs/ 目录为 docs.zip(必须加 -r)
zip -r9q photos.zip photos/		# 最高级别压缩 photos/ 目录,安静模式
  1. 向已有压缩包添加文件
bash 复制代码
zip -u docs.zip new_file.txt	#向docs.zip中添加 new_file.txt
  1. 从压缩包删除文件
bash 复制代码
zip -d docs.zip old_file.txt	#从 `docs.zip` 中删除 `old_file.txt`:
  1. 压缩并删除原文件
bash 复制代码
zip -rm temp.zip temp/ 	 #压缩 temp/ 后删除原目录(慎用!)

3.uzip : 解压 .zip 文件

unzipzip 的配套工具,专门用于解压 .zip 压缩包。

基本语法: unzip [选项] [压缩文件名.zip]

核心选项

选项 含义
-d 解压到 指定目录(目录不存在会自动创建)
-l 查看 压缩包中的文件列表(不解压)
-q 安静模式(不显示解压过程)
-o 覆盖已有文件(无需确认)
-n 不覆盖已有文件(遇到重复文件跳过)

常用场景示例

  1. 解压到当前目录
bash 复制代码
unzip docs.zip  # 解压 docs.zip 到当前目录,会提示覆盖确认
  1. 解压到指定目录
bash 复制代码
unzip photos.zip -d /home/user/pics/	#解压photos.zip到 /home/user/pics/
  1. 查看压缩包内容(不解压)
bash 复制代码
unzip -l docs.zip
  1. 强制覆盖解压(无需确认)
bash 复制代码
unzip -o docs.zip  # 覆盖当前目录中同名文件,不提示

补充极简记忆点

  1. tar 看后缀选参数:gz 加 - z、bz2 加 - j、xz 加 - J;
  2. 压目录 zip 必加 -r,否则只压空文件夹;
  3. 跨平台传文件优先 .zip,Linux 内部备份优先 .tar.gz

4.gzip + gunzip :单文件极简压缩 / 解压

gzip 单独压缩 / 解压(仅压缩单个文件,不打包)

核心功能:仅对单个文件 进行压缩 / 解压,不能打包目录 ,压缩后删除原文件 。格式:.gz

若要压缩多个文件,通常会先使用 tar 打包为 .tar 再用 gzip 压缩为 .tar.gz.tgz 格式,如 tar -cvzf archive.tar.gz directory/

常用选项

  • -d:解压(等同于 gunzip
  • -v:显示详细过程
  • -#:压缩级别(1-9,默认 6;9 压缩率最高,速度最慢)
  • -k:保留原始文件,不删除。
  • -r:递归压缩目录下的所有文件。
  • -v:显示详细的压缩或解压缩过程。
  • -l:显示压缩文件的详细信息,如压缩率、原始大小等。

常用示例

plain 复制代码
gzip file.txt        # 压缩为 file.txt.gz(原文件消失,默认删除原文件)
gzip -k file.txt		 # 保留原始文件压缩
gzip -9 file.txt     # 最高压缩率压缩

gzip -d file.txt.gz  # 解压(等同于 gunzip file.txt.gz)
gunzip file.txt.gz   # 解压
gzip -v *.log        # 批量压缩所有 .log 文件
gzip -r directory/   #递归压缩整个directory目录

gzip -l example.txt.gz # 显示压缩文件信息
gzip -t example.txt.gz #测试压缩文件的完整性,如果文件完整且无损坏,该命令将不会有输出;否则会提示错误。

gunzip(专属解压.gz,gzip -d 等效)

核心功能:gunzip 是 gzip 官方配套解压命令,专门解压 .gz 格式,语法简单直观。

语法:gunzip [选项] 压缩包名.gz常用选项:

  • -v:显示解压详情
  • -k:解压后保留压缩包

示例:

plain 复制代码
gunzip file.txt.gz     # 解压.gz文件,删除压缩包
gunzip -k file.txt.gz  # 解压后保留原.gz压缩包
gzip -d file.txt.gz    # 等效gunzip,解压.gz

5.bzip2 + bunzip2 :高压缩率单文件压缩 / 解压

bzip2(压缩)

压缩率高于 gzip,仅单文件压缩,生成 .bz2 格式;适合文本、日志类文件。语法:bzip2 [选项] 文件名常用选项:

  • -v:显示详情
  • -k:保留原文件
  • -d:解压缩一个 .bz2 文件。相当于使用 bunzip2 命令。
  • -z:强制压缩,即使文件已经被压缩。
  • -t:测试压缩文件的完整性。
  • -1-9:指定压缩比。-1 是最快的压缩,压缩率最低;-9 是最慢的压缩,压缩率最高。默认是 -9

示例:

plain 复制代码
bzip2 data.txt         # 此命令会将data.txt文件压缩为data.txt.bz2
bzip2 -k data.txt      # 压缩并保留原文件
bzip2 -d example.txt.bz2 # 解压缩文件,等于bunzip2 example.txt.bz2
bzip2 -t example.txt.bz2 # 测试压缩文件,使用 -t 选项来测试压缩文件的完整性

bunzip2(专属解压.bz2)

bunzip2 专门解压 .bz2 压缩包,替代 bzip2 -d,可读性更强。语法:bunzip2 [选项] 压缩包名.bz2常用选项:

  • -k:解压后保留 .bz2 压缩包
  • -v:可视化解压过程

示例:

plain 复制代码
bunzip2 data.txt.bz2       # 解压.bz2文件
bunzip2 -k data.txt.bz2    # 解压+保留压缩包
bzip2 -d data.txt.bz2      # 等效bunzip2

6.xz + unxz :顶级压缩率大文件专用

xz(压缩)

Linux 最高压缩率单文件工具,生成 .xz 格式;压缩慢、解压快,适合镜像、超大安装包。语法:xz [选项] 文件名常用选项:

  • -k:保留原大文件
  • -9:极致压缩
  • -v:显示进度

示例:

plain 复制代码
xz system.img          # 压缩为system.img.xz
xz -k system.img       # 压缩超大文件,保留原文件

unxz(专属解压.xz)

unxz 是 xz 专用解压命令,极简高效,替代 xz -d。语法:unxz [选项] 压缩包名.xz常用选项:

  • -k:解压后保留 .xz 压缩包
  • -v:查看解压日志

示例:

plain 复制代码
unxz system.img.xz       # 快速解压.xz大文件
unxz -k system.img.xz    # 解压后保留压缩包备份
xz -d system.img.xz      # 等效unxz

补充:不解压直接查看压缩文本

plain 复制代码
zcat file.txt.gz     # 查看gz文件内容
bzcat file.txt.bz2   # 查看bz2文件内容
xzcat file.txt.xz    # 查看xz文件内容

完整压缩格式对比总表

格式 核心工具 压缩率 速度 跨平台 适用场景
.tar tar 极快 一般 纯打包备份,不压缩
.tar.gz tar+gzip 中等 超快 极高 日常办公、服务器通用(首选)
.tar.bz2 tar+bzip2 偏高 中等 中等 日志、文本高压缩存储
.tar.xz tar+xz 最高 偏慢 中等 系统镜像、超大文件归档
.zip zip/unzip 中等 中等 顶级 Windows/Mac/Linux 跨平台传文件
.gz gzip/gunzip 中等 超快 极高 单日志、单配置文件快速压缩
.bz2 bzip2/bunzip2 偏高 中等 中等 单文本文件精细化压缩
.xz xz/unxz 最高 中等 单超大文件长期存储
相关推荐
L_09072 小时前
【Linux】实现简易 shell 程序
linux·bash
爱学习的程序媛2 小时前
WSL2:Windows上运行Linux的完整指南
linux·运维·windows·ubuntu·wsl2
Yupureki2 小时前
《Linux系统编程》20.常见程序设计模式
linux·服务器·c语言·c++·单例模式·建造者模式·责任链模式
M1nat0_2 小时前
Linux基础 Ext 文件系统:从磁盘硬件到目录路径的全链路解析
linux·服务器·网络·数据库
moical2 小时前
关于docker-compose启动elasticsearch:7.17.29报"permission denied": unknown错误解决
linux
s6516654962 小时前
编译linux内核
linux
济6172 小时前
ARM Linux 驱动开发篇:阻塞与非阻塞IO详解(含等待队列+poll机制)--- Ubuntu20.04
linux·嵌入式·嵌入式linux驱动开发
kyle~3 小时前
Linux---nmcli (NetworkManager服务的核心命令行工具)
linux·运维·php
不愿透露姓名的大鹏3 小时前
VMware vcenter报错no healthy upstream
linux·运维·服务器·vmware