Linux学习笔记:十八、Linux文件的压缩,解压缩一站式学习

压缩解压缩的命令选项令我晕眩,这一章刷了几遍,可算是书读百遍其意自现了,如果你也遇到学习瓶颈,那就先放下来,去读读别的,时不时的再来攻破,也许会有奇效。

关于压缩文件的类型,指令,选项,的汇总。

压缩命令概览表:

|------------|----------------|------------------|-----------------------------------------------------------------------------------------------------------------|---------------------------------------|
| 后缀 | 格式 | 功能介绍 | 选项【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:向压缩包添加新文件或更新修改文件

这里必须先引入

  1. 【unzip -l 压缩文件.zip # 在不解压的情况下,列出压缩包内内容列表】;
  2. 【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

不做演示选项:

  1. gzip -r:它是递归压缩目录里的文件,并非压缩目录,需要tar来打包后压缩;
  2. xz -T:多核cup可设置提速,但是默认最身心;
  3. 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**打包。

  1. mkdir tar】,【cd tar】创建并进入目录;
  2. du -hs /etc# du查看目录容量,-h易读方式,-s不展开目录;】
  3. tar -cv -f etc_cv.tar /etc # -c打包,-v可视,即向屏幕输出打包的文件名,-f后紧跟打包文件名;】
  4. 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在上级目录,就都打包压缩它了。

  1. gzip:【tar -zcv -f etc_zcv.tar.gz ../etc #自己标注一下,有助于记住】;
  2. bzip2:【tar -jcv -f etc_zcv.tar.bz2 ../etc #自己标注一下,有助于记住】;
  3. 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总出错,还要自己筛选答案,大家鼓励鼓励点赞关注法,觉得有用就收藏,谢谢。

下章主要是备份和还原,请期待。

相关推荐
nnsix2 小时前
Unity PicoVR 开发环境搭建
笔记
weixin_445476682 小时前
Docker 在 Ubuntu(国内网络)安装及问题解决总结
网络·ubuntu·docker
少年、潜行2 小时前
F1C100/200S学习笔记(2)-- 初次FLASH启动(裸机)和SD卡启动(Linux)
linux·笔记·f1c200s
雍凉明月夜2 小时前
深度学习网络笔记Ⅰ(CNN)
网络·笔记·深度学习·神经网络·学习·cnn
todoitbo2 小时前
告别复杂笔记软件!Memos+cpolar,让你的笔记随时随地可用
网络·笔记·内网穿透·cpolar·软件·memos
小白勇闯网安圈2 小时前
极简版Linux发行内核
linux
管理大亨3 小时前
Linux vs Windows:五大维度深度对决
linux·arm开发·windows
乘凉~3 小时前
【Linux作业】Limux下的python多线程爬虫程序设计
linux·爬虫·python
钓鱼的肝3 小时前
GESP系列(3级)小杨的储蓄
开发语言·数据结构·c++·笔记·算法·gesp