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/9/21 23:20:45 阅读更多 →
微穿孔板吸声体原理与工程优化指南

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

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

2026/9/26 4:15:04 阅读更多 →
LENA-R8与PIC18F4680在物联网定位系统中的设计与实现

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

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

2026/9/23 3:18:11 阅读更多 →

最新新闻

基于sklearn的中文文本挖掘完整流程与避坑指南

基于sklearn的中文文本挖掘完整流程与避坑指南

简介:一套围绕Python与sklearn库展开的文本挖掘实践资源,特别适合需要系统学习文本预处理、特征工程与建模流程的数据分析初学者和相关专业开发者。资源以一百份文本文件为对象,完整演示了分词处理、去除停用词、词干提取、词形还原等步骤&am…

2026/9/26 15:56:24 阅读更多 →
Tekton Pipelines v1alpha1 迁移至 v1beta1 完全指南:字段变更、参数迁移与 PipelineResources 替代方案

Tekton Pipelines v1alpha1 迁移至 v1beta1 完全指南:字段变更、参数迁移与 PipelineResources 替代方案

云原生CI/CDDevOps后端 【免费下载链接】pipeline A cloud-native Pipeline resource. 项目地址: https://gitcode.com/gh_mirrors/pipelin/pipeline 点击查看 免费下载 本文是一份面向 Tekton Pipelines 使用者的实战迁移指南,系统梳理从 tekton.dev/v…

2026/9/26 15:56:24 阅读更多 →
Ajenti 插件开发指南:通过 HttpPlugin 与 @endpoint 构建 HTTP 处理接口

Ajenti 插件开发指南:通过 HttpPlugin 与 @endpoint 构建 HTTP 处理接口

后端运维 【免费下载链接】ajenti Ajenti Core and stock plugins 项目地址: https://gitcode.com/gh_mirrors/aj/ajenti 点击查看 免费下载 导读 本文围绕 docs/source/dev/http.rst 的开发者文档展开,系统讲解 Ajenti 插件如何注册并处理 HTTP 请求&…

2026/9/26 15:56:24 阅读更多 →
dsh-plugin 生态盘点:开源 4 天破千插件,「Agent 时代的应用商店」萌芽了?-CSDN博客

dsh-plugin 生态盘点:开源 4 天破千插件,「Agent 时代的应用商店」萌芽了?-CSDN博客

首屏导读 本教程配套付费专栏: 大模型工程师修炼手记 19.9 元(AI 编程 / Agent 实战 | 本文同主题系统课程) AI时代程序员的自我提升 49.9 元(AI 时代成长方法论)。 单篇不过瘾?订阅解锁全量源…

2026/9/26 15:56:24 阅读更多 →
Harness 沙箱与安全专题:让 Agent 能干活但不闯祸-CSDN博客

Harness 沙箱与安全专题:让 Agent 能干活但不闯祸-CSDN博客

首屏导读 本教程配套付费专栏: 大模型工程师修炼手记 19.9 元(AI 编程 / Agent 实战 | 本文同主题系统课程) AI时代程序员的自我提升 49.9 元(AI 时代成长方法论)。 单篇不过瘾?订阅解锁全量源…

2026/9/26 15:56:24 阅读更多 →
Agent容器冷启动优化:快照恢复如何打破容器越大启动越慢的困局

Agent容器冷启动优化:快照恢复如何打破容器越大启动越慢的困局

1. 从"容器越大启动越慢"这个直觉说起做过 Agent 部署的人大概都有过这种体验:本地跑得好好的一个智能体服务,镜像打出来两个多 G,推到线上之后第一次请求要等十几秒甚至更久,用户那边转圈转到怀疑人生。你去看监控&…

2026/9/26 15:55:24 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →