Linux gzip 命令使用说明
Linux gzip 命令使用说明引言在 Linux 系统中文件压缩是一项非常常见的操作尤其是在磁盘空间有限或需要传输大量数据的场景下。gzip是 GNU 项目开发的一款压缩工具以其高效的压缩算法和广泛兼容性著称。与zip或rar不同gzip专门用于单个文件的压缩通常配合tar使用来打包和压缩目录。本文将深入剖析gzip的原理并提供可运行的代码示例帮助你全面掌握其用法。## gzip 压缩原理gzip基于 DEFLATE 压缩算法该算法结合了 LZ77 算法和 Huffman 编码。LZ77 通过查找重复的字符串并用指针替换来减少数据冗余而 Huffman 编码则根据字符出现频率分配可变长度编码进一步压缩数据。具体过程如下1.LZ77 阶段扫描输入数据维护一个滑动窗口。当发现重复的子串时用距离长度对替换。2.Huffman 阶段对 LZ77 输出的字面值和指针进行统计构建 Huffman 树生成最优编码表。3.输出将压缩后的数据和编码表打包成.gz格式文件。这种两阶段设计使得gzip在压缩比和速度之间取得了良好的平衡。相比bzip2或xzgzip速度更快但压缩比略低适用于日常文件压缩需求。## 基本用法gzip的基本语法如下bashgzip [选项] 文件名默认情况下gzip会压缩指定文件生成.gz后缀的文件并删除原文件。常用选项包括--d或--decompress解压缩。--k或--keep保留原文件。--v或--verbose显示压缩详情。--r或--recursive递归压缩目录中的文件。--1到-9指定压缩级别-1最快但压缩比最低-9最慢但压缩比最高默认-6。### 示例 1压缩单个文件创建一个测试文件然后使用gzip压缩bash# 创建测试文件echo Hello, Linux gzip! This is a demonstration of compression. test.txt# 压缩文件默认级别gzip test.txt# 查看结果ls -lh执行后test.txt被替换为test.txt.gz。使用-v选项可以查看压缩前后的文件大小bashgzip -v test.txt输出类似test.txt: 72.1% -- replaced with test.txt.gz### 示例 2解压缩文件解压缩test.txt.gz并保留原压缩文件bash# 解压缩保留原文件gzip -d -k test.txt.gz# 验证文件内容cat test.txt输出Hello, Linux gzip! This is a demonstration of compression.## 进阶用法### 结合 tar 打包目录由于gzip只能压缩单个文件处理目录时需要先使用tar打包再压缩。这通常通过-z选项一步完成bash# 创建测试目录和文件mkdir testdirecho File 1 testdir/file1.txtecho File 2 testdir/file2.txt# 打包并压缩tar -czf archive.tar.gz testdir/# 解压并解包tar -xzf archive.tar.gz-c 表示创建归档-z 表示通过 gzip 压缩-f 指定文件名。解压缩时-x 表示提取。### 压缩级别调优在不同场景下选择合适的压缩级别至关重要。以下是一个 Python 脚本用于测试不同级别的压缩效果python#!/usr/bin/env python3““测试 gzip 不同压缩级别对文件大小和速度的影响。””“import subprocessimport timedef test_gzip_level(file_path, level): “”“测试指定压缩级别”” # 复制文件以避免覆盖 src file_path dst f{file_path}.level{level} subprocess.run([“cp”, src, dst], checkTrue) # 压缩 start time.time() subprocess.run([“gzip”, f-{level}“, “-k”, dst], checkTrue) elapsed time.time() - start # 获取压缩后文件大小 compressed f”{dst}.gz result subprocess.run([“ls”, “-lh”, compressed], capture_outputTrue, textTrue) size result.stdout.split()[4] # 清理 subprocess.run([“rm”, dst, compressed], checkTrue) return size, elapsed# 创建测试文件约 10MB 随机数据test_file “test_data.binsubprocess.run([“dd”, “if/dev/urandom”, fof{test_file}”, “bs1M”, “count10”], checkTrue)print(“级别 | 压缩后大小 | 耗时(秒)”)print(“-----|------------|---------”)for level in range(1, 10): size, elapsed test_gzip_level(test_file, level) print(f {level} | {size:10} | {elapsed:.3f})# 清理测试文件subprocess.run([“rm”, test_file], checkTrue)运行该脚本需要 Python 3 和 dd 命令将输出类似级别 | 压缩后大小 | 耗时(秒)-----|------------|--------- 1 | 10M | 0.123 2 | 9.8M | 0.145 … 9 | 9.5M | 0.567从结果可以看出级别越高压缩比越高但耗时也越长。实际应用中-6默认通常提供了较好的平衡。## 高级技巧### 管道压缩gzip 支持从标准输入读取数据方便与其他命令配合bash# 压缩命令输出tar -cf - mydir/ | gzip -c backup.tar.gz# 解压缩并直接处理zcat backup.tar.gz | tar -xf --c选项将结果写入标准输出避免创建中间文件。### 查看压缩文件内容无需解压缩即可查看内容bash# 查看文本文件内容zcat file.txt.gz# 查看二进制文件内容十六进制zcat file.bin.gz | xxd | head### 多文件压缩与流处理虽然gzip不直接支持多文件但可以通过cat合并多个压缩流bash# 分别压缩多个文件gzip -c file1.txt file1.txt.gzgzip -c file2.txt file2.txt.gz# 合并压缩流不推荐因为无法单独解压cat file1.txt.gz file2.txt.gz combined.gz注意合并后的文件只能整体解压缩无法提取单个文件。## 性能考量与注意事项- **内存使用**gzip默认使用 32KB 窗口内存占用约 64KB适合嵌入式环境。- **兼容性**.gz格式广泛支持几乎所有操作系统都能处理。- **压缩比限制**对于已经压缩的文件如 JPEG、MP4gzip几乎无法进一步压缩甚至可能增大文件。- **错误处理**使用-t选项测试压缩文件完整性gzip -t file.gz。## 总结gzip是 Linux 生态中不可或缺的压缩工具其基于 DEFLATE 算法的设计兼顾了速度和压缩比。通过本文我们深入了解了其工作原理并学习了从基本压缩到高级管道操作的各种用法。关键要点包括- 默认压缩级别-6适合大多数场景。- 结合tar的-z选项可高效处理目录。- 使用-k保留原文件避免误删。- 对于已压缩数据考虑使用-1级别以节省时间。掌握gzip 不仅能提高日常工作效率还能在脚本和自动化任务中发挥重要作用。建议读者通过实际动手操作进一步巩固这些知识。

