Linux第三讲:环境基础开发工具使用
Linux第三讲:环境基础开发工具使用
- 1.Linux软件包管理器yum
- 1.1什么是软件包管理器
- 1.2操作系统生态问题
- 1.3什么是yum源
- 2.vim详解
- 2.1什么是vim
- 2.2vim的多模式讲解
- 2.2.1命令模式的诸多指令
- 2.2.1.1gg和n+shift+g
- 2.2.1.2shift+$和shift+^
- 2.2.1.3上、下、左、右
- 2.2.1.4w和b
- 2.2.1.5复制yy和粘贴p和剪切dd
- 2.2.1.6x -- 命令模式的删除
- 2.2.1.7撤销u和反撤销ctrl + r
- 2.2.1.8shift+~
- 2.2.1.9n+r:小范围的文本替换
- 2.2.1.10shift+r:进入替换模式
- 2.2.1.11aio进入插入模式的区别
- 2.2.1.12保存和退出
- 2.2.2底行模式诸多指令
- 2.2.2.1set nu
- 2.2.2.2/XXX -- 搜索XXX
- 2.2.2.3!command
- 2.2.2.4vs+other:分屏操作
- 2.2.3视图模式指令解析
- 2.2.3.1批量化注释和去注释
- 2.2.3.2将所有的printf修改为print
- 2.2.3.3vim code.c +15
- 2.2.3.4!g和!l
- 2.3vim的配置
- 3.复习程序翻译
- 3.1理解条件编译
- 4. 补充 -- sudo问题
- 5.理论知识科普
- 5.1为什么要编译和汇编,以及编译器自举是什么
- 5.2动静态库和动静态链接 -- 操作部分
- 5.3动静态库和动静态链接 -- 理论部分
- 6.自动化构建 - make/Makefile
- 7.Linux第一个程序:进度条的实现
- 7.1回车和换行
- 7.2行缓冲区
- 7.3进度条的一般实现
- 7.4进度条版本1
- 7.5最终进度条版本
1.Linux软件包管理器yum
1.1什么是软件包管理器

1.2操作系统生态问题
我们要完全理解yum问题,必须要了解操作系统的生态问题:

最后我们看一下yum的操作即可:

1.3什么是yum源
上面我们提到,yum是一个用于安装、更新、删除和管理软件包的命令行工具,yum源是指存储软件包及其依赖关系的服务器位置或者本地目录,yum通过访问这些源来管理软件包

2.vim详解
2.1什么是vim

2.2vim的多模式讲解

所以,我们要先进行命令模式的学习:
2.2.1命令模式的诸多指令
我们先进入底行模式,输入set nu,将行号显式出来
2.2.1.1gg和n+shift+g

2.2.1.2shift+$和shift+^

2.2.1.3上、下、左、右

但是,我们会有疑惑:有上下左右键,为什么要使用这些字符进行上下左右呢?

上面是一个老式的电脑,可以看到,这个电脑没有上下左右键,所以就设计成这样了,秉持着向上兼容的问题,所以上下左右也保存下来了,但是,有的并不支持上下左右进行翻阅,只支持hjkl进行翻阅!
2.2.1.4w和b

2.2.1.5复制yy和粘贴p和剪切dd

剪切可以进行粘贴,也可以进行删除!
2.2.1.6x – 命令模式的删除

2.2.1.7撤销u和反撤销ctrl + r
这个很好理解,就是ctrl+z和ctrl+y
2.2.1.8shift+~

按一次,转换一个字符,一直按着,就是转换一行

2.2.1.9n+r:小范围的文本替换

2.2.1.10shift+r:进入替换模式
假如我们有一行都写错了,那么我们可以进入替换模式进行更改:


2.2.1.11aio进入插入模式的区别
a:进入插入模式,并将光标向后移动一位:

i:进入插入模式
o:进入插入模式,并新起一行:

2.2.1.12保存和退出
w为保存,q为退出,进入底行模式之后,输入wq,表示保存并退出,shift+zz也表示保存并退出
wq!表示强制保存并退出,之后如果对于一些敏感文件,就需要进行强制保存或者修改
2.2.2底行模式诸多指令
2.2.2.1set nu
set nu为设置行号
set nonu为取消设置行号
2.2.2.2/XXX – 搜索XXX


2.2.2.3!command
!后边跟指令,可以直接在底行模式下进行命令的执行:

2.2.2.4vs+other:分屏操作

