压缩解压缩的命令选项令我晕眩,这一章刷了几遍,可算是书读百遍其意自现了,如果你也遇到学习瓶颈,那就先放下来,去读读别的,时不时的再来攻破,也许会有奇效。
关于压缩文件的类型,指令,选项,的汇总。
压缩命令概览表:
|------------|----------------|------------------|-----------------------------------------------------------------------------------------------------------------|---------------------------------------|
| 后缀 | 格式 | 功能介绍 | 选项【option】 ||
| *.Z | compress | 退流了,不介绍了。gzip可以兼容; |||
| *.zip | zip | 可压缩文件及目录 | none:无选项; -r :递归处理,压缩目录及其下所有文件和子目录; -#:0~9压缩等级; -u:向压缩包内更新文件; -d:删除压缩包内指定文件; -z:给压缩包加注释; -T:检查压缩包一致性; -q:静默模式,不输出过程; -m :压缩完成,删除源文件; ||
| *.zip | unzip | - | none:无选项; -l:查看包内内容列表; -p:不解压查看包内指定文件内容; -o:强制覆盖; -d:指定路径解压; -t:测试压缩包一致性; -q:静默模式; -O UTF-8:解决中文文件名乱码; -j:平铺解压; | |
| | | | 共性 | 特有 |
| *.gz | gzip | 仅压缩文件 | -c:将压缩数据输出到屏幕,通过导流可以自定义压缩文件名; -d:解压缩; -t:检测一致性,是否有损坏; -v:压缩时输出压缩比; -#:压缩比-1~-9,默认为-6; -k:保留源文件; -l:列出信息; | -r:递归压缩,压缩目录内的文件,不是压缩目录,需要tar打包后才能压缩; |
| *.bz2 | bzip2 | 仅压缩文件 | -c:将压缩数据输出到屏幕,通过导流可以自定义压缩文件名; -d:解压缩; -t:检测一致性,是否有损坏; -v:压缩时输出压缩比; -#:压缩比-1~-9,默认为-6; -k:保留源文件; -l:列出信息; | -f:强制覆盖已存在的压缩包; |
| *.xz | xz | 仅压缩文件 | -c:将压缩数据输出到屏幕,通过导流可以自定义压缩文件名; -d:解压缩; -t:检测一致性,是否有损坏; -v:压缩时输出压缩比; -#:压缩比-1~-9,默认为-6; -k:保留源文件; -l:列出信息; | -T:指定线程; |
| 以上三个压缩包内文件的查看 ||| gzip:zcat/zmore//zless/zgrep; bzip2:bzcat/bzmore/bzless/bzgrep; xz:xzcat/xzmore/xzless/xzgrep; ||
| *.tar | tar打包 | 打包文件及目录为*.tar文件 | -c:打包; -t:查看; -x:解包; -v:可视,打包时,输出打包文件。查看时,输出文件的权限。 -f:这个后面跟的是压缩包的输出路径和压缩包名; -C:解压缩时使用,解压到指定目录下; -p:保留文件权限与属性,常用于备份; -P:保留绝对路径,就是包含根目录; z:以gzip的格式压缩,命名:*.tar.gz; j:以bzip2的格式压缩,命名:*.tar.bz2; J:以xz的格式压缩,命名:*.tar.xz; ||
| *.tar.gz | tar打包压缩gzip格式 | 将打包文件压缩 | -c:打包; -t:查看; -x:解包; -v:可视,打包时,输出打包文件。查看时,输出文件的权限。 -f:这个后面跟的是压缩包的输出路径和压缩包名; -C:解压缩时使用,解压到指定目录下; -p:保留文件权限与属性,常用于备份; -P:保留绝对路径,就是包含根目录; z:以gzip的格式压缩,命名:*.tar.gz; j:以bzip2的格式压缩,命名:*.tar.bz2; J:以xz的格式压缩,命名:*.tar.xz; ||
| *.tar.bz2 | tar打包压缩bzip2格式 | 将打包文件压缩 | -c:打包; -t:查看; -x:解包; -v:可视,打包时,输出打包文件。查看时,输出文件的权限。 -f:这个后面跟的是压缩包的输出路径和压缩包名; -C:解压缩时使用,解压到指定目录下; -p:保留文件权限与属性,常用于备份; -P:保留绝对路径,就是包含根目录; z:以gzip的格式压缩,命名:*.tar.gz; j:以bzip2的格式压缩,命名:*.tar.bz2; J:以xz的格式压缩,命名:*.tar.xz; ||
| *.tar.xz | tar打包压缩xz压缩格式 | 将打包文件压缩 | -c:打包; -t:查看; -x:解包; -v:可视,打包时,输出打包文件。查看时,输出文件的权限。 -f:这个后面跟的是压缩包的输出路径和压缩包名; -C:解压缩时使用,解压到指定目录下; -p:保留文件权限与属性,常用于备份; -P:保留绝对路径,就是包含根目录; z:以gzip的格式压缩,命名:*.tar.gz; j:以bzip2的格式压缩,命名:*.tar.bz2; J:以xz的格式压缩,命名:*.tar.xz; ||
zip文件/目录压缩:zip 【选项】 压缩包名.zip 源文件/目录
书中并没有讲zip的压缩,但是我觉得这个压缩格式兼容性和使用范围都挺广的,还是自己整理一下吧。
明确两个事:
1.zip与其他三种压缩格式顺序有所不同;
2.在不使用选项的情况下,压缩后不会删除源文件,但是其他三个会;
我们先在练习目录下创建一个练习目录,【mkdir practice_zip #创建目录】,进入目录后,我们来找一个文件做压缩练习,
【ls -lhdSr /etc/*
#ls 列出内容;
-l 长列表形式;
-h 以易读的容量显示容量;
-d 不展开目录;
-S 大写S,将列出的内容以从大到小的顺序排列;
-r 倒序排列;
* 通配符,这里的意思是现实出etc下的所有文件和目录】

这样比较容易找到最大那个文件或目录,zip这个命令可以压缩文件,也可以压缩目录,甚至可以混合压缩,但是我们先练习对文件的压缩,后续再说目录的事,我们将最大那个文件复制到我们的练习目录,【cp mime.tyes .#cp复制命令;复制到当前所以.即可】,然后我们来用zip命令压缩它。
无选项压缩:zip name.zip 文件/目录
【zip mime_none.zip mime.types #zip的格式:先压缩文件名(自定义文件名),后为源文件(被压缩的文件);】

Zip压缩完车回返回压缩比,这样压缩就完成了。
选项-r:递归压缩,可以压缩目录及其下的文件和目录/文件
我们把图片这个目录复制到练习文件夹【cp -r /home/haifeng/图片 ./pic # -r递归复制,用于目录复制;】,

压缩【zip -r picDir_r.zip pic # 一定不要忘记-r,递归压缩】。
我们来看看压缩前后的差异,
【du -hs pic*#du查看目录容量;
-h容量以易读方式显示;
-s只显示目录,不展开;
pic*:以pic开头的文件;】,


我们看到还是有效果的,虽然效果一般。
-# (0~9):压缩级别设定
- -0:仅打包,不压缩;
- -9:压缩率最高。(时间也越长,后同);
- 默认为-6;
【zip -r -9 picDir_r9.zip pic # 这里使用了最大压缩级别】


查看并没有比多压缩什么,估计是本身就不大,所以体现不出来。
这里提醒下各位,尽量用英文命名目录或文件,要不然总是切换输入法,真的好麻烦。
-u:向压缩包添加新文件或更新修改文件
这里必须先引入
- 【unzip -l 压缩文件.zip # 在不解压的情况下,列出压缩包内内容列表】;
- 【unzip -p 压缩文件.zip 路径/文件 # 在不解压缩的情况下查看文件内容】
创建三个test的txt文件:
【echo "file1 content" > test1.txt# echo输出命令,使用>可以将内容输入到文件内,没有此文件就创建】 这里需要注意的是,> 是覆盖是添加内容,>> 是在末尾换行添加内容。
【echo "file2 content" > test2.txt 】
【echo "file3 content" > test3.txt 】

打包三个文件【zip testFile.zip test1.txt test2.txt test3.txt】
【unzip -l testFile.zip # 查看压缩包内内容列表】
【unzip -p testFile.zip # 我这里没有加指定文件,它会输出所有文件内容,是个失误,大家注意下,如果压缩包内内容过多,那就比较麻烦了,当然你可以ctl+c中止一下】
应该写成【unzip -p testFile.zip test1.txt# 查看压缩包内test1.txt的内容】

【echo "update content" >> test1.txt# 将内容追加到test1.txt内;】

将压缩包内test1.txt内容更新
【zip -u testFile.zip test1.txt# -u选项可以在不重新压缩的情况下,将已含的文件更新】
注意:test1.txt可以更换为压缩包内的路径去指定文件,例如,【zip -u name.zip dir/abc/1.txt】;
查看更新内容,
【unzip -p testFile.zip test1.txt】

下面这步,等-d选项过了再回来看:
这个-u还可以给压缩包指定文件压进去,在下面的-d选项中我们删除了**test2.txt,**我们现在回过头来把test2.txt给添加进去。
【zip -u testFile.zip test2.txt】
【unzip -l testFile.zip】查看一下test2.txt时不是回去了。

-d:删除压缩包内指定文件
删除压缩包内某个文件
【zip -d testFile.zip test2.txt# -d选项可以在不解压缩的情况下,删除压缩包内指定文件】
查看压缩包内文件内容
【zip -l testFile.zip # -l选项可以在不解压缩的情况下查看压缩包内内容列表】

-z:给压缩包做注释
这个命令要搭配【unzip -z】在不解压缩的情况下仅查看注释。
【zip -z testFile.zip】这个命令会跳转交互,输入(以.为结束)完毕后,【ctrl + d】退出;
【unzip -z testFile.zip】查看注释;

不演示的选项:
-T:检查压缩包是否损坏
-q:静默模式,不输出过程,-Tq只在有错误时输出
-m:压缩后删除源文件。
以上三个不掩饰了。
unzip解压缩及选项:unzip 【选项】【压缩包】【-d】【路径】
unzip 无选项 压缩包.zip:解压到当前目录
无选项直接使用,解压到当前目录,且解压缩命令,不会在解压完成删除压缩包。
由于解压缩文件与当前目录内文件相同,解压出来有覆盖问题,我们在练习最好再建一个目录
- 【mkdir testUnzip】
- 【cp testFile.zip testUnzip 】
- 这个testUnzip这个目录根据实际需求建立即可,不用纠结位置,只是你要知道复制zip包时,不要写错路径就好。
- 【cd testUnzip】进入testUnzip这个目录再测试unzip,
【unzip testFile.zip】

-l选项:显示包内内容列表
这个之前就用过了。
【unzip -l testFile.zip】

-p选项:不解压查看包内文件内容
【inzip -p testFile.zip test1.txt】

-o选项:强制覆盖现有文件
刚刚解压了testFile.zip,再解压会有提示,【unzip testFile.zip】,这时会进入交互,问你如何处理,

【unzip -o testFile.zip】就直接覆盖了。

-u选项:仅解压压缩包内比目录内新的文件(增量解压)
【zip -u 】是更新包内文件,【unzip -u】是更新目录内文件,如果目录内文件比较新,那就不更新,如果缺失就补上,如果,目录内文件旧的话就更新为包内文件。
- 【rm test3.txt】删除一个文件,一会儿增量解压,看看会不会补回来;
- 【echo "我更新,我不会被覆盖" >> test1.txt 】更新了test1.txt看看会不会被覆盖;
- 【unzip -u testFile.zip】增量解压;
- 【cat test1.txt】查看test1.txt情况;
- 【ls】查看test3.txt回来没;

-d选项:解压到指定目录
这个选项有个指定位置,在压缩包后,指定路径前。路径的目录不存在,它会自动建。
- 【unzip testFile.zip -d ./mydir # 指定到当前目录中】目录mydir并不存在;
- 【ls -R# -R会展开目录】查看文件及目录下文件;

-t选项:测试压缩包完整性
【unzip -t testFile.zip】这个命令zip也有,不过时大写的-T。

其他不演示选项:
-q:静默模式,不显示过程;
-O UTF-8:中文文件名乱码问题;
-j:平铺解压,忽略目录结构,将所有文件解压到一个目录内;
gzip/bzip2/xz的共性选项及功能:gzip/bzip2/xz 【选项】【源文件】
这三个压缩指令的排列顺序相同,且有共通的选项,所以这里和列表对照,分为共性和特有两部分来演示,说到这,就是我看到书上介绍它们三个时,着实头大,因为有相同的,但是前后介绍,选项排列还不同,迷糊了好久。
还有他们都是对文件的压缩,目录,或多文件要利用【tar】这个打包指令来实现,别急,先把他们三个弄懂了,再结合【tar】来打包不迟。
差别与共通:
- 压缩比由低到高:gzip < bzip2 < xz;
- 压缩时间有短到长:gzip < bzip2 < xz;
- 有共通的命令排列方式;
- 有共通的选项;
所以,在演示的时候,共通的选项就不一一列举了,统一为gzip来演示。
无选项:gzip 【文件名】
我在我的练习目录下复制了一份mime.types这个文件,
【gzip mime.types】,看下效果:
【ll -hs mime.types.gz ../mime.types# ll即为ls -l,-h是易读单位,-s是在左侧输出文件大小】

-c选项:输出压缩信息到屏幕
这个选项多用【>】导向符号来倒入到文件,这个文件自己命名即可,就是自定义一个压缩文件名,这个文件不用提前存在,命令会自己创建。
其实光输出也是可以的,就是没什么用,也看不懂,

接下来,【gzip -c mime.types > mime.types_c.gz】
- 使用-c选项后不会删除源文件;
- 重新命名后解压出来也是你命名的文件名,例如mime.types_c.gz解压出来就是mime.types_c了。

-d选项:解压缩【gzip -d 压缩包】
解压到当前目录:【gzip -d mime.pytes_c.gz】

-t选项:检测一致性
无错误不返回。

-v选项:压缩时输出压缩比
【gzip -v mime.types】

-#选项:压缩比选择1~9
【gzip -9 -c mime.types > mime.types_9c.gz】
查看后,并没有什么区别,我这也没有什么的太大的文件,所以,看不出来正常。


-k选项:保留源文件【gzip -k 文件名】
其实使用-c就达到这个目的了,【gzip -k mime.types】,【ls】查看源文件还在不。

-l选项:列出压缩包信息【gzip -l 压缩包名】
【gzip -l mime.types_c.gz】

不做演示选项:
- gzip -r:它是递归压缩目录里的文件,并非压缩目录,需要tar来打包后压缩;
- xz -T:多核cup可设置提速,但是默认最身心;
- xz -f:无论压缩或解压都可用,强制都是省略交互提示的覆盖或错误。
- 压缩强制:压缩后有同名压缩包直接覆盖;
- 解压缩:解压缩后有同名文件直接覆盖;
gzip/bzip2/xz的压缩文件查看:
gzip的压缩文件查看:zcat/zless/zmore/zgrep
这里zcat、zmore和zless差不多,由于文件不大,就以zcat为例了。
zcat文件查看:
【zcat mime.types.gz】

zgrep筛选关键词:
【zgrep -n "part" mime.types**# -n显示行号;**】

bizp2的压缩文件查看:bzcat/bzmore/bzless/bzgrep 【压缩包】
我们先得到一个bzip2的压缩包,然后查看:
【bzip2 -k mime.types # -k:保留源文件;】
【ls#查看下包名;】
【bzcat mime.types.bz2】

xz的压缩文件查看:xzcat/xzmore/xzless/xzgrep 【压缩包】
我们先得到一个bzip2的压缩包,然后查看:
【xz -k mime.types # -k:保留源文件;】
【ls#查看下包名;】
【xzbzcat mime.types.xz】

tar:打包功能介绍
仅打包:tar -cv -f 【路径/name.tar】【源文件】
仅打包的【-f】选项要单独最后区分出来,因为它的顺序不能乱,f后面紧跟着路径/包名或者直接根包名,区别是前者输出到你要输出的位置,后者输出到当前位置;
我们先创建一个tar 的目录,在这里将**/etc**打包。
- 【mkdir tar】,【cd tar】创建并进入目录;
- 【du -hs /etc# du查看目录容量,-h易读方式,-s不展开目录;】
- 【tar -cv -f etc_cv.tar /etc # -c打包,-v可视,即向屏幕输出打包的文件名,-f后紧跟打包文件名;】
- 【tar -tv -f etc_cv.tar# -t查看,-v显示权限与属性,不加不显示,-f紧跟包名;】



