>[success] # 压缩和解压 ~~~ 1.最早的linux 备份介质是磁带,使用的命令是tar 2.一般需要先打包后的磁带文件进行压缩储存,压缩名利是gzip 和 bzip2,当然也可以直接使用tar 3.常用的扩展名是'.tar.gz','tar.baz2' ,'.tgz' ~~~ >[danger] ##### 知道压缩之前要了解的 ~~~ 1.压缩指令有 'tar' ,'gzip','zip',其中'zip' 需要自己安装,这三种压缩的各自特点 1.1.'zip' 可以压缩文件或者文件目录,本质是压缩文件或目录,是一种压缩格式 1.2.'gzip' 压缩比'zip'的高,采用 LZ77 无损压缩算法,压缩后的文件一般使用 .gz 后缀。gzip 不 仅可以用来压缩大的、较少使用的文件以节省磁盘空间,减少文件大小有两个明显的好处, 一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。'问题是',gzip命令 不支持目录压缩 1.3.'tar',打包命令,只打包并不压缩,举个例子tar 可以把一个文件夹打包成一个文件,没有压缩 的功能 之前大小为100 打包后大于等于100,这样就可以和gzip 配置,gzip 只能打包文件就可以 先tar 在gzip,'tar -czf /tmp/etc-backup.tar.gz /etc' 压缩成'gz'的格式,加后缀方便使用的人知道 格式 ~~~ [参考链接](https://cloud.tencent.com/developer/article/1584446?from=article.detail.1376090) >[info] ## tar ~~~ 使用: '语法tar(选项)(参数)' 1.A或-- catenate:新增文件到以存在的备份文件; 2.B:设置区块大小; 3.c或-- create:建立新的备份文件; 4.C<目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。 5.d:记录文件的差别; 6.x或- extract或--get:从备份文件中还原文件 7.t或--list:列出备份文件的内容 8.z或-gzip或- unzip:通过gzip指令处理备份文件 9.Z或- compress!或- un compress:通过 compress指令处理备份文件 10.f<备份文件>或--file=<备份文件>:指定备份文件 11.v或-- verbose:显示指令执行过程; 12.r添加文件到已经压缩的文件u:添加改变了和现有的文件到已经存在的压缩文件;支持bzip2解压文件; 13u:添加改变了和现有的文件到已经存在的压缩文件 14.j:支持bzip2解压文件; 15.l:文件系统边界设置 16.k:保留原有文件不覆盖; 17.m:保留文件不被覆盖; 18.w:确认压缩文件的正确性p或--same- permIssIons:用原来的文件权限还原文件 19.P或-- absolute- names:文件名使用绝对名称,不移除文件名称前的“/〃号;不建议使用 20.N<日期格式>或-- newer三<日期时间>:只将较指定日期更新的文件保存到备份文件里; exclude<范本样式>:排除符合范本样式的文件。 21.h,-- dereference跟踪符号链接;将它们所指向的文件归档并输出 ~~~ >[danger] ##### 打包 -cvf 1. 打包理解成将衣服放到袋子里 2. 一般使用tar 打包后的文件我们最好以 **.tar** 结尾 注意后缀在linux 是无意义的并且也只是一个文件类型 3. 打包命令格式 | 命令 | 英文 |含义| | --- | --- |--- | | c | create | 生成档案文件, 创建打包文件| | v | verbosely | 报告进度| | f | file | 指定档案的文件名称, f后面一定是 .tar 文件, 所以必须放到最后 | ~~~ # 将 一系列文件 打包成 一个大文件 tar -cvf 打包名.tar 被打包的目录 tar -cvf 打包名.tar 被打包的文件1 被打包的文件2 被打包的文件3 ~~~ 4. 案例 ~~~ 'tar -cvf all.tar ./' -- 将当前目录文件打包到 all.tar ~~~ >[danger] ##### 解包-- xvf 1. 衣服从袋子里取出来过程理解成解包 2. 解包命令格式 |命令| 英文 |含义| | --- | --- |--- | |x |extract (提取) |解包| |C (大写C)|directory (目 录)|默认保存到当前目录, 通过 -C 更改解压目录, 注意: 解压目录必须存在| ~~~ # 将一个打包后的 分解成 一系列小文件, 分解位置为 当前目录 tar -xvf 打包名.tar # 将一个打包后的 分解成 一系列小文件, 分解位置为 指定目录 tar -xvf 打包名.tar -C 解包路径位置 ~~~ 3. 案例 ~~~ 1.例子'tar -xf /tmp/etc-backup.tar -C /root' 将'tmp 下的打包文件,解包到 /root'下,记得解包到哪里用-C, 2.'tar -xf /tmp/etc-backup.tar' 表示将解包的内容放到当前目录下 ~~~ >[danger] ##### 打包压缩 1. 类衣服放到压缩袋, 再抽取里面的空气,在 Linux 中, 最常用的压缩文件格式是**xxx.tar.gz**在 tar 命令中有一个选项 -z 可以调用 gzip , 从而可以方便的实现压缩和解压缩的功能 2. 指令格式 * gz 压缩 ~~~ # 压缩文件 tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录 # 解压缩文件 tar -zxvf 打包文件.tar.gz # 解压缩到指定路径 tar -zxvf 打包文件.tar.gz -C 目录路径 ~~~ * bz 压缩 ~~~ # 压缩文件 tar -jcvf 打包压缩文件名.tar.bz2 被压缩的文件/目录 # 解压缩文件 tar -jxvf 打包文件.tar.bz2 # 解压缩到指定路径 tar -jxvf 打包文件.tar.bz2 -C 目录路径 ~~~ 3. 常用参数 ~~~ 1.-z 是压缩成 gz 压缩格式 2.-j 是压缩成 bz2 的压缩格式 3.例子 : 3.1.'tar -czf /tmp/etc-backup.tar.gz /etc' 压缩成'gz'的格式,加后缀方便使用的人知道格式 3.2. 'tar -cjf /tmp/etc-backup.tar.bz2 /etc' 压缩成'bz2'的格式 4.bz2 格式压缩时间长但是体积小,'gz' 压缩时间短体积大 注: 上面的指令解释为把 /ect 下的文件打包并且压缩到 /tmp/etc-backup.*.*,这里命名方式也是为了告诉 其他人他们是被压缩了那种格式,并且被tar打包 ~~~ >[danger] ##### 列出备份文件的内容 -- t ~~~ 1.'tar -tvf all.tar' -- 针对打包文件显示里面的内容只要'tf' 配合 2.' tar -ztvf all.tar.gz' -- 针对指定压缩类型需要配置对应的类型参数例如这里配合'ztf' ~~~ >[danger] ##### 解压缩 ~~~ 1.tar -xjf all.tar.bz2 #解压.bz2的文件 2.和压缩同理有'z'和‘j' 两种格式。想指定文件目录就'-C',否则就是当前 ~~~ >[danger] ##### 解压或者解包中单某一条 ~~~ 1.' tar -zxvf all.tar.gz ./cutTest.txt' -- all.tar.gz 对应解压的包 ./cutTest.txt 对应包中的文件 ~~~ >[danger] ##### 排除某个不解压 ~~~ 注意-- exclude跟着文件名或是文件夹,不得加斜杠,排除多个文件,就写多个-- exclude tar -zXVf ./alltmp2. tar. gz --exclude data ~~~ >[danger] ##### 总结 1. 需要先打包在压缩,或者先解压在解包 ~~~ '打包压缩': tar -jcvf 打包之后的文件名.tar.bz2 被打包压缩的目录或文件名 '解包解压缩': tar -jxvf 打包之后的文件名.tar.bz2 [ -C 指定解包位置 ] ~~~ >[info] ## 其他压缩命令 ~~~ 1gzip 和 zip 命令 ~~~ >[danger] ##### zip 格式 * 压缩文件或目录,是一种压缩格式 | 功能 | 命令 | | --- | --- | | 压缩文件 | zip 压缩文件名.zip 源文件 | | 压缩目录 | zip -r 压缩目录名.zip 源目录 | | 解压 | unzip 压缩目录名.zip | ~~~ yum install -y unzip zip mkdir book touch book/1.txt touch book/2.txt zip -r book.zip book -- 将book 文件夹 压缩为book.zip rm -rf book/ rmdir book unzip book.zip ~~~ * 常用命令 ~~~ unzip test.zip ->将test.zip解压到当前文件下 unzip -n test.zip -d /tmp ->将test.zip解压到/tmp目录下,并且不要覆盖已有文件 unzip -v test.zip ->查看test.zip内容,但不解压 unzip -o test.zip -d tmp/ ->将test.zip解压到/tmp目录下,并且覆盖已有文件 ~~~ |选项 |描述| | --- | --- | |-c |将解压缩的结果显示到屏幕上,并对字符做适当的转换; | |-f |更新现有的文件; | |-l |显示压缩文件内所包含的文件; | |-p |与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换; | |-t | 检查压缩文件是否正确; | |-u |与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中; | |-v | 执行时显示详细的信息; | |-z |仅显示压缩文件的备注文字; | |-a | 对文本文件进行必要的字符转换; | |-b | 不要对文本文件进行字符转换; | |-C | 压缩文件中的文件名称区分大小写; | |-j | 不处理压缩文件中原有的目录路径; | |-L |将压缩文件中的全部文件名改为小写; | |-M | 将输出结果送到more程序处理; | |-n |解压缩时不要覆盖原有的文件; | |-o |不必先询问用户,unzip执行后覆盖原有的文件; | |-P |<密码> 使用zip的密码选项; | |-q |执行时不显示任何信息; | |-s | 将文件名中的空白字符转换为底线字符; | |-V | 保留VMS的文件版本信息; | |-X | 解压缩时同时回存文件原来的UID/GID; | |-d<目录> | 指定文件解压缩后所要存储的目录; | |-x<文件> |指定不要处理.zip压缩文件中的哪些文件; | |-Z |unzip-Z等于执行zipinfo指令。 | * 备注解释关于压缩文件和目录 现在有一个下面目录的结构a文件下有a.txt 和 b文件,b下有b.txt a ├── a.txt └── b └── b.txt 压缩文件效果是压缩后的包只有 a b 文件夹 并不存在 a.txt b.txt 这类非文件夹 压缩目录是所有内容都会存在 >[danger] ##### gzip * gzip为高压,可以把文件压缩得更小 * gzip命令不支持目录 | 命令 | 示例 | 含义 | | --- | --- | --- | | gzip 源文件 | gzip book.txt | 压缩为.gz格式的压缩文件,源文件会消失 | | gzip -c 源文件 > 压缩文件 | gzip -c book.txt > book.txt.gz | 压缩为.gz格式的压缩文件,源文件不会消失 | | gzip -r 目录 | gzip -r book | 把目录下的每个子文件都变成压缩包,并删除原文件,当前目录无变化 | | gzip -d 压缩文件名 | gzip -d 1.txt.gz | 解压缩文件,不保留压缩包 | | gunzip 压缩文件 | gunzip 2.txt.gz | 解压缩文件,也不保留压缩包 | * 压缩是压缩目录下的文件 ~~~ touch book.txt mkdir book touch book/1.txt touch book/2.txt gzip book.txt //源文件会消失 gzip -c 1.txt > 1.txt.gz //源文件不消失 gzip book.txt //压缩为.gz格式文件,源文件会消失 gzip -r book //把目录下的每个子文件都变成压缩包 cd book gzip -d 1.txt.gz //解压缩文件,不保留压缩包 gunzip 2.txt.gz ~~~