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.mzph.cn/news/87650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git --- 基础介绍

git --- 基础介绍 git 是什么git --- 工作区, 暂存区, 资源库git --- 文件状态git --- branch 和 HEADgit --- 一次正常的git提交流程 git 是什么 Git是一款分布式源代码管理工具(版本控制工具)Git和其他传统版本控制系统比较: 传统的版本控制系统(例如 SVN)是基于差异的版本控…

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于RF-Adaboost随机森林结合…

mac 解决 vscode 权限不足问题,Insufficient permissions

commod 空格,输入终端并打开写入指令 sudo chown -R xxxxxx1 xxxxx2(例如我的sudo chown -R admin Desktop,具体参数查看下方) x1: 用户名,可通过左上角查看 x2: 目标文件夹。可以另起一个终端,用cd 和 l…

vue+element项目创建步骤

一、创建vue项目步骤 要创建一个Vue Element UI的项目,你可以按照以下步骤进行操作: 1.确保你已经安装了Node.js和npm(Node.js的包管理器)。你可以在命令行中运行以下命令来检查它们是否已经安装: node -vnpm -v2.使…

《开发实战》18 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?

取长补短之 Redis vs MySQL 做一个简单测试,分别填充 10 万条数据到 Redis 和 MySQL 中。MySQL 中的 name字段做了索引,相当于 Redis 的 Key,data 字段为 100 字节的数据,相当于 Redis 的Value。在我的电脑上,使用 wr…

基于SpringBoot的企业客户管理系统的设计与实现【附PPT|万字文档(LW)和搭建文档】

主要功能 后台登录: 可注册员工:工号、密码、姓名、身份证、手机、邮箱 员工: ①首页、个人中心、修改密码、个人信息 ②客户信息管理、项目信息管理、项目收益管理等 后台登录: 管理员: ①首页、个人中心、修改密码、…

kubernetes问题(一)-异常事件

1 pod状态处于Evicted 0/1 现象: 1)kubectl get events发现“failed to garbage collect required amount of images”。 2)同时磁盘空间不足的节点有大量pod处于Evicted 0/1状态,但并未进行重新调度。 原因描述: …

一文了解什么SEO

搜索引擎优化 (SEO) 是一门让页面在 Google 等搜索引擎中排名更高的艺术和科学。 一、搜索引擎优化的好处 搜索引擎优化是在线营销的关键部分,因为搜索是用户浏览网络的主要方式之一。 搜索结果以有序列表的形式呈现,网站在该列表中的排名越高&#x…

ubuntu 软件包管理之一

在 Ubuntu 操作系统中,软件包管理扮演着至关重要的角色,为用户提供了安装、更新和卸载各类应用程序、工具和库的关键工具。本文将引导您探索从软件包基础知识的了解,到制作自己的软件包,再到维护和共享软件包的全过程。无论您是普通用户还是开发者,了解如何处理软件包都是…

小样本规模船型优化策略的选择研究

天洑软件基于自研智能优化软件AIPOD在船舶行业的应用发表论文《小样本规模船型优化策略的选择研究》刊录于核心期刊《中国造船》。全文如下: 小样本规模船型优化策略的选择研究 陈骏喆,姜 栋,张 儒,张 明 (南京天洑…

聊聊druid的borrow行为

序 本文主要研究一下druid的borrow行为 getConnection com/alibaba/druid/pool/DruidDataSource.java public DruidPooledConnection getConnection() throws SQLException {return getConnection(maxWait);}public DruidPooledConnection getConnection(long maxWaitMillis…

UniAccess Agent卸载

异常场景: UniAccess Agent导致系统中的好多设置打不开 例如:ipv4的协议,注册表,host等等 需要进行删除,亲测有效,及多家答案平凑的 借鉴了这位大神及他里面引用的大神的内容 https://blog.csdn.net/weixin_44476410/article/details/121605455 问题描述 这个进…

Redis 字符串操作实战(全)

目录 SET 存入键值对 SETNX SETEX SETBIT SETRANGE MSET 批量存入键值对 MSETNX PSETEX BITCOUNT 计算值中1的数量 BITOP 与或非异或操作 DECR 减1 DECRBY APPEND 追加 INCR 自增 INCRBY INCRBYFLOAT GET 取值 GETBIT GETRANGE GETSET 取旧值赋新值 MGET …

权限提升Linux篇

提权工具 https://github.com/liamg/traitor https://github.com/AlessandroZ/BeRoot https://github.com/rebootuser/LinEnum https://github.com/mzet-/linux-exploit-suggester https://github.com/sleventyeleven/linuxprivchecker https://github.com/jondonas/linux…

Git学习笔记4

GitHub是目前最火的开源项目代码托管平台。它是基于web的Git仓库,提供公有仓库和私有仓库,但私有仓库是需要付费的。 到Github上找类似的项目软件。 GitLab可以创建免费的私有仓库。 GitLab是利用 Ruby开发的一个开源的版本管理系统,实现一个…

如何使用Docker安装最新版本的Redis并设置远程访问(含免费可视化工具)

文章目录 安装Docker安装Redisredis.conf文件远程访问Redis免费可视化工具相关链接Docker是一种开源的应用容器引擎,使用Docker可以让我们快速部署应用环境,本文介绍如何使用Docker安装最新版本的Redis。 安装Docker 首先需要安装Docker,具体的安装方法可以参考Docker官方文…

使用 rtty 进行远程 Linux 维护和调试

rtty 是一个用于在终端上进行远程连接和数据传输的工具。它提供了一种简单的方式来与远程设备进行通信,使得在不同主机之间传输数据变得更加方便。 安装 rtty 是一个可执行程序,可以在 Linux、macOS 和 Windows 等平台上使用。 Linux/macOS 在终端中执…

开发者必备!如何将闲置iPad Pro打造为编程工具,使用VS Code编写代码

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. ipad pro通过软件远程vscode6.1 创建TCP隧道 7. ip…

Java-day17(反射)

Reflection(反射) 动态语言的关键 允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法提供的功能: 在运行时判断任意一个对象所属类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在…

怒刷LeetCode的第15天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:哈希表双向链表 方法二:TreeMap 方法三:双哈希表 第二题 题目来源 题目内容 解决方法 方法一:二分查找 方法二:线性搜索 方法三:Arrays类的b…