2.2.3视图模式指令解析
视图模式是我们的最后一个模式了!:
2.2.3.1批量化注释和去注释
批量化注释:

将所有代码全部注释:

批量化去注释:

通过上面,可以进行拓展:批量化去除或替换文本,批量化加;等操作
2.2.3.2将所有的printf修改为print

2.2.3.3vim code.c +15

2.2.3.4!g和!l

感叹号加上命令首元素,可以直接执行最近的命令
2.3vim的配置
在vim上进行代码的编写时比较麻烦的,因为它连一个缩进都没有,所以我们可以对vim进行一个基本的配置:

而对于test配置的vim,因为是在自己的家目录中配置的文件,所以对于其他人,是看不到自己的配置的,所以对于vim的配置是自己配置自己的!
我们自己配置一个:

3.复习程序翻译
code.c中的内容为:


3.1理解条件编译
我们知道条件编译,但是条件编译有什么用呢?:
我们都知道:软件有免费版、校园版、付费版、社区版等等分类,这些不同版本的软件并不是每一个版本都有一份单独的代码,而它们是一份代码!而这里面使用的其实就是条件编译!
4. 补充 – sudo问题

当我们普通用户进行sudo时,不是信任用户,我们现在来改成信任用户:

5.理论知识科普
5.1为什么要编译和汇编,以及编译器自举是什么

5.2动静态库和动静态链接 – 操作部分

对于上面,我们只需要知道:gcc默认形成的可执行程序是动态链接的,而要强制静态链接的方式为:gcc-static,而静态链接与动态链接的最大不同在目前看来是文件的大小不同
5.3动静态库和动静态链接 – 理论部分

6.自动化构建 - make/Makefile

有了上面的基础知识之后,我们下面要做的就是实现更加有通用型的makefile:

7.Linux第一个程序:进度条的实现
7.1回车和换行
我们的回车和换行其实是两个不同的概念,\r表示回车,\n表示的是换行,回车只是将光标移动到这一行最开始的位置,而换行是将光标移动到下一行的位置,只是垂直位置移动,而水平位置不变,我们现在使用的\n其实是将换行和回车进行综合了!

7.2行缓冲区

7.3进度条的一般实现
我们想要实现的进度条为:

而该最一般的进度条实现起来还是非常简单的:

7.4进度条版本1
上面的进度条显然不太行,所以我们要再完善一个进度条:

7.5最终进度条版本
上面的进度条显然不足以应对我们真实的情况,因为上面并没有网速的变化、真实情况下的下载问题,我们最后进行优化:

我们真实的下载网速是可能会变的,我们进行测试:

最后将代码看一下就行了:

