0

0

Linux文件压缩怎么用?_Linuxtar与gzip命令实例

看不見的法師

看不見的法師

发布时间:2025-07-14 14:24:03

|

811人浏览过

|

来源于php中文网

原创

linux中文件压缩最核心的组合是tar和gzip,tar负责打包文件或目录,gzip负责压缩单个文件。1. tar命令用于打包、查看、解包文件,保留目录结构和权限;2. gzip用于压缩或解压文件,节省空间;3. 两者结合使用时,用tar -czvf打包并压缩成.tar.gz文件,用tar -xzvf解压并解包。二者分工明确,tar处理多文件组织,gzip专注高效压缩,适用于数据管理、传输及备份场景。

Linux文件压缩怎么用?_Linuxtar与gzip命令实例

在Linux里,说到文件压缩,最常用也最核心的组合拳就是targzip。简单来说,tar负责把一堆文件或整个目录“打包”成一个文件,而gzip则负责把这个“包”压得更小,节省空间。两者结合,能让你轻松管理和传输大量数据。

Linux文件压缩怎么用?_Linuxtar与gzip命令实例

解决方案

在我看来,Linux的文件压缩其实就是把散落在各处的文件和目录规整起来,再给它们“瘦身”。最直接的办法,就是用tar命令来打包,再用gzip来压缩。

1. 使用 tar 命令打包

Linux文件压缩怎么用?_Linuxtar与gzip命令实例

tar,全称是Tape Archive,最初是为了磁带备份设计的,但现在我们更多用它来打包文件和目录,而不会进行压缩。

  • 打包文件或目录: 假设你有一个项目目录叫 my_project/,里面有代码、文档等等。你想把它打包成一个文件。

    Linux文件压缩怎么用?_Linuxtar与gzip命令实例
    tar -cvf my_project.tar my_project/

    这里:

    • -c (create):创建新的归档文件。
    • -v (verbose):显示打包过程中的详细信息,比如正在打包哪些文件,看着心里踏实。
    • -f (file):指定归档文件的名称,这里是 my_project.tar
  • 查看归档文件内容: 想看看 my_project.tar 里都有啥?

    tar -tvf my_project.tar
    • -t (list):列出归档文件中的内容。
  • 解包归档文件:my_project.tar 解开,还原成原来的文件和目录。

    tar -xvf my_project.tar
    • -x (extract):从归档文件中提取文件。 默认情况下,它会解压到当前目录。如果你想解压到特定目录,可以加上 -C 选项:
      tar -xvf my_project.tar -C /path/to/destination/

2. 使用 gzip 命令压缩

gzip 主要用于单个文件的压缩,它会将原始文件替换为 .gz 结尾的压缩文件。

  • 压缩文件: 比如你有一个大日志文件 access.log

    gzip access.log

    执行后,access.log 会变成 access.log.gz,原始文件会被删除。

  • 解压缩文件: 解压 access.log.gz

    gzip -d access.log.gz

    或者使用更直观的 gunzip 命令:

    gunzip access.log.gz

    这会将 access.log.gz 解压回 access.log

3. targzip 结合使用 (最常见的方式)

这才是日常工作中我们最常用的方式,一步到位完成打包和压缩。

  • 打包并压缩:my_project/ 目录打包并用 gzip 压缩成一个文件 my_project.tar.gz (或 my_project.tgz):

    tar -czvf my_project.tar.gz my_project/

    这里多了一个 -z 选项,它告诉 tar 在打包的同时使用 gzip 进行压缩。

  • 解压缩并解包: 解压 my_project.tar.gz

    tar -xzvf my_project.tar.gz

    同样,-z 选项在这里是告诉 tar,这是一个 gzip 压缩过的文件,需要先用 gzip 解压,再进行解包。

是不是觉得很方便?我个人觉得,掌握了 tar -czvftar -xzvf 这两句,你就掌握了Linux文件压缩的半壁江山。

为什么我们常把tar和gzip一起用?它们各自的优势是什么?

说白了,targzip是“术业有专攻”的两个工具,它们各自负责不同的任务,但结合起来却能发挥出1+1>2的效果。在我看来,这就像是先把你散乱的行李都装进一个大箱子(tar),然后再把这个箱子用真空袋抽掉空气,让它变得更小、更方便携带(gzip)。

tar 的优势:打包与组织

