常见的归档压缩工具
-
- 概述
-
-
- gzip命令
- bzip2命令
- zip命令
- tar命令
- cpio命令
- 典型案例
-
概述
无论是在Linux操作系统还是Windows操作系统里压缩文件节省空间总是必不可少的一项操作,因为这样不仅可以节省磁盘空间,更可以在上传文件时节省所耗资源。而Linux系统常用的归档压缩命令常有:tar,cpio,gzip,bzip2,zip等。
gzip命令
gzip可以用来压缩大的、较少使用的文件以节省磁盘空间,是Linux系统中常用的一个压缩和解压缩的命令;Linux操作系统中比较流行的压缩文件格式就是由gzip命令和tar命令一起构成。
语法:gzip 【参数】【目标文件或目录】> 【打包后的文件.gz】
参数 | 功能 |
---|---|
-a | 使用ASCII文字模式 |
-c | 把压缩后的文件输出到标准输出设备,不去更动原始文件 |
-d | 解开压缩文件 |
-f | 强行压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接 |
-h | 在线帮助 |
-l | 列出压缩文件的相关信息 |
-L | 显示版本与版权信息 |
-n | 压缩文件时,不保存原来的文件名称及时间戳记 |
-N | 压缩文件时,保存原来的文件名称及时间戳记 |
-q | 不显示警告信息 |
-r | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-S<压缩字尾字符串> | 更改压缩字尾字符串 |
-t | 测试压缩文件是否正确无误 |
-v | 显示指令执行过程 |
-V | 显示版本信息 |
示例:
简单利用gzip命令来压缩文件,并尝试解压
[email protected]:~/Desktop/Text$ ls
homework practice shell yasuo ys.tar.zip
[email protected]chine:~/Desktop/Text$ gzip -c homework > homework.gz
[email protected]:~/Desktop/Text$ ls
homework homework.gz practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ mv homework ./practice/
[email protected]:~/Desktop/Text$ ls
homework.gz practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ gzip -d homework.gz
[email protected]:~/Desktop/Text$ ls
homework practice shell yasuo ys.tar.zip
图例:

