Linux入门系列--压缩与解压

一、前言

为了使传输的文件大小尽可能地小,我们采用压缩的方式生成压缩文件,然后将压缩包传输过去就可以了。衡量压缩方法地好坏主要有两点综合考量:一是压缩速度,二是压缩程度。很好理解,压缩一个文件,我当然不能一直等他压缩吧,不然还赶不上直接传输呢。另外,压缩程度不够的话,文件还是那么大,这跟我们的诉求不一样啊,我们就是为了尽可能地小,它压缩一下就压缩了百分之一,这还不如不压缩,毫无意义。

不知道大家学过数据结构中地哈夫曼树吗,哈夫曼编码就是一种压缩算法。我们本节要将地zip和gzip都使用了哈夫曼编码作为其压缩算法中的一部分。bzip2和rar也与哈夫曼编码有一定的关系:

zip:使用DEFLATE算法,而DEFLATE算法是基于LZ77算法和哈夫曼编码的组合

gzip:同样使用DEFLATE算法

bzip2:使用的是Burrows-Wheller变换和移动块排序算法,最后结合哈夫曼编码,但不是直接用哈夫曼编码进行压缩的。

rar:使用了多种压缩算法:主要是LZSS,结合哈夫曼编码、移动块排序等,新版本(如RAR 5.0)还引入了多线程压缩,利用现代多核处理器提高压缩速率和效率。


好了,言归正传,我们本次就来说一说linux下常用的gzip、bzip2以及不太常用的zip、rar。

二、gzip与bzip2

先来看一下该文件下有什么文件:

此时如果我们使用gzip命令对a.txt进行压缩,让我们看一下结果:

问题一:这与我们使用windows的压缩不一样啊,使用windows时,我们压缩后,会生成新的压缩文件夹,并没有覆盖原来的压缩文件。

暂时解压一下文件:

然后使用gzip命令,压缩两个文件:

问题二:尝试压缩多个文件时,同样分别对源文件直接压缩,并没有生成新的压缩文件夹,也没有将两个文件归为一个文件。

所以单纯的gzip和gunzip并不能帮我们解决日常的需求。bzip2命令同样如此。所以需要结合linux下的打包指令tar

tar:将一些文件打包成一份新的文件夹,通常使用tar做后缀名。语法:

#打包:
tar -cvf 打包后的文件名 待打包资料列表
#解包:
tar -xvf 打包文件

参数解释:

-c:打包  -x:解包 

-v:显示打包进度条

-f:必须放在最后紧挨着打包的文件名。

下面给个示例:将a.txt.gz和b.c.gz给打包成一个文件gzfile.tar: 

我们可以看到,虽然将两个文件打包了,但是并没有将原来的文件覆盖,而且支持同时操作多个文件合并。

这时候我们将a.txt.gz和b.c.gz删除,来看一下解包后,是否会解包为两个文件:

我们可以看到,解包为了两个文件,并且打包文件并灭有消失。这非常符合我们的预期,但是,通过ls -lh我们看到,打包后的文件远远大于源文件的两个大小,源文件为两个压缩文件,总共才50B,打包后的文件反而成了10K的大小。所以就需要将tar与gzip等指令进行配合使用:

使用gzip对打包文件gzfile.tar进行压缩,然后大小从10K减小到了190B。此时我们就又遇到了两个问题:

问题一:每次压缩文件都写两个命令,太麻烦了,我想一蹴而就,有办法:

以解压命令为例:在选项中加入-z选项,就会自动在执行完打包命令后执行gzip命令,如果配合-c,那就是压缩,如果配合-x那就是解压缩。

对于bzip2命令的使用方法同样如上:只不过选项不是-z,而是-j,来看一下:

问题二:为什么压缩后的文件还是比原文件加起来还要大,这还压缩什么?

这是因为有几个原因会造成这样的情况,并非所有时候都是这样的。

  1. 文件类型:某些类型的文件(如已经压缩过的文件,比如 JPEG 图片、MP3 音乐等)在二次压缩时,可能会导致比原文件更大的输出文件。因为压缩算法在这些文件上没有更多的可压缩数据可利用。

  2. 压缩级别tar 命令的压缩只是在一定程度上进行的,具体压缩程度取决于使用的压缩算法。如果你使用 -z 选项,它会调用 gzip ,该算法的默认压缩力度并不是最高的。如果需要更高的压缩率,可以考虑使用其他工具(如 xz 或 bzip2)并调整压缩参数。

  3. 元数据和结构开销:压缩包内包含了文件的元数据(如文件权限、时间戳等),这在某些情况下可能显著增加文件大小。

  4. 空文件和小文件:如果你压缩的原文件中包含很多空文件或特别小的文件,这些在打包后可能占用的总空间反而比压缩前要大。