tar 的核心功能是归档。它的强大之处在于能把多个文件、甚至整个目录结构原封不动地打包成一个单一的文件。想象一下,你有一个复杂的项目,里面有几十个子目录和上百个文件,如果一个个去复制或传输,那简直是噩梦。tar 就能把这一切变成一个 .tar 文件,就像一个“容器”。

  • 保持目录结构: 这是 tar 最重要的特性。它能精确地保留文件和目录的层级关系、权限、时间戳等元数据。解压后,一切都和打包前一模一样。
  • 方便传输和管理: 把一大堆零散的文件整合成一个文件后,无论是通过网络传输,还是在本地存储,都变得极其简单。你只需要管理一个文件,而不是一堆文件。
  • 增量备份基础: 虽然不是直接的备份工具,但 tar 的归档能力是很多备份脚本的基础。

gzip 的优势:高效压缩

闪念贝壳
闪念贝壳

闪念贝壳是一款AI 驱动的智能语音笔记,随时随地用语音记录你的每一个想法。

下载

gzip 的核心功能是压缩。它专注于减少文件的大小,通过特定的算法移除数据中的冗余信息。

  • 节省存储空间: 这是最直接的好处。对于日志文件、文本文件、代码文件等,gzip 的压缩效果通常非常显著,能将文件大小减少到原来的10%甚至更少。
  • 加快传输速度: 文件小了,通过网络传输所需的时间自然就短了。这在处理远程服务器上的数据时尤其重要。
  • 流式处理能力: gzip 可以很好地与管道(|)结合,进行实时压缩和解压缩,而不需要先完成整个文件的读写。

为什么它们要一起用?

因为 gzip 只能压缩单个文件。如果你直接对一个目录使用 gzip,它会报错,或者只能压缩目录里的某个文件。而 tar 虽然能打包,但它本身不提供压缩功能。

所以,当我们需要打包一个目录(或多个文件)并同时减小其体积时,tar 负责将所有内容打包成一个 .tar 文件,然后 gzip 再对这个 .tar 文件进行压缩,生成最终的 .tar.gz 文件。这种组合是 Linux 系统中处理文件和目录最标准、最通用的方式。在我日常处理服务器日志、部署代码包、或者备份数据库时,tar -czvf 几乎是我的肌肉记忆了。

在实际操作中,压缩和解压缩时常遇到的问题及解决方法

即便 targzip 用起来很顺手,但在实际操作中,总会遇到些小麻烦,对吧?我个人也踩过不少坑,这里总结一些常见的:

1. 权限问题 (Permission denied)

这是最常见的错误之一。当你尝试打包或解压一个你没有读写权限的目录或文件时,tar 就会报错。

  • 表现: tar: <filename>: Cannot open: Permission denied
  • 解决方法:
    • 使用 sudo 如果你有管理员权限,最简单粗暴的方法就是在命令前加上 sudo
      sudo tar -czvf /var/log/backup.tar.gz /var/log/
    • 检查文件/目录权限: 使用 ls -l 查看文件或目录的权限,并确保你的用户有足够的权限。如果需要,使用 chmodchown 修改权限或所有者。
      ls -ld /path/to/directory
      chmod -R u+rwX /path/to/directory # 递归添加读写执行权限给所有者
    • 切换用户: 切换到拥有权限的用户进行操作。

2. 路径问题 (相对路径与绝对路径)

解压后发现文件不在期望的位置,或者解压出来多了一层目录。

  • 表现: 解压后 my_project.tar.gz 得到 home/user/my_project/ 而不是直接的 my_project/。或者文件散落在当前目录。
  • 解决方法:
    • 解压到指定目录: 使用 -C 选项将内容解压到你想要的目录。
      tar -xzvf my_project.tar.gz -C /opt/new_location/
    • 打包时使用相对路径: 在打包时,如果你想让解压后的内容直接在当前目录,而不是带上父目录,可以在打包时进入到父目录再指定要打包的子目录。
      # 假设当前在 /home/user/,要打包 /home/user/my_project/
      cd /home/user/
      tar -czvf my_project.tar.gz my_project/
      # 这样解压时,会在解压目录直接生成 my_project/
    • 解压时去除路径前缀: 如果打包时包含了不必要的父目录,解压时可以用 --strip-components=N 来去除前N层目录。
      # 假设 my_archive.tar.gz 解压后是 project_root/my_project/src/
      # 你只想得到 src/ 里面的内容
      tar -xzvf my_archive.tar.gz --strip-components=2

3. 磁盘空间不足 (No space left on device)

当你要压缩或解压的文件非常大,而目标磁盘空间不够时,就会出现这个错误。

  • 表现: tar: Error is not recoverable: exiting nowgzip: write error: No space left on device
  • 解决方法:
    • 检查磁盘空间: 使用 df -h 命令查看各个挂载点的磁盘使用情况。
    • 清理不必要的文件: 删除一些旧的日志、临时文件或不再需要的数据来释放空间。
    • 移动到其他分区: 如果有其他空间充足的分区,将压缩包或解压目标移动到那里。
    • 分卷压缩: 对于超大文件,可以考虑使用 split 命令配合 tar 进行分卷压缩,然后逐个传输或处理。

4. 压缩包损坏或不完整

下载的压缩包可能在传输过程中损坏,或者压缩时就出现了问题。

  • 表现: gzip: stdin: unexpected end of filetar: Child returned status 1
  • 解决方法:
    • 重新下载/获取: 最直接的方法是重新下载或从源头获取压缩包。
    • 校验文件完整性: 如果提供方有提供 MD5 或 SHA256 校验码,下载后务必进行校验。
      md5sum your_archive.tar.gz
      sha256sum your_archive.tar.gz
    • 尝试部分恢复: 对于 tar 包,有时即使部分损坏,tar 也能尝试解压其中未损坏的部分,但通常不推荐依赖这种方式。

这些问题,很多时候都是粗心大意或者对 Linux 环境不够熟悉造成的。多看报错信息,多用 man 命令查阅文档,很快就能得心应手。

除了tar和gzip,Linux还有哪些值得关注的压缩工具?它们适用于什么场景?

Linux 生态系统里,压缩工具远不止 targzip 这一对“黄金搭档”。根据不同的需求,比如追求极致压缩比、更快的速度,或者跨平台兼容性,我们还有其他一些非常棒的选择。在我看来,了解它们能让你在特定场景下事半功倍。

1. bzip2 / .bz2

  • 特点: bzip2 通常比 gzip 提供更高的压缩比,尤其是在处理文本文件时效果更明显。但代价是压缩和解压缩的速度会比 gzip 慢一些,且更消耗内存。
  • 命令:
    • 压缩:bzip2 filename (生成 filename.bz2,删除原文件)
    • 解压:bzip2 -d filename.bz2bunzip2 filename.bz2
    • 结合 tar
      • 打包并压缩:tar -cjvf archive.tar.bz2 directory/ (-j 选项)
      • 解压并解包:tar -xjvf archive.tar.bz2
  • 适用场景:
    • 长期存储或归档: 当存储空间非常宝贵,且不经常需要解压时,bzip2 是一个很好的选择。比如,历史日志、不常用的备份文件等。
    • 对压缩比要求更高: 对于一些数据量巨大但访问频率不高的场景,bzip2 能带来更大的存储效益。

2. xz / lzma / .xz

  • 特点: xz 是基于 LZMA2 算法的压缩工具,通常能提供目前所有通用工具中最高的压缩比。它的压缩速度最慢,解压缩速度也比 gzip 慢,但通常比 bzip2 快一点。内存消耗相对较高。
  • 命令:
    • 压缩:xz filename (生成 filename.xz,删除原文件)
    • 解压:xz -d filename.xzunxz filename.xz
    • 结合 tar
      • 打包并压缩:tar -cJvf archive.tar.xz directory/ (-J 选项,注意是大写的J)
      • 解压并解包:tar -xJvf archive.tar.xz
  • 适用场景:
    • 极致压缩比要求: 当你对文件大小有非常严格的限制,比如发布软件源码包、固件镜像、或者需要通过带宽极低的链路传输数据时,xz 是不二之选。很多 Linux 发行版的软件包(如 .deb, .rpm)也会使用 xz 进行压缩。
    • 长期冷存储: 对于极少访问但需要长期保留的数据,xz 的高压缩比能大大节省存储成本。

3. zip / .zip

  • 特点: zip 是一个集打包和压缩于一体的工具,与 Windows 系统兼容性最好。它在 Linux 上也能很好地工作,但通常压缩比不如 gzipbzip2xz
  • 命令:
    • 打包并压缩:zip -r archive.zip directory/ (-r 递归处理目录)
    • 解压:unzip archive.zip
  • 适用场景:
    • 跨平台数据交换: 这是 zip 最重要的用途。如果你需要将文件打包压缩后,方便地在 Linux、Windows 和 macOS 之间共享,zip 是最佳选择,因为这些系统都原生支持 zip 格式。
    • 简单的文件打包: 对于不需要极致压缩比的日常小文件打包,zip 也非常方便。

总的来说,gzip 是我的日常主力,因为它速度快、压缩比适中,平衡性最好。需要更高压缩比时,我会考虑 bzip2xz。而当我知道文件最终会传到 Windows 用户手里时,zip 就会被我优先考虑。选择哪个工具,真的得看你具体的需求和使用场景。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

492

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

382

2023.10.25

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

447

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1517

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1171

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

836

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

463

2023.08.02

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.7万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号