【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 不但…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...

安宝特案例丨寻医不再长途跋涉?Vuzix再次以AR技术智能驱动远程医疗
加拿大领先科技公司TeleVU基于Vuzix智能眼镜打造远程医疗生态系统,彻底革新患者护理模式。 安宝特合作伙伴TeleVU成立30余年,沉淀医疗技术、计算机科学与人工智能经验,聚焦医疗保健领域,提供AR、AI、IoT解决方案。 该方案使医疗…...
Ubantu-Docker配置最新镜像源250605
尝试其他镜像加速器 阿里云镜像加速器:登录阿里云,进入容器镜像服务获取专属加速器地址。毫秒镜像:https://docker.1ms.run。DockerHub镜像加速器:https://docker.xuanyuan.me。Docker Hub 镜像加速服务:https://dock…...

深度学习学习率优化方法——pytorch中各类warm up策略
warm-up具体原理以及为什么这么做在之前的博客有介绍,这里直接介绍如何直接使用pytorch中的warm-up策略,在pytorch中对于warm-up所有支持的方法都有描述,可以直接阅读1。 深度学习中各类学习率优化方法(AdaGrad/RMSprop/Adam/Warm-UP)原理及其…...