观察上面三个原因,我们可能违反了三条:1、文件类型为已经压缩过的文件,3、元数据开销(通常相对大文件而言,可以忽略不计这点大小。除非违反了第四条)4、空文件或小文件(由于文件太小,我还要额外保存文件的相关信息,额外有了空间开销)。

三、zip命令

语法:

zip [选项] zipfile files

【-r】递归压缩文件夹及其内容

【-e】加密压缩文件

【-9】使用最大压缩级别

使用示例:

zip archive.zip file1.txt #压缩单个文件
zip archive.zip file1.txt file2.txt #压缩多个文件
zip -r archive.zip folder_name #压缩整个文件夹
zip -e archive.zip file1.txt #加密压缩文件
zip -9 archive.zip file1.txt #使用最大级别压缩文件
unzip [选项] zipfile

【-d】指定解压目录

【-l】列出压缩包内的文件、不压缩

【-o】覆盖已存在的文件

使用示例:

unzip archive.zip #解压缩指定文件
unzip archive.zip -d /path/to/destination/ #解压缩文件到指定目录
unzip -l archive.zip #查看压缩包内的文件列表
unzip -o archive.zip #解压完如果路径下存在包内文件将覆盖已存在文件

如果系统中没有安装这两个命令,可以使用:

sudo apt update  
sudo apt install zip unzip

四、rar命令

首先,安装rar以及unrar两个工具:

sudo apt update  
sudo apt install rar unrar

压缩:

rar a <压缩文件名>.rar <要压缩的文件或目录>
rar a my_archive.rar my_folder #例如压缩一个名为my_folder的目录
rar a -v10m my_archive.part rar my_folder #-v 创建10M大的分卷,压缩文件
rar a -m5 my_archive.rar my_folder #-m 设置压缩级别从0-5
rar a -r my_archive.rar my_folder #-r 递归地压缩子目录和文件

解压:

unrar x <压缩文件名>.rar
unrar x my_archive.rar #例如解压一个名为my_archive.rar的压缩文件
unrar x my_archive.rar <目标目录> #解压到指定目录
unrar l my_archive.rar #l 查看压缩文件内容
unrar e my_archive.rar <文件名> #e 仅提取特定文件

感谢大家!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云服务器重装系统后 一些报错与解决[ vscode / ssh / 子用户]

碰见的三个问题&#xff1a; 1.vscode连接失败 2.登录信息配置 3.新建子用户的一些设置 思考&#xff1a;遇见问题&#xff0c;第一反应 应该如何解决 目录 1. 错误 解决方法 原因 步骤 1&#xff1a;找到known_hosts文件并编辑 步骤 2&#xff1a;通过VSCode终端输入…

【包教包会】CocosCreator3.x——重写Sprite,圆角、3D翻转、纹理循环、可合批调色板、不影响子节点的位移旋转缩放透明度

一、效果演示 重写Sprite组件&#xff0c;做了以下优化&#xff1a; 1、新增自变换&#xff0c;在不影响子节点的前提下位移、旋转、缩放、改变透明度 新增可合批调色板&#xff0c;支持色相、明暗调节 新增圆角矩形、3D透视旋转、纹理循环 所有功能均支持合批、原生平台&…

南昌榉之乡托养机构解读:自闭症与看电视并无必然联系

在探讨自闭症的成因时&#xff0c;有人会问&#xff1a;自闭症是多看电视引起的吗&#xff1f;今天&#xff0c;就让我们来看看南昌榉之乡托养机构对此有何见解。 榉之乡大龄自闭症托养机构在江苏、广东、江西等地都有分校&#xff0c;一直致力于为大龄自闭症患者提供专业的支持…

卷积神经网络(CNN)的层次结构

卷积神经网络&#xff08;CNN&#xff09;是一种以其处理图像和视频数据的能力而闻名的深度学习模型&#xff0c;其基本结构通常包括以下几个层次&#xff0c;每个层次都有其特定的功能和作用&#xff1a; 1. 输入层&#xff08;Input Layer&#xff09;&#xff1a; 卷积神经网…

Milvus×OPPO:如何构建更懂你的大模型助手

01. 背景 AI业务快速增长下传统关系型数据库无法满足需求。 2024年恰逢OPPO品牌20周年&#xff0c;OPPO也宣布正式进入AI手机的时代。超千万用户开始通过例如通话摘要、新小布助手、小布照相馆等搭载在OPPO手机上的应用体验AI能力。 与传统的应用不同的是&#xff0c;在AI驱动的…

数据结构之二叉树详解:从原理到实现

1. 什么是二叉树&#xff1f; 二叉树&#xff08;Binary Tree&#xff09;是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;分别被称为左子节点和右子节点。二叉树可以用来表示层次关系&#xff0c;如文件目录、组织结构&#xff0c;或用于快速查找、…

CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)

附件 calculate.html <!DOCTYPE html> <html lang"en"> <head><!-- 设置字符编码为 UTF-8&#xff0c;支持多语言字符集 --><meta charset"UTF-8"><!-- 设置响应式视图&#xff0c;确保页面在不同设备上自适应显示 --&…