相关新闻

基于ESP32-CAM与HC-SR501的宠物感应拍照机DIY全攻略

基于ESP32-CAM与HC-SR501的宠物感应拍照机DIY全攻略

1. 从“铲屎官”的痛点到一个有趣的项目 养宠物的朋友,尤其是猫奴狗主们,大概都有过这样的经历:当你拿出手机,想记录下自家主子一个可爱、搞笑或者高冷的瞬间时,它要么立刻扭头走开,要么瞬间变成“表情包”…

2026/10/13 9:37:40 阅读更多 →
微穿孔板吸声体原理与工程优化指南

微穿孔板吸声体原理与工程优化指南

1. 微穿孔板吸声体概述 微穿孔板吸声体(Micro-perforated Panel Absorber,简称MPA)是一种基于亥姆霍兹共振原理的声学结构,由我国著名声学家马大猷院士于1975年首次提出。与传统多孔吸声材料相比,MPA具有清洁环保、耐久…

2026/10/11 12:57:27 阅读更多 →
LENA-R8与PIC18F4680在物联网定位系统中的设计与实现

LENA-R8与PIC18F4680在物联网定位系统中的设计与实现

1. 项目背景与硬件选型解析 在物联网和远程监控领域,全球连接和精确定位是两大核心需求。LENA-R8模块与PIC18F4680微控制器的组合,为解决这一需求提供了高性价比的解决方案。这套系统特别适合车队管理、资产追踪、野外监测等应用场景。 LENA-R8是一款多…

2026/10/7 23:19:06 阅读更多 →

最新新闻

2GHz示波器与OpenSSL 3.0:精密测量系统升级排查实战

2GHz示波器与OpenSSL 3.0:精密测量系统升级排查实战

最近圈里连着来了两条硬核消息:开源示波器项目把带宽推到了2GHz,亚微米级的运动平台方案也从实验室走向了量产。另一边,OpenSSL 3.0在加密算法上的态度越来越强硬,一批旧算法被默认挡在门外。这三件事如果单独看,分别属…

2026/10/14 7:25:38 阅读更多 →
词典数据结构化:从PDF到Excel与SQL的完整转换路径

词典数据结构化:从PDF到Excel与SQL的完整转换路径

简介:这份非 PDF 版的《牛津英语词典》以 Excel 和 SQL 两种格式打包,面向需要把词典数据融入学习或开发流程的人群,包括学生、教师、语言爱好者及软件开发者。Excel 表可直接打开,支持查找、编辑、排序与筛选,适合制作…

2026/10/14 7:25:38 阅读更多 →
从聊天到行动:OpenClaw如何让大模型真正动手干活

从聊天到行动:OpenClaw如何让大模型真正动手干活

前阵子和几个朋友聊起大模型,大家不约而同提到一个困惑:聊天机器人再能说,也变不出一个“做完事”的结果。你让AI写一封邮件,它能写得条理清晰,可你要是让它“把这封邮件发给客户并跟进回复”,它就只能摊手…

2026/10/14 7:25:38 阅读更多 →
基于多二阶广义积分器的电网谐波提取与复现方法

基于多二阶广义积分器的电网谐波提取与复现方法

做电能质量方向这些年,我几乎每隔一段时间就会遇到同一类需求:把电网里的某个谐波分量单独抽出来,然后要么在控制回路里把它补偿掉,要么把它还原成可用的测试波形。最近完成的这个“基于多二阶广义积分器的电网谐波提取与复现”项…

2026/10/14 7:25:38 阅读更多 →
工厂方法模式实战:重构Linux UDP聊天与翻译程序

工厂方法模式实战:重构Linux UDP聊天与翻译程序

把“工厂方法模式”和“Linux网络编程”放在同一个项目里,很多人第一反应是“为了用设计模式而用设计模式”。但你要是真写过UDP聊天程序,并且往里面加过翻译功能,就会理解为什么在这个场景里,工厂方法模式不是在炫技,…

2026/10/14 7:25:38 阅读更多 →
8款AI工具助力本科论文写作全流程

8款AI工具助力本科论文写作全流程

1. 项目概述作为一名经历过本科论文写作的过来人,我深知选题难、资料少、时间紧是困扰大多数学生的三大难题。去年帮导师做AI工具测评时,意外发现了一批对论文写作帮助极大的学术平台,经过半年实测,筛选出8个真正能提升效率的AI辅…

2026/10/14 7:24:38 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →