Linux实战笔记(三) 文件压缩

大家好,我是半虹,这篇文章来讲 Linux 系统中常用的文件压缩方式


0、序言

在 Linux 系统中,存在许多打包或压缩文件的工具

这篇文章会对一些常用的工具进行分类整理和介绍

如果只是需要知道怎么对不同格式的文件做解压缩,可以直接跳转到本文最后的总结部分

如果希望了解不同压缩工具的使用方法和应用场景,那么可以跟随正文一起进行深入探讨

好了,下面是正文部分


1、tar

tar 命令本质上是用于打包文件,并不会做压缩,其打包的文件通常带有 .tar 后缀


命令格式如下:

tar [OPTION...] [FILE]..

常用参数如下:

短参数长参数作用
-c--create打包指定文件到新的包
-r--append新增指定文件到已有包
-u--update在已有包更新指定文件
--delete在已有包删除指定文件
-t--list列出包中文件
-x--extract还原包中文件
-f--file指定包的名称
-v--verbose显示详细信息

tar 命令在打包之后,可以通过参数调用压缩工具进一步对其进行压缩,使用的参数如下:

短参数长参数压缩工具压缩后的文件后缀
-z--gzipgzip.tar.gz / .tgz
-Z--compresscompress.tar.Z
-j--bzip2bzip2.tar.bz2
-J--xzxz.tar.xz

下面通过一些简单的例子,了解一下常用的参数组合

# 打包所有后缀为 txt 的文件到新的包 packed.tar
tar -cvf packed.tar *.txt# 新增所有后缀为 png 的文件到已有包 packed.tar
tar -rvf packed.tar *.png# 更新已有包 packed.tar 所有后缀为 txt 的文件
tar -vf packed.tar --update *.txt# 删除已有包 packed.tar 所有后缀为 png 的文件
tar -vf packed.tar --delete *.png# 列出已有包 packed.tar 所有文件
tar -tvf packed.tar# 还原已有包 packed.tar 所有文件
tar -xvf packed.tar# 打包并压缩【常用】
tar -zcvf packed.tar.gz *.txt# 解压并还原【常用】
tar -zxvf packed.tar.gz *.txt# 实际上对于这种先打包再压缩的文件
# 我们既可以使用上述命令解压并还原
# 同时也可以先用对应工具解压,然后再用 tar 还原或做其它操作# 解压后缀为 .gz 的文件
gzip -dk xxx.gz# 解压后缀为 .Z 的文件
gzip -dk xxx.Z# 解压后缀为 .bz2 的文件
bzip2 -dk xxx.bz2# 解压后缀为 .xz 的文件
xz -dk xxx.xz

上面提到的四种压缩方式,这里也做一个简单的介绍

压缩方式文件后缀压缩比率压缩速度解压速度使用场景
gzip.gz适中较快较快十分常用,绝大多数系统都有支持
compress.Z较低较快较快极少使用,只会在老系统遇到
bzip2.bz2较高较慢较慢比较常用,特别是在高压缩比场景
xz.xz很高较慢较慢比较常用,特别是在高压缩比场景

如果对压缩比例、压缩速度、解压速度在大多数情况下进行排序,大致如下:

  • 压缩比率:xz > bzip2 > gzip > compress
  • 压缩速度:gzip > compress > bzip2 > xz
  • 解压速度:gzip > compress > bzip2 > xz

对于各压缩算法的使用场景,推荐如下:

  • 如果希望平衡压缩比和解压缩时间,那么推荐选择 gzip
  • 如果追求较高压缩比,不在乎时间,那么推荐选择 bzip2 或者 xz

下面来测试下各个压缩算法的实际表现

就地取服务器上的一个大型前后端项目,包括程序文件、图片资源、文本资源、模型资源等共 4G 大小

对其进行打包之后压缩,各项指标如下:

测试命令压缩算法压缩后的文件大小压缩时间解压时间
time tar -cf xxx.tar ./xxx/3.6G0m6.003s0m24.740s
time tar -zcf xxx.tar.gz ./xxxgzip2.5G2m9.206s0m46.089s
time tar -jcf xxx.tar.bz2 ./xxxbzip22.2G11m4.117s4m45.567s
time tar -Jcf xxx.tar.xz ./xxxxz1.3G20m0.949s1m36.590s

