前言
首先,我们先了解一下归档文件和压缩文件,如下:
归档文件:是将一些文件或目录,存储在一个文件中,其文件大小,等于其里面需要归档的各个文件和目录的总和。
压缩文件:是将一些文件或目录,压缩到一个文件中,其文件大小,远小于其里面需要压缩的各个文件和目录的总和,故占用更少的磁盘空间。
下面学习一下 Linux 上常见的压缩、解压缩及归档工具。
常见的压缩、解压缩及归档工具
compress/uncompress
compress 命令使用“Lempress-Ziv”编码压缩数据文件。compress 是个历史悠久的压缩程序,文件经它压缩后,其名称后面会多出 .Z 的扩展名。当要解压缩时,可执行 uncompress 指令。事实上 uncompress 是指向 compress 的符号连接,因此不论是压缩或解压缩,都可通过 compress 指令单独完成,该命令仅能对单个文件进行压缩。
uncompress 命令用来解压缩由 compress 命令压缩后产生的.Z 压缩包。
安装:
yum install ncompress
使用格式:
compress [options...] [file]
uncompress [options] [file]
compress 命令
常用选项:
-f:不提示用户,强制覆盖掉目标文件;-c:将结果送到标准输出,无文件被改变;-r:递归的操作方式;-b <压缩效率>:压缩效率是一个介于9~16的数值,预设值为16,指定愈大的数值,压缩效率就愈高;-d:对文件进行解压缩而非压缩;-v:显示指令执行过程;-V:显示指令版本及程序预设值;
示例:
将 passwd 压缩成另外一个文件:
[root@localhost tmp]# compress -c passwd > passwd.bak.Z
[root@localhost tmp]# ll
总用量 8
-rw-r--r--. 1 root root 909 10月 23 10:39 passwd
-rw-r--r--. 1 root root 544 10月 23 10:42 passwd.bak.Z
这个 -c 的选项比较有趣!会将压缩文件内容放到标准输出中,而不是直接写入文件。所以,我们可以使用输出重定向输出成为另一个档名的文件。
解压刚刚压缩的文件:
[root@localhost tmp]# compress -d passwd.bak.Z
[root@localhost tmp]# ll
总用量 8
-rw-r--r--. 1 root root 909 10月 23 10:39 passwd
-rw-r--r--. 1 root root 909 10月 23 11:18 passwd.bak
uncompress 命令
常用选项:
-f:不提示用户,强制覆盖掉目标文件;-c:将结果送到标准输出,无文件被改变;-r:递归的操作方式。
它就相当于使用
compress -d,这里就不做演示。
gzip/gunzip/zcat
gzip 是 linux 自带的压缩文件命令,它的压缩比大概能达到 60%-70%,比 zip 的压缩比更高。使用 gzip 压缩默认会在文件后加上 .gz 后缀并将源文件删除,该命令仅能对单个文件进行压缩。
gunzip 是解压缩命令。
zcat 命令可以直接查看使用 gzip 压缩后的文件的内容。
使用格式:
gzip [options...] [file]
gunzip [options...] [file]
常用选项:
-d:--decompress的简写,解压 gzip 压缩的文件;-f:--force的简写,强行压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接;-l:--list的简写,列出压缩文件的相关信息;-n:--no-name的简写,压缩文件时,不保存原来的文件名称及时间戳记;-N:--name的简写,压缩文件时,保存原来的文件名称及时间戳记;-r:--recursive的简写,递归处理,将指定目录下的所有文件及子目录一并处理;-t:--test的简写,测试压缩文件是否正确无误;--fast:指定以最快的速度压缩,即以低压缩比压缩,等同于-1;--best:指定以最慢的速度压缩,即以高压缩比压缩,等同于-9;-n:n是指定压缩的速度,默认是6;-c:--stdou或--to-stdout的简写,把解压后的文件输出到标准设备,因为 gzip 压缩文件的时候,不会保留原文件,可以通过-c参数来保留原文件,如:gzip -c user.text > user.text.gz,如果是解压保留原文件,可以:gunzip -c user.text.gz > user.text;
示例:
将 passwd 压缩成另外一个文件:
[root@localhost tmp]# gzip -c passwd > passwd.bak.gz
[root@localhost tmp]# ll
总用量 8
-rw-r--r--. 1 root root 909 10月 23 10:39 passwd
-rw-r--r--. 1 root root 410 10月 23 11:21 passwd.bak.gz
解压刚刚压缩的文件:
[root@localhost tmp]# gunzip passwd.bak.gz
[root@localhost tmp]# ll
总用量 8
-rw-r--r--. 1 root root 909 10月 23 10:39 passwd
-rw-r--r--. 1 root root 909 10月 23 11:21 passwd.bak
bzip2/bunzip2/bzcat
bzip2 命令用于创建和管理(包括解压缩).bz2 格式的压缩包,该命令仅能对单个文件进行压缩。
bzcat 命令可以直接查看使用 bzip2 压缩后的文件的内容。
安装:
yum install bzip2
使用格式:
bzip2 [options...] [file]
bunzip2 [options...] [file]
常用选项:
-c:将压缩与解压缩的结果送到标准输出;-d:执行解压缩;-f或-force:bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖。请使用此参数;-h:在线帮助;-k:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数;-s:降低程序执行时内存的使用量;-t:测试.bz2压缩文件的完整性;-v:压缩或解压缩文件时,显示详细的信息;-z:强制执行压缩;-V:显示版本信息;--repetitive-best:若文件中有重复出现的资料时,可利用此参数提高压缩效果;--repetitive-fast:若文件中有重复出现的资料时,可利用此参数加快执行效果;
示例:
将 passwd 压缩成另外一个文件:
[root@localhost tmp]# bzip2 -c passwd > passwd.bz2
[root@localhost tmp]# ll
总用量 8
-rw-r--r--. 1 root root 909 10月 23 10:39 passwd
-rw-r--r--. 1 root root 432 10月 23 11:30 passwd.bz2
解压刚刚压缩的文件:
[root@localhost tmp]# bunzip passwd.bz2
[root@localhost tmp]# ll
总用量 8
-rw-r--r--. 1 root root 909 10月 23 10:39 passwd
-rw-r--r--. 1 root root 909 10月 23 11:21 passwd.bak
xz/unxz/xzcat
xz 是一种压缩文件格式,采用 LZMA SDK 压缩,目标文件较 gzip 压缩文件(.gz 或 ·tgz)小 30%,较 .bz2 小 15%,该命令仅能对单个文件进行压缩。
使用格式:
xz [options...] [file]
unxz [options...] [file]
xzcat [options] [xz_file]
xz_file:使用 xz 命令压缩的文件;
常用选项:
-d:解压缩;-#:指定压缩比,默认是6,数字越大压缩比越大(1-9);-k:保留原文件;
示例:
将 passwd 压缩成另外一个文件:
[root@localhost tmp]# xz -c passwd > passwd.bak.xz
[root@localhost tmp]# ll
总用量 8
-rw-r--r--. 1 root root 909 10月 23 10:39 passwd
-rw-r--r--. 1 root root 468 10月 23 11:40 passwd.bak.xz
xzcat 可以在不解压的状态下查看压缩后的文件:
[root@localhost tmp]# xzcat passwd.bak.xz
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...
解压刚刚压缩的文件:
[root@localhost tmp]# unxz passwd.bak.xz
[root@localhost tmp]# ll
总用量 8
-rw-r--r--. 1 root root 909 10月 23 10:39 passwd
-rw-r--r--. 1 root root 909 10月 23 11:41 passwd.bak
zip/unzip/zipinfo
zip 和 unzip是 linux 中压缩、解压工具,另外,它还支持归档操作。
zip 命令,可以将一个或多个文件或是目录,压缩成 .zip 格式的压缩文件;
unzip 命令,可以将 zip 压缩的文件解压到指定的目录。
zipinfo 命令可以在不解压压缩包的情况下查看压缩包内的文件内容。
安装:
yum -y install zip
yum -y install unzip
使用格式:
zip [options] <new_file> <dest_file|dest_dir>
new_file:生成的压缩文件名称,文件名后会自动补上 .zip 后缀;
dest_file|dest_dir:要压缩的文件或目录;
unzip [options] [dest_file]
dest_file:要解压的 zip 包;
zipinfo [dest_file]
dest_file:要查看内容的 zip 包
zip 命令
常用选项:
-d:从压缩文件内删除指定的文件;-D:压缩文件内不建立目录名称;-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;-q:不显示指令执行过程;-r:递归处理,将指定目录下的所有文件和子目录一并处理;-S:包含系统和隐藏文件;-t<日期时间>:把压缩文件的日期设成指定的日期;;-v:显示指令执行过程或显示版本信息;-z:替压缩文件加上注释;-<压缩效率>:压缩效率是一个介于1~9的数值;
示例:
创建 /etc 目录及其下所有文件的压缩文件:
[root@localhost tmp]# zip etc /etc -rq
[root@localhost tmp]# ls -lh
总用量 13M
-rw-r--r--. 1 root root 13M 10月 23 12:35 etc.zip
不解压的状态下删除压缩包中的 adhtime 文件:
[root@localhost tmp]# zip etc.zip -d /etc/adjtime
deleting: etc/adjtime
创建文件 test.txt,并将其加到压缩包中,并使用 zipinfo 命令查看:
[root@localhost tmp]# touch test.txt
[root@localhost tmp]# zip etc.zip -g test.txt
adding: test.txt (stored 0%)
[root@localhost tmp]# zipinfo etc.zip | grep test.txt
-rw-r--r-- 3.0 unx 0 bx stor 19-Oct-23 04:47 test.txt
unzip 命令
常用选项:
-l:显示压缩文件内所包含的文件;-t:检查压缩文件是否正确;-v:查看压缩包内的内容,类似zipinfo命令的作用;-z:仅显示压缩文件的备注文字;-n:解压缩时不要覆盖原有的文件;-o:不必先询问用户,unzip执行后覆盖原有的文件;-d<目录>:指定文件解压缩后所要存储的目录;-Z:unzip-Z等于执行zipinfo指令;
示例:
从 etc.zip 中提取出后缀为 .sh 的文件到 /tmp/testsh 目录:
[root@localhost tmp]# unzip etc.zip *.sh -d /tmp/testsh
解压上面创建的 etc.zip 文件:
[root@localhost tmp]# unzip -q etc.zip
tar
tar 命令是 linux 常用的打包(归档)工具,即利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件。也可以在打包文件中改变文件,或者向打包文件中加入新的文件。
当然,tar 命令也可以解包。
首先要弄清两个概念:打包(归档)和压缩。
打包是指将一堆文件或目录变成一个总的文件;
压缩是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于 Linux 中很多压缩命令只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包,然后再用压缩程序进行压缩。
使用格式:
tar [options...] <new_file> [dest_files...]
new_file:创建的压缩文件名称;
dest_files:要归档的文件列表;
常用选项:
-A:新增归档文件到已经存在的归档中;-B:设置区块大小;-C:指定一个目录,如解压时指定则表示解压后的文件放到该目录;-c:建立新的压缩文件,即打包;-d:记录文件的差别;-r:添加文件到已经存在的归档中;-x:从压缩文件中提取文件,即解包;-f:指定要打包的文件;-t:显示归档文件的内容;-z:打包后使用 gzip 进行压缩;-j:打包后使用 bzip2 进行压缩;-J:打包后使用 xz 进行压缩;-v:显示操作过程;-k:保留原有文件不覆盖;
示例:
打包文件且不压缩:
[root@localhost test]# tar -cf test.tar my.cnf passwd
[root@localhost test]# ls -lh
总用量 20K
-rw-r--r--. 1 root root 570 10月 23 14:24 my.cnf
-rw-r--r--. 1 root root 909 10月 23 14:25 passwd
-rw-r--r--. 1 root root 10K 10月 23 14:25 test.tar
在
-f参数后面,跟的是归档的文件名。
习惯上,大家都用.tar来作为辨识。 如果加-z选项,则以.tar.gz或.tgz来代表使用 gzip 压缩过的 tar 包;如果加-j选项,则以.tar.bz2来作为 tar 包名。
打包文件且压缩:
[root@localhost test]# tar -zcf test.tar.gz my.cnf passwd
[root@localhost test]# ls -lh
总用量 12K
-rw-r--r--. 1 root root 570 10月 23 14:24 my.cnf
-rw-r--r--. 1 root root 909 10月 23 14:25 passwd
-rw-r--r--. 1 root root 852 10月 23 14:26 test.tar.gz
可以看出来,打包并压缩后的文件,比不压缩小了不少。
如果要使用 bzip2 压缩,将-z选项换成-j选项即可。
如果要查看打包文件中有哪些文件,有两种情况。
针对没有压缩过的文件,如 test.tar,直接执行如下命令即可:
tar -tvf test.tar
如果归档被 gzip 压缩过,如 test.tar.gz,需要带上选项 -z,如下:
tar -ztvf test.tar.gz
如果归档被 bzip2 压缩过,需要带上参数 -j,如下:
tar -jtvf test.tar.bz2
将 tar 文件解包时,如果 tar 文件没有被压缩,如 test.tar,直接执行如下命令:
tar -xvf test.tar
如果归档被 gzip 压缩过,如 test.tar.gz,需要带上参数 -z,如下:
tar -zxvf test.tar.gz
如果归档被 bzip2 压缩过,如 test.tar.bz2,需要带上参数 -j,如下:
tar -jxvf test.tar.bz2
评论区