Linux基础指令(五)

目录

  • 前言
  • 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 调试器的 指令,等着我们学习!!

最后,如果我的文章能给你带来一定的帮助,或者是收获,我很开心。
同时,觉得对你有帮助的伙伴们,也可以 点赞👍 + 收藏⭐️ + 关注➕,支持一下!
感谢各位观看!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141954.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C语言入门Day_25 函数与指针小结

目录 前言: 1.函数 2.指针 3.易错点 4.思维导图 前言: 函数就像一个“有魔法的加工盒”,你从入口丢一些原材料进去,它就能加工出一个成品。不同的函数能加工出不同的成品。 入口丢进去的瓶子,水和标签就是输入&a…

【服务端 | Redis】如何使用redis 有序集合实现股票交易的订单表(价格优先、时间优先)

前两天倒腾redis的有序集合时,自己发现了一个问题,redis的有序集合在score相同的情况 下是如何排序的? 通过谷歌搜索,发现了一些线索,在score相同的情况下,redis使用字典排序,不过不是太明白什…

计算机网络相关知识点(二)

TCP如何保证传输过程的可靠性? 校验和:发送方在发送数据之前计算校验和,接收方收到数据之后同样需要计算,如果不一致,那么代表传输有问题。 确认应答序,序列号:TCP进行传输时数据都进行了编号…

排查内存泄露

1 通过Performance确认是否存在内存泄露 一个存在内存泄露的 DEMO 代码&#xff1a; App.vue <template><div><button click"myFn" style"width: 200px; height: 200px;"></button><home v-if"ishow"></hom…

Xcode15下载iOS17一直中断解决办法

1、问题描述 目前的 xcode 15 安装时&#xff0c;跟以前有个差别&#xff1a;以往的 xcode 安装时自带了 ide、sdk 等工具包&#xff0c;安装后即可开始开发&#xff0c;而最新的包则被分开成了不同的包&#xff0c;这里以 ios 开发包为例&#xff1a;Xcode_15.xip 和 iOS_17_…

软件测试之敏捷项目风险管理

敏捷项目管理是近年来最为流行的项目管理方式之一。这主要归功于敏捷管理的特点&#xff1a;尽早交付、持续改进、灵活管理、团队投入、充分测试。它能充分利用测试周期&#xff0c;并监测每个测试过程中容易出现的问题&#xff0c;加快项目迭代速度&#xff0c;从而推进项目高…

docker 配置 gpu版pytorch环境--部署缺陷检测--Anomalib

目录 一、docker 配置 gpu版pyhorch环境1、显卡驱动、cuda版本、pytorch cuda版本三者对应2、拉取镜像 二、部署Anomalib1、下载Anomalib2、创建容器并且运行3、安装Anomalib进入项目路径安装依赖测试&#xff1a; 一、docker 配置 gpu版pyhorch环境 1、显卡驱动、cuda版本、p…

《优化接口设计的思路》系列:第四篇—接口的权限控制

系列文章导航 《优化接口设计的思路》系列&#xff1a;第一篇—接口参数的一些弯弯绕绕 《优化接口设计的思路》系列&#xff1a;第二篇—接口用户上下文的设计与实现 《优化接口设计的思路》系列&#xff1a;第三篇—留下用户调用接口的痕迹 《优化接口设计的思路》系列&#…

ROS2 从头开始:第 08/8回 - 使用 ROS2 生命周期节点简化机器人软件组件管理

一、说明 欢迎来到我在 ROS2 上的系列的第八部分。对于那些可能不熟悉该系列的人,我已经涵盖了一系列主题,包括 ROS2 简介、如何创建发布者和订阅者、自定义消息和服务创建、

02 MIT线性代数-矩阵消元 Elimination with matrices

一, 消元法 Method of Elimination 消元法是计算机软件求解线形方程组所用的最常见的方法。任何情况下&#xff0c;只要是矩阵A可逆&#xff0c;均可以通过消元法求得Axb的解 eg: 我们将矩阵左上角的1称之为“主元一”&#xff08;the first pivot&#xff09;&#xff0c;第…

