Linux入门笔记(文件压缩)

目前计算机系统中都是使用所谓的字节单位来计量的,而事实上,计算机最小的计量单位应该是 bit 才对,而 1B = 8bit,即每个字节当中会有 8 个空格,每个空格可以是 01

在正常情况下,我们存储数字 1 为例,在 8 个 bit 中,1 会占据最右边的一个位,而其余的七个为都会将会自动地被填上 0。但按理说这七个位都应该为空的才对,不过 为了要满足目前操作系统数据的读写,所以就会将该数据转化为字节的形式来记录,而其中一种压缩的技术其实就是 通过一些复杂的计算方式,将这些没有使用的空间 “丢” 出来,从而使文件变小
还有一种压缩技术就是将重复的数据进行统计记录,比如说,数据中为 1111111...... 共有 100个 1 时,那么压缩技术就可以记录为 100 个 1 来表示,而不是真的使用 100 个 bit 来表示。
不过,这些压缩过的文件并无法直接被操作系统所使用,即需要解压才能正常使用该文件,而压缩后与压缩的文件所占用的磁盘空间大小,就可以被称为 压缩比

1 Linux 系统常用的压缩命令

在 Linux 的环境中,压缩文件的扩展名大多为:*.tar*.tar.gz*.tgz.gz*.Z*.bz2*.xz。之前文章都说过,Linux 的扩展名没有什么作用,那么这些扩展名的作用是什么?
这是因为 Linux 支持的压缩命令很多,不同的命令所用的压缩技术并不相同,即彼此之间可能无法互通的进行解压缩。所以比如在下载某个压缩文件时,就需要知道明确该文件是使用哪个压缩命令进行压缩,从而才能明确该使用哪个解压命令进行解压。
以下是一些常用的压缩文件扩展名:

  • *.Z:compress 程序压缩的文件
  • *.zip:zip 程序压缩的文件
  • *.gz:gzip 程序压缩的文件
  • *.bz2:bzip2 程序压缩的文件
  • *.xz:xz 程序压缩的文件
  • *.tar:tar 程序打包的文件,并没有压缩过
  • *.tar.gz:tar 程序打包的文件,并使用 gzip 程序压缩
  • *.tar.bz2:tar 程序打包的文件,并使用 bzip2 程序压缩
  • *.tar.xz:tar 程序打包的文件,并使用 xz 程序压缩

它们之间的压缩比都是不同的,而 Linux 上最常用的压缩命令就是 gzipbzip2 以及最新的 xz,不过简单的压缩命令通常只针对一个文件来压缩与解压,即如果要压缩与解压一堆文件的时候,就要使用到打包程序 tar
tar 可以将很多文件打包成一个文件,实际上它没有压缩功能,所以如上列表的 *.tar.gz 命令那样,将这个 tar 与压缩的功能结合在一起,方便用户使用。

2.1 gzipzcat/zmore/zless/zgrep

gzip 可以说是应用最广的压缩命令了,目前 gzip 可以解开 compress、zip 与 gzip 等软件所压缩的文件,以下是它的语法:
压缩:

gzip [-cdtv#] 文件名

以下是一些参数与选项:

  • -c:将压缩的数据输出到屏幕上,可通过数据流重定向处理
  • -d:添加该参数用于 解压 操作
  • -t:可用来检测一个压缩文件的一致性,查看文件有无错误
  • -v:可以显示压缩比
  • -## 是一个 19数字,它表示压缩等级,1 最快,但压缩比最差;9 最慢,但压缩比最好,默认值是 6

使用 gzip 进行压缩时,在默认的状态下原本的文件会被压缩为 .gz 后缀的文件,源文件就不再存在了,同时使用 gzip 压缩的文件在 Windows 系统中,可以被 WinRAR 或 7 ZIP 这些软件解压缩。

与此同时,还有 bzip2xz 这两个用法一致但压缩比更好的压缩命令可以使用,不过鉴于耗时问题,所以最常用的还是 gzip

2.1.1 zcat/zmore/zless/zgrep

zcat/zmore/zless/zgrep 这些是 gzip 命令衍生出来的命令,看它们的名字可以猜出,它们可以类比于 cat/more/less/grep 命令用于查看由文本类型的文件压缩而来的压缩文件

2.2 打包命令 tar

前面谈到的压缩命令大多只针对单一文件进行压缩,如 gzipbzip2 对目录的压缩是值将目录内所有文件 分别 进行压缩的操作,而不是像使用 WinRAR 一样将这些数据都包成一个文件然后进行压缩。
此时就需使用到 tar 打包命令了。
tar 命令的语法如下:
打包压缩

tar [-z|-j|-J] [-cv] [-f 待建立的文件名] filename ...
  • -c:建立打包文件
  • -p:保留备份数据的原本权限与属性
  • --exclude=fliename:在压缩的过程中,不要将 filename 文件打包
  • -v:在压缩/解压缩的过程中,将正在处理的文件名显示出来,下同
  • [-z|-j|-J]:表示的是使用哪种方式进行压缩/解压缩,-z 表示使用 gzip 的支持进行解压缩(此时文件名最好为 *.tar.gz),-j 表示通过 bzip2 的支持进行压缩/解压缩(此时文件名最好为 *.tar.bz2),-J 表示通过 xz 的支持进行压缩/解压缩(此时文件名最好为 *.tar.xz),下同
  • -f filename-f 后面要紧接 被处理的文件名下同
  • time:在命令的最前加入 time 字段,可以显示程序运行的时间

查看打包压缩文件内文件名

tar [-z|-j|-J] [-tv] [-f 既有的 tar 文件名]
  • -t:查看打包文件的内容含有那些文件名
    解压缩
tar [-z|-j|-J] [-xv] [-f 既有的 tar 文件名] [-C 目录]
  • -x:解包或解压缩的功能
  • -C 目录:在特定目录下解压缩
  • 如果想要仅解开单一文件下面语法,需要知道想要单一解开文件的文件名,注意:待解开文件名是包含路径的,此时可以使用上述 -t 查看文件名
tar -zxv -f 打包文件名 待解开文件名

tar 打包出来的文件有没有进行压缩所得到文件称呼不同,如果仅是打包而已(如 tar -cv -f filename),这个文件名我们称为 tarfile,否则称为 tarball

你可能感兴趣的:(Linux)