用于LiDAR测量的1.58um单芯片MOPA(一)

--翻译自M. Faugeron、M. Krakowski1等人2014年的文章 1.简介 如今&#xff0c;人们对高功率半导体器件的兴趣日益浓厚&#xff0c;这些器件主要用于遥测、激光雷达系统或自由空间通信等应用。与固态激光器相比&#xff0c;半导体器件更紧凑且功耗更低&#xff0c;这在低功率供…

【maven-5】Maven 项目构建的生命周期:深入理解与应用

1. 生命周期是什么 ​在Maven出现之前&#xff0c;项目构建的生命周期就已经存在&#xff0c;软件开发人员每天都在对项目进行清理&#xff0c;编译&#xff0c;测试及部署。虽然大家都在不停地做构建工作&#xff0c;但公司和公司间&#xff0c;项目和项目间&#xff0c;往往…

数字时代的文化宝库:存储技术与精神生活

文章目录 1. 文学经典的数字传承2. 音乐的无限可能3. 影视艺术的数字化存储4. 结语 数字时代的文化宝库&#xff1a;存储技术与精神生活 在数字化的浪潮中&#xff0c;存储技术如同一座桥梁&#xff0c;连接着过去与未来&#xff0c;承载着人类文明的瑰宝。随着存储容量的不断增…

STM32标准库-FLASH

FLASH模仿EEPROM STM32本身没有自带EEPROM&#xff0c;但是自带了FLASH存储器。 STM32F103ZET6自带 1M字节的FLASH空间&#xff0c;和 128K64K的SRAM空间。 STM32F4 的 SPI 功能很强大&#xff0c;SPI 时钟最高可以到 37.5Mhz&#xff0c;支持 DMA&#xff0c;可以配置为 SPI协…

重学设计模式-工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

在平常的学习和工作中&#xff0c;我们创建对象一般会直接用new&#xff0c;但是很多时候直接new会存在一些问题&#xff0c;而且直接new会让我们的代码变得非常繁杂&#xff0c;这时候就会巧妙的用到设计模式&#xff0c;平常我们通过力扣学习的算法可能并不会在我们工作中用到…

linux(centos) 环境部署,安装JDK,docker(mysql, redis,nginx,minio,nacos)

目录 1.安装JDK (非docker)1.1 将文件放在目录下&#xff1a; /usr/local/jdk1.2 解压至当前目录1.3 配置环境变量 2.安装docker2.1 验证centos内核2.2 安装软件工具包2.3 设置yum源2.4 查看仓库中所有docker版本&#xff0c;按需选择安装2.5 安装docker2.6 启动docker 并 开机…

算法日记 40 day 单调栈

最后两题了&#xff0c;直接上题目。 题目&#xff1a;接雨水 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1…

yagmail邮件发送库:如何用Python实现自动化邮件营销?

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

【RL Base】强化学习:信赖域策略优化(TRPO)算法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

黑马2024AI+JavaWeb开发入门Day04-SpringBootWeb入门-HTTP协议-分层解耦-IOCDI飞书作业

视频地址&#xff1a;哔哩哔哩 讲义作业飞书地址&#xff1a;day04作业&#xff08;IOC&DI&#xff09; 作业很简单&#xff0c;主要是练习拆分为三层架构controller、service、dao&#xff0c;并基于IOC & DI进行解耦。 1、结构&#xff1a; 2、代码 网盘链接&…

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验三----学校选址与路径规划(超超超详细!!!)

目录 实验三 学校选址与道路规划 3.1 实验内容及目的 3.1.1 实验内容 3.1.2 实验目的 3.2 实验方案 3.3 操作流程 3.3.1 环境设置 3.3.2 地势分析 &#xff08;1&#xff09;提取坡度: (2)重分类: 3.3.3 学校点分析 (1)欧氏距离: (2)重分类: 3.3.4 娱乐场所点分析 (1)欧氏距离…

【Python网络爬虫笔记】8- (BeautifulSoup)抓取电影天堂2024年最新电影,并保存所有电影名称和链接

目录 一. BeautifulSoup的作用二. 核心方法介绍2.1 构造函数2.2 find()方法2.3 find_all()方法2.4 select()方法 三. 网络爬虫中使用BeautifulSoup四、案例爬取结果 一. BeautifulSoup的作用 解析HTML/XML文档&#xff1a;它可以将复杂的HTML或XML文本转换为易于操作的树形结构…

MATLAB期末复习笔记(中)

目录 三、MATLAB函数和程序结构 1.MATLAB文件 2.变量和数据类型 &#xff08;1&#xff09;变量 &#xff08;2&#xff09;变量类型 &#xff08;3&#xff09;字符串 3.函数文件 &#xff08;1&#xff09;函数文件规范 &#xff08;2&#xff09;子函数和私有函数 &…