【springboot3.x 记录】关于Jakarta包无法引入的问题

最近想将一些项目升级到springboot3.x和java17的时候&#xff0c;发现项目依赖中有Jakarta的包&#xff0c;但是代码标红提示没有相关的类&#xff0c;特此记录一下排查问题和最终解决问题的思路方法 一、发现问题 因为之前有创建过 springboot3.x java17 的项目&#xff0c;…

第6讲:v-for使用

目录 1.循环遍历 2.v-for遍历整形变量&#xff08;99乘法表&#xff09; 3.v-for遍历普通数组 4.v-for遍历数组对象 1.循环遍历 v-for指令基于一个数组渲染一个列表&#xff0c;它和JavaScript的遍历语法相似&#xff1a; v-for”item in list” list 是一个数组&#xff0c; i…

指针笔试题讲解

文章目录 题目答案与解析1、234、5、6、7、8、 题目 int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }//由于还没学习结构体&#xff0c;这里告知结构体的大小是20个字节 //由于还没学习结…

2023-09-25 LeetCode每日一题(LFU 缓存)

2023-09-25每日一题 一、题目编号 460. LFU 缓存二、题目链接 点击跳转到题目位置 三、题目描述 请你为 最不经常使用&#xff08;LFU&#xff09;缓存算法设计并实现数据结构。 实现 LFUCache 类&#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始…

腾讯mini项目-【指标监控服务重构】2023-08-25

今日已办 traefik proxy jaeger Prometheus prometheus | Prometheus 配置完依然无法实现 web-url的前缀访问【待解决】 Set span storage type : elasticsearch services:elasticsearch:image: elasticsearch:7.17.12container_name: elasticsearchnetworks:- backend # …

2023.9.23 关于 HTTP 详解

目录 HTTP 协议 认识 URL HTTP 请求 认识方法 HTTP 响应 认识状态码 总结 HTTP 请求的构造 Form 表单构造 AJAX 构造 Postman 构造 HTTP 协议 应用层使用最广泛的协议浏览器 基于 HTTP协议 获取网站是 浏览器 和 服务器 之间的交互桥梁HTTP协议 基于传输层的 TCP协…

软件测试之Web安全测试详解

前言 随着互联网时代的蓬勃发展&#xff0c;基于Web环境下的应用系统、应用软件也得到了越来越广泛的使用。 目前&#xff0c;很多企业的业务发展都依赖于互联网&#xff0c;比如&#xff0c;网上银行、网络购物、网络游戏等。但&#xff0c;由于很多恶意攻击者想通过截获他人…

Visual Studio 2017 安装

C自学精简实践教程 目录(必读) 这篇文章会保证你第一次安装VS2017就成功运行Hello World! 下载Visual Studio Installer Gitee 下载 VS2017/vs2017_Community.exe CalmReason/VisualStudio - 码云 - 开源中国 (gitee.com) 百度云下载 链接&#xff1a;https://pan.baidu…

【ROS入门】使用 ROS 服务(Service)机制实现同步请求与答复

文章结构 任务要求话题模型实现步骤自定义srv定义srv文件编辑配置文件编译 自定义srv调用vscode配置编写服务端实现编写客户端实现 执行启动roscore编译启动客户端和服务端编译启动roscore启动节点 任务要求 编写代码实现 ROS 中的服务请求与答复: 创建服务端&#xff0c;注册…

YZ09: VBA_Excel之读心术

【分享成果&#xff0c;随喜正能量】多要求自己&#xff0c;你会更加独立&#xff0c;少要求别人&#xff0c;你会减少失望&#xff0c;宁愿花时间去修炼 不完美的自己&#xff0c;也不要浪费时间去期待完美的别人&#xff01;。 我给VBA下的定义&#xff1a;VBA是个人小型自动…