需要注意的是,不同的压缩算法对于不同的文件类型具有很大差异

上述测试旨在提供一个参考,并不能代表所有的情况


2、zip & rar

除了上述用于打包的 tar  以及同步介绍的 gzipcompressbzip2xz 等压缩方式

ziprar 也是很常用的压缩格式,特别是在 Windows 系统上


对于这些 Windows 系统上常用的压缩算法,Linux 也有提供相应的支持

  • 对于 zip 格式,可以使用 zip 命令进行压缩,对应使用 unzip 命令进行解压
  • 对于 rar 格式,可以使用 rar 命令进行压缩,对应使用 unrar 命令进行解压

3、总结

文件后缀压缩命令解压命令
.tartar -cvf xxx.tar ...tar -xvf xxx.tar
.tar.gz / tgztar -zcvf xxx.tar.gz ...tar -zxvf xxx.tar.gz
.tar.bz2tar -jcvf xxx.tar.bz2 ...tar -jxvf xxx.tar.bz2
.tar.xztar -Jcvf xxx.tar.xz ...tar -Jxvf xxx.tar.xz
.gzgzip -k ... gzip -dk xxx.gz
.bz2bzip2 -k ... bzip2 -dk xxx.bz2
.xzxz -k ... xz -dk xxx.xz
.zipzip xxx.zip ...unzip xxx.zip
.rarrar a xxx.rar ...unrar e xxx.rar


好啦,本文到此结束,感谢您的阅读!

如果你觉得这篇文章有需要修改完善的地方,欢迎在评论区留下你宝贵的意见或者建议

