打包(归档)和压缩(包含两者的区别)

在讲解具体的归档命令和压缩命令之前,先来了解一下归档和压缩所各自代表的含义。

归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。

通常,归档总是会和系统(数据)备份联系在一起,不过,有关数据备份的内容,留到后续章节讲,本章仅学习归档命令的基本使用。

和归档文件类似,压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其所占用的磁盘空间比集合中所有文件大小的总和要小。

压缩是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。比如说,在压缩文件中,有不止一处出现了 "C语言中文网",那么,在压缩文件时,这个词就会用一个代码表示并写入词典文件,这样就可以实现缩小文件体积的目的。

由于计算机处理的信息是以二进制的形式表示的,因此,压缩软件就是把二进制信息中相同的字符串以特殊字符标记,只要通过合理的数学计算,文件的体积就能够被大大压缩。把一个或者多个文件用压缩软件进行压缩,形成一个文件压缩包,既可以节省存储空间,有方便在网络上传送。

如果你能够理解文件压缩的基本原理,那么很容易就能想到,对文件进行压缩,很可能损坏文件中的内容,因此,压缩又可以分为有损压缩无损压缩。无损压缩很好理解,指的是压缩数据必须准确无误;有损压缩指的是即便丢失个别的数据,对文件也不会造成太大的影响。有损压缩广泛应用于动画、声音和图像文件中,典型代表就是影碟文件格式 mpeg、音乐文件格式 mp3 以及图像文件格式 jpg。

采用压缩工具对文件进行压缩,生成的文件称为压缩包,该文件的体积通常只有原文件的一半甚至更小。需要注意的是,压缩包中的数据无法直接使用,使用前需要利用压缩工具将文件数据还原,此过程又称解压缩

Linux 下,常用归档命令有 2 个,分别是 tar 和 dd(相对而言,tar 的使用更为广泛);常用的压缩命令有很多,比如 gzip、zip、bzip2 等。这些命令的详细用法,后续文件会做一一介绍。

注意,tar 命令也可以作为压缩命令,也很常用。


推荐文章
Java数字转人民币读法(附带源码和解析)

本节讲解在实际开发中常用的一个方法:将一个浮点数转换成人民币读法字符串,这个程序就需要使用数组。 实现这个方法的思路是,首先把这个浮点数分成整数部分和小数部分。提取整数部分很容易,直接将这个浮点数强

SanDiskSecureAccess是什么软件?

SanDiskSecureAccess是闪迪u盘的加密软件。sandisksecureaccess,中文名称又叫做闪迪保险箱安全软件,是闪存盘中附带的一个免费的数据加密和密码保护的应用软件。该软件以快

Linux GRUB手动安装方法详解

需要手工安装GRUB主要有两种情况: Linux系统原先不是使用GRUB作为引导程序而现在想要使用GRUB来作为引导程序; MBR中的引导程序被覆盖,需要在MBR中重新安装GRUB,如先安装了L

内存映射文件完全攻略(原理和性能)

假设采用标准系统调用open()、read()和write()来顺序读取磁盘文件,每个文件访问都需要系统调用和磁盘访问。又或者采用虚拟内存技术,以将文件I/O作为常规内存访问,这种方法称为内存映射文件

如何启动Django项目详解

我们使用django-admin命令成功创建项目后,我们要如何启动这个项目呢?本节的学习目标是能够通过本地回送地址127.0.0.1成功访问BookStore项目。 1.启动项目并实现访问 在CMD

邮件系统配置视频教程(橡皮树老师出品6集)

视频讲解了如何在RHEL5上安装Postfix+Dovecot+MySQL+Postfixadmin+Spamassassin系统。 视频目录: [bbk1099]--邮件系统的体系结构以及Re

C语言数据类型转换(自动类型转换+强制类型转换)

数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。 自动类型转换 自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。

Linux tail命令:显示文件结尾的内容

tail命令和head命令正好相反,它用来查看文件末尾的数据,其基本格式如下: [root@localhost~]#tail[选项]文件名 此命令常用的选项及含义如表1所示。 表1tail命令

Java字符串替换实例

假设有一段文本里面有很多错误,如错别字。现在使用Java中的字符串替换方法对它进行批量修改和纠正,其中就用到了我们在《Java字符串的替换》一节中学到的String类的replace()方法、repl

C#/.NET值类型

值类型(ValueType)包括两个成员:结构体和枚举类型。 通常来说,值类型就是字面意义上的那种值,例如整数int,小数float/double,布尔值等。 而实际上,整数、小数,布尔值等全部都

防止缓存穿透方案

缓存可以说是我们对数据库的一道保护墙,缓存穿透就是冲破了我们的保护墙,每个缓存都有一个缓存的Key,当相同的Key过来时,我们就直接取缓存中的数据返回给调用方,而不用去查询数据库,如果调用方传来的永远

逻辑地址空间和物理地址空间

CPU生成的地址通常称为逻辑地址,而内存单元看到的地址(即加载到内存地址寄存器的地址)通常称为物理地址。 编译时和加载时的地址绑定方法生成相同的逻辑地址和物理地址。然而,执行时的地址绑定方案生成不同

鼠标中键是什么?

鼠标中键规范名称叫“鼠标滚轮”,是位于鼠标左右键中间的一个轮型按键。鼠标滚轮的主要用途有:浏览网页和office编辑页面中用于滚动页面,只需上下滚动滚轮即可。某些浏览器中可用于关闭浏览完毕的标签页,只

C语言形参和实参的区别(非常详细)

如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。 这一节我们先来讲解C语言函数的参数,下一节再讲解C语言函数的返回值。

Unity 3D的应用

Unity3D是目前主流的游戏开发引擎,有数据显示,全球最赚钱的1000款手机游戏中,有30%是使用Unity3D开发出来的。尤其在VR设备中,Unity3D游戏开发引擎具有统治地位。 Unity3

Java商品信息查询

综合一维数组和二维数组的相关知识,以及数组排序的多种算法来实现商品信息查询的功能。 假设在仓库系统中,每件商品都有3个库存信息,分别是入库量、出库量和当前库存量。定义一个一维数组来存储5件商品的名称

PHP strtotime()与mktime():日期转时间戳

前面我们介绍了《time()函数》可以获取当前的时间戳,那么如果想要将一个具体的时间转换成时间戳的话该怎么办呢? PHP中提供了两个函数可以实现将具体的日期转换为时间戳,分别是strtotime()

构建SNMP协议的Trap请求

一般情况下,网络管理站NMS向SNMP代理发送请求,获取被管理设备的参数值。然后,SNMP代理将自己在MIB管理信息库中查到的参数值返回给网络管理站NMS。这种方式采用的是Get请求。 但是还有一种

C语言if else语句详解

前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条、第三条……一直到最后一条语句,这称为顺序结构。 但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用

Java定义字符串(2种方式)

字符串是Java中特殊的类,使用方法像一般的基本数据类型,被广泛应用在Java编程中。Java没有内置的字符串类型,而是在标准Java类库中提供了一个String类来创建和操作字符串。 在Java中