bzip2命令
bzip2命令采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩算法要优秀不少。bzip2命令压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
语法:bzip2 【参数】【文件或目录】
参数 | 功能 |
---|---|
-c | 将压缩与解压缩的结果送到标准输出 |
-d | 执行解压缩 |
-f | bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数 |
-h | 显示帮助 |
-k | bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数 |
-s | 降低程序执行时内存的使用量 |
-t | 测试.bz2压缩文件的完整性 |
-v | 压缩或解压缩文件时,显示详细的信息 |
-z | 强制执行压缩 |
-V | 显示版本信息 |
示例:
1.首先尝试-k命令(即不删除源文件)压缩,然后解压
[email protected]:~/Desktop/Text$ ls
homework practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ bzip2 -k homework
[email protected]:~/Desktop/Text$ ls
homework homework.bz2 practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ mv homework ./practice/
[email protected]:~/Desktop/Text$ bzip2 -d homework.bz2
[email protected]:~/Desktop/Text$
图示:
2.接下来尝试删除源文件压缩
[email protected]:~/Desktop/Text$ ls
homework practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$ bzip2 homework
[email protected]:~/Desktop/Text$ ls
homework.bz2 practice shell yasuo ys.tar.zip
[email protected]:~/Desktop/Text$
图示:
zip命令
zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件;zip命令拥有打包压缩功能(即将目标目录下所有文件打包压缩为新文件)。
语法:zip 【参数】 【打包后的文件.zip】 【目标文件或目录】
参数 | 功能 |
---|---|
-A 调整可执行的自动解压缩文件 | |
-b【目录 | 指定目录存放压缩文件 |
-c | 替每个被压缩的文件加上注释 |
-d | 从压缩文件内删除指定的文件 |
-D | 压缩文件内不建立目录名称 |
-F | 尝试修复已损坏的压缩文件 |
-g | 将文件压缩后附加在原有的压缩文件后 |
-i【样式】 | 只压缩符合条件的文件 |
-j | 只保存文件名称及其内容,而不存放任何目录名称 |
-J | 删除压缩文件前面不必要的数据 |
-k | 使用MS-DOS兼容格式的文件名称 |
-L | 显示版权信息 |
-m | 将文件压缩并加入压缩文件后,删除原始文件 |
-n【字符串】 | 不压缩具有指定字符串的文件 |
-o | 以压缩文件内拥有最新更改时间的文件为准 |
-q | 不显示指令执行过程 |
-r | 递归处理 |
-S | 包含系统和隐藏文件 |
-t【时间】 | 把压缩文件的日期设成指定的日期 |
-T | 检查备份文件内的每个文件是否正确 |
-u | 更换较新的文件到压缩文件内 |
-v | 显示指令执行过程 |
-w | 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效 |
-x【样式】 | 压缩时排除符合条件的文件 |
-X | 不保存额外的文件属性 |
-z | 给压缩文件加注释 |
示例:
1.通过zip命令压缩上级目录下的shell目录下的所有文件
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa
[email protected]:~/Desktop/Text/practice$ zip -r shell.zip ../shell
adding: ../shell/ (stored 0%)
adding: ../shell/shell2 (deflated 19%)
adding: ../shell/shell1 (deflated 16%)
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell.zip
2.利用unzip命令解压,查看命令执行情况
[email protected]:~/Desktop/Text/practice$ unzip shell.zip
Archive: shell.zip
warning: skipped "../" path component(s) in ../shell/
creating: shell/
warning: skipped "../" path component(s) in ../shell/shell2
inflating: shell/shell2
warning: skipped "../" path component(s) in ../shell/shell1
inflating: shell/shell1
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.zip
[email protected]:~/Desktop/Text/practice$ cd shell/
[email protected]:~/Desktop/Text/practice/shell$ ls
shell1 shell2
[email protected]:~/Desktop/Text/practice/shell$
图例:
tar命令
tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件,经常同其他压缩命令连用。
语法:tar 【参数】【打包后的文件】 【原文件】
参数 | 功能 |
---|---|
-A | 新增文件到已存在的备份文件 |
-b【区块数目】 | 设置每笔记录的区块数目,每个区块大小为12Bytes |
-B | 读取数据时重设区块大小 |
-c | 建立新的备份文件 |
-C【目的目录】 | 切换到指定的目录 |
-d | 对比备份文件内和文件系统上的文件的差异 |
-f【备份文件】 | 指定备份文件 |
-F【Script文件】 | 每次更换磁带时,就执行指定的Script文件 |
-g | 处理GNU格式的大量备份 |
-G | 处理旧的GNU格式的大量备份 |
-h | 不建立符号连接,直接复制该连接所指向的原始文件 |
-i | 忽略备份文件中的0 Byte区块,也就是EOF |
-k | 解开备份文件时,不覆盖已有的文件 |
-K【文件】 | 从指定的文件开始还原 |
-l | 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制 |
-L【媒体容量】 | 设置存放每体的容量,单位以1024 Bytes计算 |
-m | 还原文件时,不变更文件的更改时间 |
-M | 在建立,还原备份文件或列出其中的内容时,采用多卷册模式 |
-N | 只将较指定日期更新的文件保存到备份文件里 |
-o | 将资料写入备份文件时使用V7格式 |
-O | 把从备份文件里还原的文件输出到标准输出设备 |
-p | 用原来的文件权限还原文件 |
-P | 文件名使用绝对名称,不移除文件名称前的"/"号 |
-r | 新增文件到已存在的备份文件的结尾部分 |
-R | 列出每个信息在备份文件中的区块编号 |
-s | 还原文件的顺序和备份文件内的存放顺序相同 |
-S | 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件 |
-t | 列出备份文件的内容 |
-T【范本文件】 | 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件 |
-u | 仅置换较备份文件内的文件更新的文件 |
-U | 解开压缩文件还原文件之前,先解除文件的连接 |
-v | 显示指令执行过程 |
-V【卷册名称】 | 建立使用指定的卷册名称的备份文件 |
-w | 遭遇问题时先询问用户 |
-W | 写入备份文件后,确认文件正确无误 |
-x | 从备份文件中还原文件 |
-X【范本文件】 | 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件 |
-z | 通过gzip指令处理备份文件 |
-Z | 通过compress指令处理备份文件 |
示例:
1.简单的打包操作,将所属两个文件打包成一个
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.zip
[email protected]:~/Desktop/Text/practice$ tar -cf shell.tar shell shell.zip
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.tar shell.zip
[email protected]:~/Desktop/Text/practice$
图例:
2.查看打包内容
[email protected]:~/Desktop/Text/practice$ tar -tvf shell.tar
drwxr-xr-x liuyan/liuyan 0 2020-02-29 16:37 shell/
-rwxr--r-- liuyan/liuyan 163 2020-02-29 16:37 shell/shell2
-rwxr--r-- liuyan/liuyan 172 2020-02-29 16:27 shell/shell1
-rw-rw-r-- liuyan/liuyan 760 2020-03-09 21:55 shell.zip
[email protected]:~/Desktop/Text/practice$
图例:
3.简单解压操作
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell.tar
[email protected]:~/Desktop/Text/practice$ tar -xvf shell.tar
shell/
shell/shell2
shell/shell1
shell.zip
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.tar shell.zip
图例:
cpio命令
- cpio 可以从 cpio 或 tar 格式的归档包中存入和读取文件, 归档包是一种包含其他文件和有关信息的文件。( 有关信息包括:文件名, 属主, 时标(timestamp), 和访问权限) 归档包可以是磁盘上的 其他文件, 也可以是磁带或管道。*
语法:cpio 【参数】 【操作符(视操作而定)】 【文件名】
参数 | 功能 |
---|---|
-0 | 接受新增列控制字符,通常配合find指令的"-print0"参数使用 |
-a | 重新设置文件的存取时间 |
-A | 附加到已存在的备份档中,且这个备份档必须存放在磁盘上,而不能放置于磁带机里 |
-b | 此参数的效果和同时指定"-sS"参数相同 |
-B | 将输入/输出的区块大小改成5210 Bytes |
-c | 使用旧ASCII备份格式 |
-C【区块大小】 | 设置输入/输出的区块大小,单位是Byte |
-d | 如有需要cpio会自行建立目录 |
-E【范本文件】 | 指定范本文件 |
-f | 让cpio解开所有不符合范本条件的文件 |
-F【备份档】 | 指定备份档的名称 |
-H【备份格式】 | 指定备份时欲使用的文件格式 |
-i | 执行copy-in模式,还原备份档 |
-l【备份档】 | 指定备份档的名称 |
-l | 以硬连接的方式取代复制文件,可在copy-pass模式下运用 |
-L | 不建立符号连接,直接复制该连接所指向的原始文件 |
-m | 不去更换文件的更改时间 |
-M【回传信息】 | 设置更换保存媒体的信息 |
-n | 使用"-tv"参数列出备份档的内容时,若再加上参数"-n",则会以用户识别码和群组识别码替代拥有者和群组名称列出文件清单 |
-o | 执行copy-out模式,建立备份档 |
-O【备份档】 | 指定备份档的名称 |
- | p |
-r | 当有文件名称需要更动时,采用互动模式 |
-s | 交换每对字节的内容 |
-S | 交换每半个字节的内容 |
-t | 将输入的内容呈现出来 |
-u | 置换所有文件,不论日期时间的新旧与否,皆不予询问而直接覆盖 |
-v | 详细显示指令的执行过程 |
-V | 执行指令时,在每个文件的执行程序前面加上"."号 |
示例:
1.简单的备份操作
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa shell shell.tar shell.zip
[email protected]:~/Desktop/Text/practice$ ls |cpio -ov > ./practice.cpio
55
555
aa
cpio: File practice.cpio grew, 512 new bytes not copied
practice.cpio
shell
shell.tar
shell.zip
24 blocks
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa practice.cpio shell shell.tar shell.zip
图例:
2.将其他文件删除,解压备份文件查看命令执行情况
[email protected]:~/Desktop/Text/practice$ rm -rf 55 555 aa shell shell.tar shell.zip
[email protected]:~/Desktop/Text/practice$ ls
practice.cpio
[email protected]:~/Desktop/Text/practice$ cpio -ivd < practice.cpio
55
555
aa
cpio: practice.cpio not created: newer or same age version exists
practice.cpio
shell
shell.tar
shell.zip
24 blocks
[email protected]:~/Desktop/Text/practice$ ls
55 555 aa practice.cpio shell shell.tar shell.zip
图例:
典型案例
将某文件备份命名采用文件名+日期+tar+zip
原理:首先利用find命令查找文件,然后利用xargs收集文件,再利用tar命令打包,最后利用cpio命令备份命名
[email protected]:~/Desktop/Text$ find ./practice/* |xargs tar -jcf |cpio -ov > ./practice$(date +%F).tar.zip
1 block
[email protected]:~/Desktop/Text$ ls
practice practice2020-03-09.tar.zip shell test
[email protected]:~/Desktop/Text$