解包:tar -xv -f 【包.tar】/-C 【path】
-C不加,就是解开到当前目录,加上就是指定目录。为了一次演示完整,我们解压到上级目录里。
【tar -xv -f etc_cv.tar -C ../****# -x 解包,-v 可视,-f紧跟包名,-C(大写)指定目录】

我这里没有截全图,只是跳转后,看的容量。
打包且压缩:tar 【-zjJ】【-ctx】【-v】【-f *.tar.(gz/bz2/xz)】-C
这里面涉及的内容还是不少的,标题并不能代表全部。
tar我刚接触时有点蒙,选项太多,我归了一下类,
1.前两个选项【-zjJ】和【-ctx】中各选一个,也仅能各选一个,前面的时压缩格式,后面的时打包、查看、解包。
【-zjJ】:-z:gzip;
-j:bzip2;
-J:xz
【-ctx】:-c:打包;
-t:查看;
-x:解包;
2.【-v】:当打包和解包时,它就是屏幕输出打包或解包的文件,可不加;
当查看包内内容时,加上就显示权限和属性,不加不显示;
这次我们一口气将三个形式的压缩格式都做了。刚好前面解压的etc在上级目录,就都打包压缩它了。
- gzip:【tar -zcv -f etc_zcv.tar.gz ../etc #自己标注一下,有助于记住】;
- bzip2:【tar -jcv -f etc_zcv.tar.bz2 ../etc #自己标注一下,有助于记住】;
- xz:【tar -Jcv -f etc_zcv.tar.xz ../etc #自己标注一下,有助于记住】;
然后我们来查看下这三个包的区别【ll -hd】;


看到了xz的容量最小,当然它用的时间也相对多。
--exclude="file/dir"排除文件或目录
它可以在压缩过程中排除掉一些不想压缩进包的文件或目录。
【tar -zcv -f pratice_zip_zc.tar.gz --exclude="/home/haifeng/文档/Linux/pratice_zip/tar" --exclude="/home/haifeng/文档/Linux/pratice_zip/test1.txt" /home/haifeng/文档/Linux/pratice_zip/ # 我们使用了gzip的压缩格式来打包了我们的练习目录,当中排除了我们现在练习的tar目录】
-v输出时,为imen可以查看一下,是否排除了tar和test1.txt,一会儿我们使用查看功能来查看验证一下。这里我们排除的时**/home/haifeng/文档/Linux/pratice_zip/目录下的test1.txt文件。**