相关文章:
Linux第三讲:环境基础开发工具使用
Linux第三讲:环境基础开发工具使用 1.Linux软件包管理器yum1.1什么是软件包管理器1.2操作系统生态问题1.3什么是yum源 2.vim详解2.1什么是vim2.2vim的多模式讲解2.2.1命令模式的诸多指令2.2.1.1gg和nshiftg2.2.1.2shift$和shift^2.2.1.3上、下、左、右2.2.1.4w和b2.…...
日本TikTok直播的未来:专线网络助力创作者突破极限
近年来,随着短视频平台的崛起,尤其是TikTok(国际版抖音)成为全球范围内广受欢迎的社交娱乐平台,直播功能的加入无疑为内容创作者提供了更广阔的展示舞台。在日本,TikTok直播不仅使得年轻人能够实时与粉丝互…...
如何在家庭网络中设置静态IP地址:一份实用指南
在家庭网络环境中,IP地址扮演着至关重要的角色。大多数家庭用户依赖路由器的DHCP(动态主机配置协议)来自动分配IP地址,但在某些情况下,手动设置静态IP地址能为家庭网络带来更多的便利性与稳定性,尤其是在涉…...
qt QFile详解
1、概述 QFile类是Qt框架中用于读取和写入文本和二进制文件资源的I/O工具类。它继承自QFileDevice类,后者又继承自QIODevice类。QFile类提供了一个接口,允许开发者以二进制模式或文本模式对文件进行读写操作。默认情况下,QFile假定文件内容为…...
ESP8266 自定义固件烧录-Tcpsocket固件
一、固件介绍 固件为自定义开发的一个适配物联网项目的开源固件,支持网页配网、支持网页tcpsocket服务器配置、支持串口波特率设置。 方便、快捷、稳定! 二、烧录说明 固件及工具打包下载地址: https://download.csdn.net/download/flyai…...
内网项目,maven本地仓库离线打包,解决Cannot access central in offline mode?
背景: 内网项目打包,解决Cannot access central in offline mode? 1、修改maven配置文件: localRepository改为本地仓库位置 <localRepository>D:\WorkSpace\WorkSoft\maven-repository\iwhalecloud-repository\business</loca…...
stack和queue --->容器适配器
不支持迭代器,迭代器无法满足他们的性质 边出边判断 实现 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<stack> #include<queue> using namespace std; int main() {stack<int> st;st.push(1);st.push(2);st.push(3);…...
ffmpeg视频解码
一、视频解码流程 使用ffmpeg解码视频帧主要可分为两大步骤:初始化解码器和解码视频帧,以下代码以mjpeg为例 1. 初始化解码器 初始化解码器主要有以下步骤: (1)查找解码器 // 查找MJPEG解码器pCodec avcodec_fin…...
前端入门一之CSS知识详解
前言 CSS是前端三件套之一,在MarkDown中也完美兼容这些语法;这篇文章是本人大一学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。 文章目录 Emmet语法:CSS基本语法:css语法结构只有3种:…...
【JS学习】10. web API-BOM
文章目录 Web APIs - 第5天笔记js组成window对象定时器-延迟函数location对象navigator对象histroy对象本地存储(今日重点)localStorage(重点)sessionStorage(了解)localStorage 存储复杂数据类型 综合案例…...
C#实现递归获取所有父级的列表
条件: 父级的id是子级的父id形成递归条件 实现功能: 获取自己到最顶级父级的列表(假如最顶级父级的父ID0) 代码: 解释:CF_CODE是自己的ID,CF_PARENT_ID是父id /// <summary>/// 递归获…...
【深度学习】梯度累加和直接用大的batchsize有什么区别
梯度累加与使用较大的batchsize有类似的效果,但是也有区别 1.内存和计算资源要求 梯度累加: 通过在多个小的mini-batch上分别计算梯度并累积,梯度累积不需要一次加载所有数据,因此显著减少了内存需求。这对于显存有限的设别尤为重…...
【Linux】网络相关的命令
目录 ① ip addr show ② ip route show ③ iptables -nvL ④ ping -I enx00e04c6666c0 192.168.1.100 ⑤ ip route get 192.168.1.100 ⑥ sudo ip addr add dev enx00e04c6666c0 192.168.1.101/24 ⑦ ifconfig ⑧ netstat ⑨ traceroute ⑩ nslookup ① ip addr sho…...
leetcode哈希表(五)-四数相加II
题目 454.四数相加II 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1: 输入&…...
Java学习路线:Maven(一)认识Maven
目录 认识Maven 新建Maven文件 导入依赖 认识Maven Maven是一个Java的项目管理工具,通过Maven,我们可以实现: 项目自动构建,包括代码的编译、测试、打包、安装等依赖管理,快速完成依赖的导入 在学习Maven之前&…...
【深度学习】— 多输入多输出通道、多通道输入的卷积、多输出通道、1×1 卷积层、汇聚层、多通道汇聚层
【深度学习】— 多输入多输出通道、多通道输入的卷积、多输出通道、11 卷积层、汇聚层、多通道汇聚层 多输入多输出通道多通道输入的卷积示例:多通道的二维互相关运算 多输出通道实现多通道输出的互相关运算 11 卷积层11 卷积的作用 使用全连接层实现 11 卷积小结 …...
java mapper 的 xml讲解
<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.bnc.s12.mapper.GoodaCateDT…...
全面解析:区块链技术及其应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 全面解析:区块链技术及其应用 文章目录 全面解析:区块链技术及其应用什么是区块链区块链的工作原理1. 分…...
python基础学习笔记
本文类比c语言讲解python 一.变量和类型 前缀小知识: 注意:1.python写每一行代码时,结尾不需要 ; 这点是和c语言有很大区别的 2.代码的缩进(就是每行代码前面的空格)是非常重要的后文会提到 1.定义变量 注意: 和C/C …...
【dvwa靶场:XSS系列】XSS (DOM) 低-中-高级别,通关啦
一、低级low 拼接的url样式: http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default 拼接的新内容 <script>alert("假客套")</script> 二、中级middle 拼接的url样式: http://127.0.0.1/dvwa/vuln…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...
Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...
