【Linux】-- 工具介绍 vim_gcc/g++_gdb
目录
Linux中的软件管理工具 – yum
在Linux下安装软件的方式
认识yum
查找软件包
安装
卸载
lrzsz.x86_64
rz
sz
Linux中的编辑器 – vim
vim的基本概念
vim各模式切换
vim命令模式命令
vim底行模式命令
gcc / g++
gcc / g++的作用
gcc / g++语法
预处理
编译
汇编
链接
动态库和静态库
gdb
debug和release
gdb指令
Linux中的软件管理工具 – yum
在Linux下安装软件的方式
在Linux系统下安装软件的方式有以下三种
- 下载程序的源代码 自己进行编译 得到可执行程序
- 通过rpm获取安装包 通过rpm命令进行安装 (未解决依赖问题)
- 通过yum进行安装 本身会考虑依赖关系
通过yum进行安装是我们最常用的一种方式
认识yum
yum是一个在Fedora、RedHat以及CentOS中的前端软件包管理器 能够从指定的服务器自动下载RPM包并且安装 可以自动处理依赖性关系 并且一次安装所有依赖的软件包 无须繁琐地一次次下载、安装
它就可以类比我们的windows上的软件商店
一个服务器同一时刻只允许一个yum运行
yum要工作,必须要联网
查找软件包
我们可以通过下面的命令来查找软件包
yum list
[wzy@VM-24-2-centos lesson2]$ grep list
安装
yum install
[wzy@VM-24-2-centos lesson2]$ sudo yum install sl.x86_64
-y 直接安装 不询问
[wzy@VM-24-2-centos lesson2]$ sudo yum -y install sl.x86_64
卸载
yum remove
[wzy@VM-24-2-centos lesson2]$ sudo yum remove sl.x86_64
-y 直接删 不询问
[wzy@VM-24-2-centos lesson2]$ sudo yum -y remove sl.x86_64
lrzsz.x86_64
和Windows进行文件交互
rz
sz
Linux中的编辑器 – vim
vim的基本概念
vim的本质上是一个多模式的文本编辑器
它主要有三种模式 我们这里会逐一介绍
1. 命令模式 (Normal mode)
在命令模式下 我们可以控制光标的移动以及字符 字或行的删除 复制粘贴 剪贴等操作
2. 插入模式(Insert mode)
只有在插入模式下才能进行文字输入 该模式是我们使用最频繁的编辑模式
3. 底行模式(Command mode)
我们的保存 退出等指令都要在底行模式中进行
vim各模式切换
首先我们使用一张图来理解vim中三种模式之间的联系
vim 默认命令模式 ----> i a o 插入模式<---- ESC | ^ : | | ESC| || |V底行模式
- 普通模式通过 按一次 i键 切换到插入模式
- 普通模式通过 按 :键切换到底行模式
- 其他两种模式通过 ESC 切换到普通模式
- 底行模式和插入模式不能互通
下面的字符 n 表示一个具体的数字 比如说 8 12 123等
vim命令模式命令
移动光标相关
- 「k」:光标上移
- 「j」:光标下移
- 「h」:光标左移
- 「l」:光标右移
- 「$」:移动到光标所在行的行尾
- 「^」:移动到光标所在行的行首
- 「gg」:移动到文本开始
- 「Shift+g」/「G」:移动到文本末尾
- 「n+Shift+g」/「n+G」:移动到第n行行首
- 「n+Enter」:当前光标向下移动n行
- 「w」:光标从左到右,从上到下的跳到下一个字的开头
- 「e」:光标从左到右,从上到下的跳到下一个字的结尾
- 「b」:光标从右到左,从下到上的跳到上一个字的开头
删除相关
- 「x」:删除光标所在位置的字符
- 「nx」:删除光标所在位置开始往后的n个字符
- 「X」:删除光标所在位置的前一个字符
- 「nX」:删除光标所在位置的前n个字符
- 「dd」:删除光标所在行
- 「ndd」:删除光标所在行开始往下的n行
复制粘贴相关
- 「yy」:复制光标所在行到缓冲区
- 「nyy」:复制光标所在行开始往下的n行到缓冲区
- 「yw」:将光标所在位置开始到字尾的字符复制到缓冲区
- 「nyw」:将光标所在位置开始往后的n个字复制到缓冲区
- 「p」:将已复制的内容在光标的下一行粘贴上
- 「np」:将已复制的内容在光标的下一行粘贴n次
剪切
- 「dd」:剪切光标所在行
- 「ndd」:剪切光标所在行开始往下的n行
- 「p」:将已剪切的内容在光标的下一行粘贴上
- 「np」:将已剪切的内容在光标的下一行粘贴n次
撤销
- 「u」:撤销
- 「Ctrl+r」:撤销刚刚的撤销
大小写切换
- 「~」:完成光标所在位置字符的大小写切换
- 「n~」:完成光标所在位置开始往后的n个字符的大小写切换
替换
- 「r」:替换光标所在位置的字符
- 「R」:替换光标所到位置的字符,直到按下「Esc」键为止
更改
- 「cw」:将光标所在位置开始到字尾的字符删除,并进入插入模式
- 「cnw」:将光标所在位置开始往后的n个字删除,并进入插入模式
翻页
- 「Ctrl+b」:上翻一页
- 「Ctrl+f」:下翻一页
- 「Ctrl+u」:上翻半页
- 「Ctrl+d」:下翻半页
vim底行模式命令
行号设置
- 「set nu」:显示行号
- 「set nonu」:取消显示行号
保存退出
- 「w」:保存文件
- 「q」:退出vim,「q!」强制退出
- 「wq」:保存退出
分屏指令
- 「vs 文件名」:实现多文件的编辑
- 「Ctrl+w+w」:光标在多屏幕下进行切换
执行指令
- 「!+指令」:在不退出vim的情况下 可以在指令前面加上「!」就可以执行Linux的指令 例如查看目录 编译当前代码等
gcc / g++
gcc / g++的作用
gcc和g++分别是GNU的C和C++的编译器
语言从源文件到可执行指令要分为以下四个步骤
- 预处理 (去除注释 头文件展开 宏替换 条件编译)
- 编译 (将c/c++ 代码翻译成汇编代码)
- 汇编 (将汇编代码转化为二进制语言)
- 链接 (将汇编过程产生的二进制语言进行连接)
gcc / g++语法
gcc/g++ 选项 文件
- -E 只进行预处理 不生成文件 你需要把他重定向到一个输出文件里面(否则将把预处理后的结果打印到屏幕上)
- -S 编译到汇编语言
- -c 编译到目标代码(二进制文件)
- -o 将处理结果输出到指定文件 该选项后需紧跟输出文件名
- -static 此选项对生成的文件采用静态链接
- -shared 此选项将尽量使用动态库,生成文件较小
- -g 生成调试信息(若不携带该选项则默认生成release版本)
- -w 不生成任何警告信息
- Wall 生成所有警告信息
- -O0/-O1/-O2/-O3 编译器优化选项的四个级别 -O0表示没有优化 -O1为缺省值 -O3优化级别最高
gcc -E xxx.c -o xxx.i
gcc -S .s
gcc -c .o
预处理
预处理的作用包括下面四个
- 去除注释
- 头文件展开
- 宏替换
- 条件编译
gcc -E test.c -o test.i
编译
编译的作用包括下面两个
- 检查代码语法是否有错误
- 将代码翻译成汇编语言
代码如下
gcc -S test.i -o test.s
汇编
汇编的作用主要有一个
- 将汇编语言翻译成二进制语言
代码如下
gcc -c test.s -o test.o
链接
链接的作用主要有一个
- 将生成的 .o文件(二进制文件) 进行链接
代码如下
gcc test.o -o testhv
动态库和静态库
函数库一般分为静态库和动态库两种:
- 静态库是指编译链接时 把库文件的代码全部加入到可执行文件当中 因此生成的文件比较大 但在运行时也就不再需要库文件了 静态库一般以.a为后缀
- 动态库与之相反 在编译链接时并没有把库文件的代码加入到可执行文件当中 而是在程序运行时由链接文件加载库 这样可以节省系统的开销 动态库一般以.so为后缀
动态链接:
- 优点:省空间 bin体积小 加载速度快
- 缺点:依赖动态库 程序可移植性较差
静态链接:
- 优点:不依赖第三方库 程序的可移植性较高
- 缺点:浪费空间
我们的gcc/g++编译器默认使用的是动态链接
我们可以使用file指令查看
使用ldd指令来查看可执行文件所依赖的库
其中的 /lib64/libc.so.6就是c语言标准库
我们可以使用 -static指令来强制进行静态链接
gdb
debug和release
我们在C语言的学习阶段就知道了程序有两种发布版本
分别是 release 和 debug
- debug版本:程序本身会被加入更多的调试信息 以便于进行调试
- release版本:不会添加任何调试信息 是不可调试的
我们在linux中默认生成的文件都是release版本的 是不可以使用gbd调试的
如果我们想要它可被调试则需加入debug信息
具体指令如下
gcc test.c -o test -g
gdb指令
【进入gdb】
- gdb 文件名
【调试】
- 「run/r」:运行代码(启动调试)
- 「next/n」:逐过程调试
- 「step/s」:逐语句调试
- 「until 行号」:跳转至指定行
- 「finish」:执行完当前正在调用的函数后停下来
- 「continue/c」:运行到下一个断点处
- 「set var 变量=x」:修改变量的值为x (不常用)
【显示】
- 「list/l n」:显示从第n行开始的源代码 每次显示10行 若n未给出则默认从上次的位置往下显示
- 「list/l 函数名」:显示该函数的源代码
- 「print/p 变量」:打印变量的值
- 「print/p &变量」:打印变量的地址
- 「print/p 表达式」:打印表达式的值 通过表达式可以修改变量的值
- 「display 变量」:将变量加入常显示(每次停下来都显示它的值
- 「display &变量」:将变量的地址加入常显示
- 「undisplay 编号」:取消指定编号变量的常显示
- 「bt」:查看各级函数调用及参数
- 「info/i locals」:查看当前栈帧当中局部变量的值
【断点】
- 「break/b n」:在第n行设置断点
- 「break/b 函数名」:在某函数体内第一行设置断点
- 「info breakpoint/b」:查看已打断点信息
- 「delete/d 编号」:删除指定编号的断点
- 「disable 编号」:禁用指定编号的断点
- 「enable 编号」:启用指定编号的断点
【退出gdb】
- 「quit/q」:退出gdb
相关文章:
【Linux】-- 工具介绍 vim_gcc/g++_gdb
目录 Linux中的软件管理工具 – yum 在Linux下安装软件的方式 认识yum 查找软件包 安装 卸载 lrzsz.x86_64 rz sz Linux中的编辑器 – vim vim的基本概念 vim各模式切换 vim命令模式命令 vim底行模式命令 gcc / g gcc / g的作用 gcc / g语法 预处理 编译 汇…...
JAVA SE: IO流
一、Java流式输入输出原理Java对于输入输出是以流(Stream)的方式进行的,JDK提供各种各样的“流”类,以获取不同类型的数据。可以理解为将管道插入到文件中,然后从管道获取数据。这个管道外边还可以套管道,外边的管道对数据进行处理…...
打破原来软件开发模式的无代码开发平台
前言传统的系统开发是需要大量的时间和成本的,如今无代码开发平台的出现就改变了这种状况。那么你知道什么是无代码开发平台?无代码开发对企业来说有什么特殊的优势么?什么是无代码平台无代码平台指的是:使用者无需懂代码或手写代码,只需通…...
06-redux中的hook
知识点06-redux的hook 在函数组件中要和redux连接,分为两个步骤 前提状态机已经主备就绪 注入store到根组件 在函数组件中,使用Provider包裹根组件,并将store注入这一步,依旧是不能少的 import store from "./redux/store…...
watch监听不到数组对象的变化
watch监听不到数组对象的变化一、利用索引直接改变arr的值二、修改数组的长度arr.length三、添加和修改对象属性和值Vue不能监听到数组和对象值的变化其实和双向绑定的原理有关。Vue双向绑定原理是利用js中的Object.defineproperty重定义对象的GET和SET方法,而同时这…...
言语理解与表达之语句表达
考点一语句填空提问方式:填入划横线处最恰当的一句是( )1.横线在结尾:总结前文提出对策2.横线在开头:需概括文段的中心内容3.横线在中间:注意与上下文联系把握好主题词,保证文段话题一致实例1和…...
2023年全国最新食品安全管理员精选真题及答案14
百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 131.食品生产企业在一年内()次因违反《中华人民共…...
【MySQL】约束
文章目录1. 约束2. 非空约束 NOT NULL3. 唯一性约束 UNIQUE4. 主键约束 PRIMARY KEY5. 自增约束 AUTO_INCREMENT6. 外键约束FOREIGN KEY7. 默认值约束 DEFAULT8. 小结1. 约束 为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面…...
C语言学习(三)
#include <stdio.h> int main(void){int a; scanf("%d",&a); printf("%d",a); return 0;} 正在上传…重新上传取消正在上传…重新上传取消&符号作用是把键盘中输入的值给变量a,使用scanf()时输入数值,需要按一下enter…...
TOUGH系列软件建模及在地下水、CO2地质封存、水文地球化学、地热等多相多组分系统多过程耦合
TOUGH2系列软件传统地下水模拟软件Feflow和Modflow不同,TOUGH2系列软件采用模块化设计和有限积分差网格剖分方法,通过配合不同EOS模块,软件可以处理各种复杂地质条件下,诸如地热能开发,非饱和带水气运移、油气运移&…...
k8s学习之路 | k8s 工作负载 ReplicaSet
文章目录1. ReplicaSet 基础概念1.1 RS 是什么?1.2 RS 工作原理1.3 什么时候使用 RS1.4 RS 示例1.5 非模板 Pod 的获得1.6 编写 RS1.7 使用 RS1.8 RS 替代方案2. ReplicaSet 与 ReplicationController2.1 关于 RS、RC2.2 两者的选择器区别2.3 总结1. ReplicaSet 基础…...
python实现半色调技术图像转换
半色调技术 半色调技术是一种将灰度图像转换为黑白图像的技术。它是通过将灰度图像的像素值映射到黑白像素值上来实现的。 比如说,在一块只能显示纯黑或纯白的屏幕上,如何将一张灰度图显示出灰度的效果,这时就可以用半色调技术实现。 如下…...
c++面试技巧-基础篇
1.面试官:简述C语言的优缺点。 应聘者:C语言的优缺点如下。 • C语言的优点:C语言既保留了C语言的有效性、灵活性、便于移植等全部精华和特点,又添加了面向对象编程的支持,具有强大的编程功能,可方便地构…...
三八妇女节即将到来,跨境电商如何玩转节日营销?
随着国际妇女节的到来,跨境电商商家们都开始了为自己的店铺进行节日营销的准备。商家做节日营销的目的都是一样的,无非都是增加曝光率,拉动客流,增加营业额。但是每一个节日营销的形式是可以不一样的。今年有什么营销玩法呢&#…...
【Java学习笔记】10.条件语句 - if...else及switch case 语句
前言 本章介绍Java的条件语句 - if…else和switch case 语句。 Java 条件语句 - if…else Java 中的条件语句允许程序根据条件的不同执行不同的代码块。 一个 if 语句包含一个布尔表达式和一条或多条语句。 语法 if 语句的语法如下: if(布尔表达式) {//如果布…...
解析STM32启动过程
相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化。ARM7/ARM9内核的控制器在复位后,CPU会从存储空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x…...
微信小程序开发自学笔记 —— 八、小程序基础库的更新迭代
小程序基础库的更新迭代 小程序基础库 小程序的运行环境是分成渲染层和逻辑层的,在渲染层可以用各类组件组建界面的元素,在逻辑层可以用各类API来处理各种逻辑,组件、API其实都是小程序基础库进行包装提供的,基础库的职责还要处…...
Mysql迁移Postgresql
目录原理环境准备操作系统(Centos7)Mysql客户端安装Psql客户端安装数据库用户空字符串处理成null导表脚本dbmysql2pgmysqlcopy测试在mysql中建表导表测试查看pg中的表原理 Mysql抽取:mysql命令重定向到操作系统文件,处理成csv文件; PG装载&a…...
关于信息安全认证CISP、PTE对比分析
CISP 注册信息安全专业人员 CISP-PTE 注册渗透测试工程师(以下简称PTE) 1 、发证机构 CISP与PTE的发证机构都是中国信息安全测评中心,政府背景给认证做背书,学员信息都在中国政府可控的机构手中; 如果想在政府、国…...
游戏场景编辑器和骨骼动画相关软件
游戏场景编辑器 一.Tiled(2D) Tiled 是帮助你开发游戏内容的 2D 地图编辑器。它的主要功能是可以编辑各种形式的瓦片地图,还支持通过用空图片这种强大的方式来标记额外信息给游戏使用。Tiled 关注的是总体灵活性,同时尽量保持直观性。 Tiled Map 不但…...
vue3常用的API
目录 1.ref函数 2.reactive函数 3.reactive对比ref 4.computed函数 5.watch函数 6.toRef 7..provide && inject 1.ref函数 作用: 定义一个响应式的数据 语法: const xxx ref(initValue) 创建一个包含响应式数据的引用对象(reference对象ÿ…...
Qt中使用
LIB库路径,include 头文件,运行的时候记得吧dll库带上,这基本就完成了。准备工作:Qt可以是傻瓜式的安装就行,GE的驱动里面有exe,直接点击安装即可,完了记得到安装路径把“.h”“.liib”和“.dll…...
controller-runtime搭建operator开发环境
目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式,而Manager可以用来管理Controller、Admission Webhook,包括访问资源对…...
FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持
目录1、前言2、设计思路和框架3、vivado工程详解4、上板调试验证并演示5、福利:工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简…...
Django 之 CharField 和 TextField
CharField test_char models.CharField(max_length288)设置长度为 288 并不会报错,这取决于你的数据库后端,mysql char 类型长度为 255,django 里面设置超过 255 并不会有提示,个人感觉有点误导人,起码给个警告也行&…...
recyclerview 使用的坑
1.有不同的布局 12_GridLayoutManager setSpanSizeLookup()方法 - 简书 setSpanSizeLookup 这个方法要会 spanCount和 getSpanSize spanCount/getSpanSize() 才是这一项所占的宽度 2.均分 item布局要设置宽度为match_paraent 3.设置完了。发现高度不一样,…...
DBeaver连接mysql、oracle数据库
1. DBeaver连接mysql 1) 下载DBeaver https://dbeaver.io/download/,并安装 2) 新建数据库连接 3)选择mysql驱动程序 4)填写连接设置内容 5)点击 “编辑驱动设置”,并填写相关信息 6)选择本地…...
Kivy GridLayout 布局
Kivy GridLayout 是一种用于构建用户界面的布局类型,可以帮助我们快速创建具有固定列和行的网格布局。GridLayout 布局是可以适用于任意数量的行和列的布局,然后在这些行和列中放置 UI 元素。 Kivy 的 GridLayout 使用起来类似于 HTML 的表格,…...
Spark高手之路2—Spark安装配置
文章目录Spark 运行环境一、Local 模式1. 下载压缩包2.上传到服务器3. 解压4. 启动 Local 环境5. 命令行工具6. 退出本地模式7. 提交应用二、Standalone 模式1. 解压2. 修改配置文件1)进入解压缩后路径的 conf 目录,复制 workers.template 文件为 worker…...
Java中对象的比较
目录元素的比较基本类型的比较引用类型的比较1. 覆写基类的equals2. 基于Comparble接口类的比较3. 基于比较器比较三种方法对比元素的比较 基本类型的比较 这里就拿整型, 字符型, 布尔型 为例: public static void main(String[] args) {int a 10;int b 20;System.out.pri…...
苏州网络网站建设/seo内容优化方法
大家好,我偶然发现了一个很酷的jQuery插件,称为innerfade。 基本上,它旋转存储在列表中的元素,这些元素可能是文本,图像,链接等。 可以与任何容器标签(例如divs或uls),所…...
罗定建设局网站/最新做做网站
文章目录使styled-component 像SPA中使用step1 安装插件step2 根目录下创建 .babelrcstep3 创建page/_document.js自定义 Document参考 特别感谢[应用主题] 需完成上一步使styled-component 像SPA中使用 step1 安装插件 yarn add babel-plugin-styled-componentsstep2 根目录…...
wordpress站点路径/网站运营指标
1.设定文件系统配额,只能针对磁盘独自分区的文件系统 不能针对文件 目录 未分区磁盘 <1>.实现home家目录的迁移 迁移之前实行备份 --新建一分区sdc2 --创建文件系统 --创建目录并挂载 --拷贝 --切换单一模式 备份后删除以前家目录 并将挂载写入/etc/fstab --重…...
做网站站主需要什么条件/南宁seo推广公司
概念 RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。ROM(Read-Only Memory)即只读内存,是一种只能读出事先所存数据的固态半导…...
网络规划设计师历年真题百度网盘/北京网站优化外包
“世界不能没有开源”,“开源正在杀死软件开发”,“开源不过是一些理想主义者的美梦”,“你开源我赞美,要我开源我不干”。关于开源,我们能聊的太多。而“中国化”的开源,却总是受到不少的质疑与诋毁。但在…...
湖南seo网站策划/网络推广方案模板
vs2017有独立的python环境;所以想在vs2017开发python并使用第三方包,需要在vs2017中操作,完成第三方包的安装。 一,查看vs2017有哪些版本的python,当前使用的是哪个版本 工具--》Python--》Python环境 可以看到vs2017包…...