查看:【tar -ctv -f 包名】
【tar -ztv -f pratice_zip_zcv.tar.gz】
【tar -zt -f pratice_zip_zcv.tar.gz】
直接看下区别:


查看部分文件或目录:【tar -ztv -f 包名 [指定文件或目录]】
【tar -ztv -f pratice_zip_zc.tar.gz home/haifeng/文档/Linux/pratice_zip/test2.txt #查看单一文件,由于打包压缩时去掉了根,所以起始也应该以home】
【tar -ztv -f pratice_zip_zc.tar.gz home/haifeng/文档/Linux/pratice_zip/****# 查看目录下的文件】
这里查看的彼非文件的内容,而是文件本身,要想查看文件内内容,请继续往下看。



这三章图,两个命令,演示了加v和不加的区别。
选项【-O】将查看文件内容输出到屏幕
两种方式:一种【-O】写在前面,另一种,写在后面,要记得一个口令,不会写错命令:提取加输出和先提取再输出,这个提取指的就是要用【-x】而不是【-t】选项。
- 【tar -zx-f pratice_zip_zcv.tar.gz home/haifeng/文档/Linux/pratice_zip/zip/testUnzip/mydir/test1.txt -O】
- 【tar -zxO -f pratice_zip_zcv.tar.gz home/haifeng/文档/Linux/pratice_zip/zip/testUnzip/mydir/test1.txt】
关于【-p】和【-P】:
小写的【-p】是保留权限与属性,备份时常用,加进去即可,否则还原时会麻烦,因为权限,所属权限及属性都发生了改变
大写的【-P】保留绝对路径,这个一般情况下都不要用,你保存绝对路径后,解压时,会直接覆盖里的原有路径文件,如果你打包的是根目录,那你的系统就会还原成你打包时的样子了。
这章终于更完了,边理解,边实践再加写笔记,我沉浸其中,就是还是有些拖拉的,但是总体完成了就好,好多资料查找,验证,对于新手来说还真的是不太友好,最近ai总出错,还要自己筛选答案,大家鼓励鼓励点赞关注法,觉得有用就收藏,谢谢。
下章主要是备份和还原,请期待。