如果你觉得这篇文章还不错的话,欢迎点赞、收藏、关注,你的支持是对我最大的鼓励 (/ω\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中的流刷新和定位

一、流的刷新 int fflush(FILE *fp); 1.成功时返回0;出错时返回EOF 2.将流缓冲区中的数据写入实际的文件 3.Linux下只能刷新输出缓冲区,输入缓冲区丢弃 4.如果输出到屏幕使用fflush(stdout) 二、流的定位 long ftell(FILE *stream);long fseek(FILE *stre…

《底层逻辑》--透过表象看系统

上一个视频,讲了微软公司通过改变与供应商的“连接关系”从而提高了工作餐的质量; 今天就讲讲拥有这种洞察力背后的理论依据,即“透过表象看系统”; 系统 要素 连接关系;再细化一下,构成…

如何在MATLAB中处理图像和视频?

在MATLAB中处理图像和视频是一项复杂而强大的任务,涉及多个步骤和工具。MATLAB提供了丰富的函数和工具箱,使用户能够轻松地加载、处理、分析和显示图像和视频数据。 一、图像处理基础 加载图像:在MATLAB中,可以使用imread函数加…

2024蓝桥杯每日一题(并查集)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:奶酪 试题二:合并集合 试题三:连通块中点的数量 试题四:网络分析 试题一:奶酪 【题目描述】 现有一块大奶酪,它的高度为 hℎ…

shell source脚本中如何读取另外一个脚本中的变量

目录 前言语法举例注意 前言 要在一个Shell脚本中读取另一个Shell脚本中的变量,可以使用source命令或者.命令。这些命令用于在当前Shell环境中运行指定的脚本,从而使得脚本中的变量在当前Shell中可用。 语法 #!/bin/bash # 读取另一个Shell脚本中的变…

金智维的务实主义,打响大模型落地“突围战”

今年以来,新质生产力成为全社会关注的焦点。新质生产力的特征之一,就是深化新技术应用,尤其是AI及大模型,要加速落地到实际业务场景中,为千行万业提质增效。 2024是大模型技术做深、价值做实的一年。3月20日&#xff0…

【C++】详解智能指针

目录 一、智能指针的作用二、内存泄露1、什么是内存泄露2、内存泄漏分类3、如何避免内存泄露 三、智能指针的使用及原理1、RAII2、智能指针的原理3、std::auto_ptr4、std::unique_ptr5、std::shared_ptr1、std::shared_ptr原理2、std::shared_ptr的线程安全问题4、std::shared_…

python爬虫学习第二天----类型转换

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

安卓面试题多线程 101-105

101. 简述Java体系中锁的优化机制 ?从JDK1.6版本之后,synchronized本身也在不断优化锁的机制,有些情况下他并不会是一个很重量级的锁了。优化机制包括自适应锁、自旋锁、锁消除、锁粗化、轻量级锁和偏向锁。 锁的状态从低到高依次为无锁->偏向锁->轻量级锁->重量级…

20240321金融读报:金融活水促经济发展

虽然有点长,但是感觉很对诶,金融活水不就是跟着国家划得沟沟壑壑灌溉企业吗 银行信贷投放的宗旨是服务实体经济。我们要求全行牢牢把握高质量发展这个首要任务,融入国家新发展格局,锚定符合现代化产业体系、服务社会民生的方向来推…

QT常见数据类型和类的使用

QByteArray QByteArray 是一个Qt框架中的类,它是一个可变长的字节数组,可以用于存储任意类型的数据,包括二进制数据和文本数据 // 创建数组 QByteArray byteArray; // 空的字节数组 QByteArray byteArray1("Hello world"); // 初始…

电脑如何录视频?进阶教程来了!

随着科技的飞速发展,视频录制已成为我们日常生活和工作中不可或缺的一部分。无论是进行在线教育、制作教学视频,还是记录游戏过程、直播分享,录屏都扮演着至关重要的角色。可是您知道电脑如何录视频吗?本文将介绍两种电脑录视频的…

php做桌面应用,具体有哪些,但是集成图形库gui就差了点。主流的gui框架有哪些,php作为服务器端语言,处理网页没有问题

php做桌面应用,具体有哪些,但是集成图形库gui,比起python就差了点。主流的gui框架有哪些, 导读:现在流行全栈开发,一种语言满足web应用,桌面应用,手机应用,但是Php桌面应…

java 判断一个整数是否是回文数

java 判断一个整数是否是回文数 要判断一个整数是否是回文数,可以将其转换为字符串,然后比较字符串的正序和倒序是否相同。以下是用 Java 编写的判断回文数的函数: public class Palindrome {public static boolean isPalindrome(int x) {//…

稀碎从零算法笔记Day23-LeetCode:二叉树的最大深度

题型:链表、二叉树的遍历 链接:104. 二叉树的最大深度 - 力扣(LeetCode) 来源:LeetCode 题目描述 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上…

vue2从基础到高级学习笔记

在实际的工作中,我常使用vue的用法去实现效果,但是你要是问我为什么这样写,它的原理是啥就答不上来了。对vue的认知一直停留在表面,写这篇文章主要是为了理清并弄透彻vue的原理。 学习目标 1 学会一些基本用法的原理 2 弄懂vue核心设计原理 3 掌握vue高级api的用法 一 vue…

sonarqube使用指北(一)- 基于docker的安装部署

一、前言 最近出于SDL的安全需求,打算部署一个静态代码扫描工具,出于通用性和可靠性的考虑,选择sonarqube来执行静态代码扫描。 SonarQube 是一个用于进行代码质量管理的开源平台,它提供了代码静态分析、代码检查、代码覆盖率等功能。下面是 SonarQube 的一些优缺点: 优点…

环境安装篇 之 安装kubevela

云原生学习路线导航页(持续更新中) 本文是 环境安装 系列文章,介绍 oam规范标准实施项目 kubevela 的安装详细步骤kubevela 官方安装文档:https://kubevela.io/zh/docs/installation/kubernetes/ 1.CentOS 安装kubevela 1.1.前提…

电脑数据安全新篇章:备份文件,守护您的珍贵数据

备份文件,无疑是电脑使用中不可或缺的重要一环。在数字化时代,我们的工作、学习和生活都离不开电脑,而电脑中的数据更是我们宝贵的财富。一旦数据丢失或损坏,可能会带来无法估量的损失。因此,备份文件的重要性不言而喻…

Vue.js+SpringBoot开发高校宿舍调配管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统展示四、核心代码4.1 查询单条个人习惯4.2 查询我的室友4.3 查询宿舍4.4 查询指定性别全部宿舍4.5 初次分配宿舍 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的…