目录
- 前言
- 1. 打包和压缩
- 1.1 是什么
- 1.2 为什么
- 1.3 怎么办?
- 2. zip & unzip
- 3. tar 指令
- 结语:
前言
欢迎各位伙伴来到学习 Linux 指令的 第五天!!!
在上一篇文章 Linux基本指令(四) 当中,我们学习了 find 和 which 等指令去查找 文件 / 目录 的路径。其中 which 却可以查找系统命令,于是就涉及到了一系列问题,而这些问题被单独分开到了 如何正确看待Linux下的各种命令 这篇文章中去解答,然后呢,我们又在which的基础上,顺势的引入了解了 alias 和 whereis 这两条指令。随后我们学到了一个具有行文本过滤功能的指令 grep。再然后,为了引入并理解 xargs 这个参数指令,我们重新回顾了之前学习过的 echo 指令和管道文件,而 xargs 这个指令就是一个能够让 输出到管道文件的数据能够被系统命令当作命令行参数去使用的这么一个参数命令!
而今天学习,又是几个稍微比较难理解的指令,但它们都属于一个类型 —— 那就是 打包和压缩 !
OK,废话不多说,我们开启今天的学习,
今天我们要学习的是……
可能学了这么几天的 Linux 指令,有的人会问。哎哎哎,那 windows 下不是有一个所谓的压缩和解压吗???
你 Linux能不能实现这样的操作呢??
==》
答案是当然呢!我们今天要讲的指令,就是 Linux 下的打包和压缩。只不过呢,对于一些刚接触到系统的伙伴来讲,可能不太能够理解,打包和压缩这两个过程,它是在做什么事情的???
所以呢,今天在讲这些指令之前呢,我要先带伙伴们,感性的认识一下 什么是打包和压缩,还有为什么要打包和压缩。最后,我会简化一下,怎么打包和压缩。
简化到什么程度呢? —— 争取简化到能够像 windows 下的打包和压缩那样的操作。
1. 打包和压缩
1.1 是什么
在讲 是什么 之前,我先来给大家讲一个故事!
大家都知道,每年都会有新生季嘛。而在我们刚要去上大一的时候,是不是总有这么几个伙伴,大学之前没有过内宿学校经历,加上自理能力又比较差!那我们就假设,有这么一个准大一新生,张三,他的理能力很差!然后呢,要横跨大半个中国去上大学!他的爸爸麻麻呢,又非常的疼他,所以呢,在上大学之前,就把各自大包小包给他准备好了,像什么牙膏啊,牙杯啊等等,全部给 打包 塞进了一个大大的袋子里面。
那说到这里 ,大家肯定都知道为什么要将这些东西打包塞进一个袋子里面。如果你不打包塞进一个袋子里面统一存放,那难道我要左手牙刷、右手牙杯吗???
==》
那如果真的是这样的话!那么,到了学校那边,也只是,人到了而已!!!!其它都是都丢失了!!
==》
所以什么是打包??? —— 把所有东西装在一个包里,这就叫 打包 !
==》
故事到这里还没有结束。我们刚刚提到了,他的爸爸麻麻呢,非常的疼他。说:”我儿子要去上大学,就让他带这么点东西,怎么行呢?!!“ 所以啊,你的粑粑麻麻,又把各种衣服啊、被子啊,全部往包里赛,等到塞不进去了。你爸说,我还有办法!你就看你爸用各种压缩袋啊一套,把衣服啊、被子啊等物品里面的空气抽干!
==》
最后,本来占地面积两平方米的一个大大的被子,通过你粑粑的各种压缩操作,硬是给压缩到了只剩下不到 0.5平方米,最后再给你装到一个包里,再进行各种压缩!!!
==》
上述这个过程呢,就叫做压缩!!!
OK,我们感觉总结一下,所以,打包就是:将东西放在一起!!!
压缩就是:采用某种压缩算法,压缩它的存储空间!!!
1.2 为什么
所以我们为什么要打包和压缩呢???
打包无例外就是为了便于传输!!
为了方便 张三 把它各种零零碎碎的杂物,顺利的搬运到学校中去!
==》
而压缩就是为了更多更快的去传输!!
压缩之后体积不就变小了嘛,那张三就可以 更加轻松的把行李搬运到学校,或者可以携带更多的物品到学校去
!!
=》
所以归根结底,所以的打包压缩,就是为了便于传输,或者归档!!
所以这也是为什么,我们在 windows 下载软件的时候,很多时候下载下来的不是一个程序,而是一个压缩包!!!
==》
就是软件开发商为了让软件能够不丢失 并且 减少在网络上传输的时候的消耗,为了让用户下载的更快!!
1.3 怎么办?
我们都知道,在 windows 下,市面上有各种后缀的压缩包,同时也有非常多的解压工具。那在Linux 下,是不是也是如此呢??? —— 是的!
所以接下里呢,我主要带大家了解 Linux 下的两种常用的打包压缩和解压工具。
2. zip & unzip
假设此时我们的路径下有一个 project 目录,然后我们现在要对该目录进行打包压缩!
打包压缩完毕之后呢,我们通过 tree 一下 pro 这个压缩包,我们发现,这玩意里面,什么都没有!!
怎么回事呢??就算是压缩,也总不能压缩为 0 吧??
zip pro.zip project
Ok,那我们就来讲讲这条指令!
我们压缩一个文件或目录,压缩完后,通常都会有一个新的文件,也就是压缩包,所以我们需要给这个压缩包起个名字吧?所以 zip 后面带的 就是压缩完后的压缩包的名字,然后在对于要压缩的目标文件 / 目录
但是呢,这个 zip 指令 它默认通常就是用来打包压缩目录的!在我们现实生活中,大部分场景也都是压缩目录,而不是文件。当然,上述方法,是可以压缩一个普通文件的。 而压缩目录,我们还需要带上一个 -r 选项才能够!
有人或许要问了,为什么要带 -r 才能够压缩目录呢,你不是说,zip 默认就是压缩目录的吗 ???
==》
这个答案很简单,道理跟我们的 rm 命令相似,面对目录,我们需要通过 -r 递归来删除,所以 zip 也需要通过 -r 选项来达到压缩一个目录!!
zip -r dir.zip dir # 打包压缩一个目录
我们可以明显的看到,这次的解压,完全就跟上一次不一样了。目录中的文件,也都被添加到了压缩包里。
我们可以看到,我们先是把原本的目录 project 给删除掉了,再把刚刚压缩好的 pro 原原本本的解压回去了,并且原本目录中,存在的文件,解压后也依旧存在!
所以解压就是!
unzip name.zip
需要注意的是,如果目标压缩包后面不带任何路径,那么 unzip 默认就是解压到当前路径。
那有人要问啦!那我在 windows下,我解压文件的时候,人家都会问我,解压后存放到到哪个路径呀,那 unzip 有没有这样的功能呢?!!
==》
答案是,有的!!
我们可以看到,我们通过 -d 选项 + 目标路径 (可以是绝对路径,也可以是相对路径),成功的把 pro.zip 这个压缩包解压到了 test 目录下!!
所以解压到指定路径就是!
unzip name.zip -d 目标路径
OK,我们赶紧总结一下 zip 这条指令
zip -r name.zip 你的目录名
unzip name.zip #默认解压到当前路径
unzip name.zip -d 目标路径 #解压到指定的路径
3. tar 指令
先总体讲一下,这个 tar 指令,非常的不好玩,它的选项太多了!!!!所以,选项一多,就变复杂了,也使得我们在学习的时候成本有所提高,所以玩不过来啊!!!
那么,我先概念性的介绍一下,tar 它的一些常用选项,再来做具体的分析和演示
-c:建立一个压缩文件的参数指令(create的意思);
-x: 解开一个压缩文件的参数指令!
-t: 查看tarfile 里面的文件!
-z: 是否同时具有gzip的属性?亦即是否需要用gzip 压缩?
-j: 是否同时具有bzip2的属性?亦即是否需要用 bzip2 压缩?
-v: 压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f:使用档名,请留意,在f之后要立即接档名喔!不要再加参数!
-C:解压到指定目录
相信大家看到上面的这各式各样的选项后,那简直是一个头大!!但是我们又不能不了解,所以呢,我们会对其弱化一下,尽可能的让大家更容易去上手这么一个 tar 指令!
还是以上面的场景为例,当前路径有一个 project 的目录,我现在要用 tar 压缩它。
tar -czvf project.tgz project
// 其中的 -c 就是creat,创建一个压缩包,也就是创建一个可以打包并压缩的文件
// -z 就是压缩的意思!!
// -f 表示的就是创建一个对应的文件所对应的文件名(也就是要创建一个压缩后的文件名)
// -v 就是显示这个压缩过程
// project.tgz 它的本质其实是 project.tar.gz --> tar是打包的意思,gz是压缩的意思
// 所以 .tar.gz就是打包并压缩的意思,但是我们不推荐这样写,太麻烦了,我们可以直接写成 .tgz
// project 表示的就是我们要压缩的文件/目录
不过在这里,我有一个建议,就是如果非特殊情况,我建议我们一般不要带 -v 显示的压缩过程,为什么呢???
==》
因为不排除有一些文件特别大,或者有些目录里面的文件特别多!那么显示压缩,可能就需要特别久,而且整个屏幕都会显示文件,就很不方便!除非你有些情况,你想查看压缩过程,那么可以把 -v 选项带上压缩!!
好了,现在压缩我们会了,那解压呢??
tar -xzvf project.tgz
// 这就是解压!! 把 -c 创建一个压缩包 换成 -x ,其它都不变,就可以解压了!!
// 所以 -x 就是解压的意思!!
// 而这里的 -z 有两层意思,如果你是压缩,那 -z 就表示压缩,如果你是解压,那 -z 就表示解压!
我们先把原目录删除,然后我们在通过解压 .tgz文件,可以看到源目录被原原本本解压出来了!!!
同样的,不显示解压过程,那就是把 -v 选项 去掉就好了!!
如同 zip & unzip 指令一样, tar 是否也能够解压到指定路径呢??
==》
当然呢!在谈论 zip 的时候,我们采用的是相对路径法,那么我们这次就以绝对路径来演示!
tar -xzvf project.tgz -C 目标路径
// -C 就是指定路径压缩
我们可以看到,解压到指定路径下之后,我们 tree 以下解压后的目录,里面的东西,还是存在且一模一样的!!
ok,讲到这里,我们再拓展一下,-t 选项是干嘛用的呢?? 怎么用??
==》
-t 是用于查看 tar 包里面的文件的,什么是 .tar 包,我们上面讲了,tar 就是打包的意思,所以 .tar 包就是只打包、不压缩的文件!!
==》
那么怎么只打包,不压缩呢??
tar -cf project.tar project
// 打tar呢,就不是 -czf 了, 因为我们讲,-z 打包压缩的时候,它就是压缩的意思,而此时我们只想要打包,不想要压缩,所以我们不需要它!!
// 而 -f 就是为打包后的文件起一个名字
那么这样,一个 tar 包就创建好了! 那我们就可以通过 -t 来查看整个文件里面的内容了!
tar -tf project.tar
// 此时的 -t 就是查看tar包
那打包也会了,查看也会了,那解开 tar 包,怎么解呢??
tar -xf project.tar
// 与打包同理,这里解开的是tar包,所以不需要 -z来解压!!
还是一样,我们先把原本的目录 project 删除,然后再通过解开 tar 包,还原 project
到这里可能有人要问啦!那你口口声声说,tar 包 就是打包的,没有压缩的,而 tgz 才是打包压缩的,你怎么知道的呢??
==》
答案很简单,大家可以对比 tar 包 和 tgz 包 的文件大小
我们在铺垫打包和压缩的时候,我们就讲到,打包呢,并不会减小体积,压缩才会减小体积!!
所以我们也可以看到 tar 包的大小 要比 tgz 包的大很多!!
结语:
OK,Linux 所有常用的基本指令就讲到这。如果不出意外的话,这是最后一篇讲 Linux 的指令了。后续如果有需要,我会继续进行拓展。
当然,指令的学习,我们还远远没完。后续呢,还有 vim 编辑器的指令操作,还有 gdb 调试器的 指令,等着我们学习!!
最后,如果我的文章能给你带来一定的帮助,或者是收获,我很开心。
同时,觉得对你有帮助的伙伴们,也可以 点赞👍 + 收藏⭐️ + 关注➕,支持一下!
感谢各位观看!!