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 调试器的 指令,等着我们学习!!
最后,如果我的文章能给你带来一定的帮助,或者是收获,我很开心。
同时,觉得对你有帮助的伙伴们,也可以 点赞👍 + 收藏⭐️ + 关注➕,支持一下!
感谢各位观看!!
相关文章:

Linux基础指令(五)
目录 前言1. 打包和压缩1.1 是什么1.2 为什么1.3 怎么办? 2. zip & unzip3. tar 指令结语: 前言 欢迎各位伙伴来到学习 Linux 指令的 第五天!!! 在上一篇文章 Linux基本指令(四) 当中,我们学习了 fin…...

C语言结构体的一些鲜为人知的小秘密
目录 一、结构体内存对齐规则: 1.1范例 1.2结构体内存对齐规则 1.3自定义默认对齐数 二、位段 2.1什么是位段 2.2位段的内存分配 2.3位段的不足 三、枚举和联合体 3.1枚举 3.1.1枚举类型的定义 3.1.2枚举类型的使用 3.2联合体 3.2.1联合体的定义 3.…...
kubernetes问题(一)-探究Pod被驱逐的原因及解决方法
1 k8s evicted是什么 k8s evicted是Kubernetes中的一个组件,主要用于处理Pod驱逐的情况。在Kubernetes中,当Node节点资源不够用时,为了保证整个集群的运行稳定,会按照一定的优先级和策略将其中的Pod驱逐出去。这时就需要一个组件…...

论文速览【序列模型 seq2seq】—— 【Ptr-Net】Pointer Networks
标题:Pointer Networks文章链接:Pointer Networks参考代码(非官方):keon/pointer-networks发表:NIPS 2015领域:序列模型(RNN seq2seq)改进 / 深度学习解决组合优化问题【…...

Denoising diffusion implicit models 阅读笔记
Denoising diffusion probabilistic models (DDPMs)从马尔科夫链中采样生成样本,需要迭代多次,速度较慢。Denoising diffusion implicit models (DDIMs)的提出是为了加速采样过程,减少迭代的次数,并且要求DDIM可以复用DDPM训练的网…...

【Java 基础篇】Executors工厂类详解
在多线程编程中,线程池是一项重要的工具,它可以有效地管理和控制线程的生命周期,提高程序的性能和可维护性。Java提供了java.util.concurrent包来支持线程池的创建和管理,而Executors工厂类是其中的一部分,它提供了一些…...
SpringBoot MongoDB操作封装
1.引入Jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency> 2.MongoDbHelper操作 /*** MongoDB Operation class* author Mr.Li* date 2022-12-05*…...

PyTorch 模型性能分析和优化 — 第 1 部分
一、说明 这篇文章的重点将是GPU上的PyTorch培训。更具体地说,我们将专注于 PyTorch 的内置性能分析器 PyTorch Profiler,以及查看其结果的方法之一,即 PyTorch Profiler TensorBoard 插件。 二、深度框架 训练深度学习模型,尤其是…...

Unity3D 简易音频管理器
依赖于Addressable 依赖于单例模板:传送门 using System.Collections.Generic; using System.Security.Cryptography; using System; using UnityEngine; using UnityEngine.AddressableAssets;namespace EasyAVG {public class AudioManager : MonoSingleton<…...

【李沐深度学习笔记】线性回归
课程地址和说明 线性回归p1 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 线性回归 如何在美国买房(经典买房预测问题) 一个简化的模型 线性模型 其中, x → [ x 1 , x 2 ,…...

微信收款码费率0.38太坑了
作为一个有多年运营经验的商家,我本人在申请收款功能时曾经走过了不少弯路。我找遍了市面上的知名的支付公司,但了解到的收款手续费率通常都在0.6左右,最低也只能降到0.38。这个过程吃过不少苦头。毕竟,收款功能是我们商家的命脉&…...
【学习笔记】CF1103D Professional layer
首先分析不出啥性质,所以肯定是暴力优化😅 常见的暴力优化手段有均摊,剪枝,数据范围分治(points),答案值域分析之类的。 比较经典的题目是 CF1870E Another MEX Problem,可以用剪枝…...
vue之Pinia
定义 Store | Pinia 开发文档 1.什么是Pinaia Pinia 是 Vue 的专属状态管理库,它允许你跨组件或页面共享状态。 2.理解Pinaia核心概念 定义Store 在深入研究核心概念之前,我们得知道 Store 是用 defineStore() 定义的,它的第一个参数要求是一…...

antd-vue 级联选择器默认值不生效解决方案
一、业务场景: 最近在使用Vue框架和antd-vue组件库的时候,发现在做编辑回显时** 级联选择器** 组件的默认值不生效。为了大家后面遇到和我一样的问题,给大家分享一下 二、bug信息: 三、问题原因: 确定不了唯一的值&a…...

分享53个Python源码源代码总有一个是你想要的
分享53个Python源码源代码总有一个是你想要的 链接:https://pan.baidu.com/s/1ew3w2_DXlSBrK7Mybx3Ttg?pwd8888 提取码:8888 项目名称 100-Python ControlXiaomiDevices DRF-ADMIN 后台管理系统 FishC-Python3小甲鱼 Flask框架的api项目脚手架 …...

【每日一题】658. 找到 K 个最接近的元素
658. 找到 K 个最接近的元素 - 力扣(LeetCode) 给定一个 排序好 的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。 整数 a 比整数 b 更接近 …...
并发任务队列(字节青训测试题)
需求描述 封装一个并发任务队列类,用于对一些异步任务按指定的并发数量进行并发执行。 /*** 延迟函数* param {number} time - 延迟时间* return {Promise} delayFn - 延迟函数(异步封装)*/ function timeout(time) {return new Promise((resolve) > {setTimeo…...

Ubuntu 安装Nacos
1、官网下载最新版nacos https://github.com/alibaba/nacos/releases 本人环境JDK8,Maven3.6.3,启动Nacos2.2.1启动失败,故切换到2.1.0启动成功 2、放到服务器目录下,我的在/home/xxx/apps下 3、解压 $ tar -zxvf nacos-serve…...
CSS 小球随着椭圆移动
html代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><…...

【李沐深度学习笔记】线性代数
课程地址和说明 线性代数p1 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 线性代数 标量 标量(scalar),亦称“无向量”。有些物理量,只具有数值大小,…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...