当前位置: 首页 > news >正文

Linux:工具(vim,gcc/g++,make/Makefile,yum,git,gdb)

目录

---工具功能

1. vim

1.1 vim的模式

1.2 vim常见指令

2. gcc/g++

2.1 预备知识

2.2 gcc的使用

3.make,Makefile

make.Makefile的使用

4.yum

--yum三板斧

5.git

--git三板斧

--Linux下提交代码到远程仓库

6.gdb

6.1 gdb的常用指令


学习目标:

1.知道这些工具的功能

2.掌握这些工具的基本使用

---工具功能

编写代码         -- vim

编译代码         -- gcc ,g++

调试代码         -- gdb

代码管理         -- git

运行/自动化构建程序 --make/Makefile

1. vim

1.1 vim的模式

1.命令行模式  2.编辑模式   3.低行模式

1.2 vim常见指令

--默认打开

1.命令模式(默认打开的模式)

--输出 i 即可写代码 (编辑/插入模式)

--回到命令模式:按Esc

--退出:在命令模式当中输出shift + :

-w 保存 -q 退出 -wq 保存并退出 -!强制

--命令行模式指令

--编辑

  • yy:将当前光标所在的行,复制                  nyy(n表示具体的数字)
  • p:将复制行进行粘贴                                  np
  • dd:将当前光标所在的行,剪切(删除)   ndd(删除/剪切n行)
  • u:撤销历史操作
  • ctrl + r :撤销u操作
  • shift + ~ :大小写切换
  • shift + r:替换(进入替换模式)
  • r:替换光标所在的字符,支持nr
  • x or X(shift + x):删除光标所在的字符,包括之前或者之后 支持nx

--光标移动

  • gg:光标定位到文件的最开始
  • shift + g :光标定位到文件的结尾
  • n + shift + g :光标定位到文件的任意行
  • shift + 6(^):光标定位到当前行的最开始(上)
  • shift + 4 ($):光标定位到当前行的最结尾(下)
  • w,b:以单词为单位进行光标的前后移动(左右)
  • h左,j下,k上,l 右

--底行模式

  • set nu/nonu :调出行号,或者取消行号
  • vs 文件名 :分批操作
  • w:写入,w!(强制)
  • q:退出, q!(强制)
  • ctrl + ww :光标跳转
  • !  +  cmd:不退出vim执行对应的指令(执行命令,编译,运行,查看man手册)

示例:

--set nu/nonu :调出行号,或者取消行号

set nu/nonu   显示/取消行号

--vs 文件名 :分批操作

vs  +  文件名     分批操作

--ctrl + ww :光标跳转

ctrl + ww    //光标跳转

-- !  +  cmd:不退出vim执行对应的指令

! man 3 printf

2. gcc/g++

2.1 预备知识

gcc是一个专门编译链接C语言的编译器 g++(C++)

一、程序翻译过程:

文本的C -->计算机二进制

  • 1.预处理:(a.去注释 b.宏替换 c.头文件展开 d.条件编译)
  • 2.编译(C ->汇编)
  • 3.汇编(汇编 -> 可重定向二进制目标文件)
  • 4.链接(链接 -> 多个.o ,.. ,.obj ->合并成一个可执行).exe

(gcc/g++ 也要遵守)


二、动静态库 --- (感性的认识)

  • 动态链接:将库中我要的方法地址,填入到我们的可执行程序中,建立关联(节省资源)
  • 静态链接:将库中方法的实现,拷贝到我们的可执行程序中

一般链接的过程,两种方式:

a.动态链接         -         需要动态库

b.静态链接         -         需要静态库

Linux: .so(动态库) .a(静态库)

windows: .dll(动态库) .lib(静态库)

注:gcc和g++默认形成的可执行程序是动态链接的

2.2 gcc的使用

gcc 文件名 -o 新生成的文件名

其它选项:

  • gcc -E mytest.c -o mytest.i (预处理)开始翻译直到预处理完成
  • gcc -S mytest.i -o mytest.s (编译)开始翻译直到编译完成
  • gcc -c mytest.s -o mytest.o (汇编)开始翻译直到汇编完成
  • gcc mytest.o -o mytest.o (链接)  (mytest.o 可重定向目标文件)

示例:

gcc test2.c -o test2

3.make,Makefile

make.Makefile的使用

1.make && makefile

make是一个命令

makefile是一个文件

--使用

touch Makefile         建立Makefile文件

vim Makefile             编写Makefile(a.依赖关系 b.依赖方法)

mytest:test.c (依赖关系)gcc test.c -o mytest (依赖方法).PHONY:clean(伪目标)
clean:rm -f mytest       

调用:

make (构建)
make clean (清理)

makefile指令是从上到下扫描的

注:clean 总是被执行的:总是会根据依赖放关系,执行依赖方法

--在上面的例子里,可以重复执行clean,但不能重复执行mytest(没被.PHONY修饰)

        --你在Makefile中定义一个目标,与当前目录中存在同名的文件时,Make会默认认为这个目标是一个文件,并尝试根据文件的时间戳来判断是否需要重新构建。

提问:makefile是如何知道我的文件是最新的?

--根据最新的修改时间

示例:

1.创建Makefile

touch Makefile

2.编写Makefile

vim Makefile

3.调用:根据写好的Makefile自动生成可执行文件,并进行清理:

make     //构建

make clean  //清理

--可以重复执行make clean(其被.PHONY修饰)

通过使用.PHONY,告诉Make,这个目标是伪目标,不要期望生成一个同名文件,只需执行其中定义的命令。

4.yum

--yum三板斧

1.yum list 列出能下的软件

--yum list | grep sl (将所有包含sl文件的名称显示出来)

2.yum install

-- sudo yum install -y                 安装软件(-y表示默认认可,不需要再问用户)

3. yum. remove 你的软件         移除软件(一般要加sudo)

5.git

--说明

git用于管理代码,git的精华:多人协作开发,(学习阶段,大多数自己写代码,暂不涉及

下面说明怎么使用git提交代码到自己的远程仓库

--git三板斧

正常情况:

  • git add 你的文件 #添加我们的代码到本地仓库
  • git commit -m "这里必须写提交日志"
  • git push

其它情况:

  • 1.git log #查看提交记录
  • 2.git pull #同步仓库
  • 3.git rm 文件 #删除本地仓库的文件

删除本地仓库文件后,再git commit -m " 日志" git push

远程仓库里的文件会被删除

--.gitignore # 不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore

修改本地仓库文件后,再add,commit,push就能将远程仓库的文件修改

--若出现提交失败,可能是仓库未同步,git pull再提交

--Linux下提交代码到远程仓库

配置环境:

第一次提交需要输入下面的指令:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

这两个自行输入即可(这个是用来说明你是谁的,git支持多人协作,查看日志的时候可以看到是谁提交的代码)

在克隆仓库/提交代码的时候,应该会让你输入你gitee的账号名和密码(根据它的提升输入即可)

1.在Linux环境下输入:git clone 仓库网址

这里可以看到就把仓库克隆过来了

git仓库就是.git 文件

2.使用三板斧提交写好的文件就行:

git add test.cgit commit -m "提交测试"git push

这里push后要求输入gitee的用户名和密码

然后就把写好的文件提交到远程仓库了

6.gdb

6.1 gdb的常用指令

gdb 文件名 (调试)

  •  l 0                                  --从第0行开始显示代码
  • r                                      --开始调试,如果没有设置断点,就直接运行结束
  • b 行数                             --打断点 (会形成断点编号,可用info查看)
  • info b                               --查看断点
  • d 断点编号                      --删断点
  • disable 断点编号            --使能(打开)
  • enable 断点编号             -- 关闭
  • p 变量名                          --打印变量内容:
  • n                                      --逐过程 (相当于vs中的F10)
  • s                                      --进入函数(相当于vs中的F11)
  • bt                                     --查看当前调用的堆栈
  • finish                                --函数跑完就停下
  • display 名称                     --设置常显示
  • undisplay 编号                 --取消常显示
  • until 行数 (不建议)      --跳到指定行数
  • c                                      --运行到下一个断点出就停下来
  • quit                                  --退出

补充:

--gdb会记录最近一条命令,如果命令无变化,可以直接回车

修改特定变量:set var 变量 = 数值(vs中监视窗口,可以给变量赋值查看)

示例:

因为gcc,g++默认形成的可执行程序式release的,所以无法直接调试

解决:使用gcc编译的时候,添加-g 选项,将其改为debug方式发布

我写了一个打印1-100的和的文件,现在对其调试

先编译,生成debug版本的运行文件

 gcc  test.c  -o   test -g   //生成Debug版gdb  test

-- l  0 (从第0行开始显示代码)

--打断点: b 行数

--查看断点 info b

--删断点 d 断点编号

--打印变量内容: p 变量名

--逐过程 n (相当于vs中的F10)

--进入函数 s (相当于vs中的F11)

--查看当前调用的堆栈 bt

--函数跑完就停下 finish

--设置常显示 display 名称

--取消常显示 undisplay 编号

--运行到下一个断点出就停下来 c

这里我打了两个断点:(17,19行)

使用c后直接跳转到下一个断点19

补充:

gcc和g++默认形成的可执行程序是动态链接的

gcc,g++默认形成的可执行程序式release的,所以无法直接调试

相关文章:

Linux:工具(vim,gcc/g++,make/Makefile,yum,git,gdb)

目录 ---工具功能 1. vim 1.1 vim的模式 1.2 vim常见指令 2. gcc/g 2.1 预备知识 2.2 gcc的使用 3.make,Makefile make.Makefile的使用 4.yum --yum三板斧 5.git --git三板斧 --Linux下提交代码到远程仓库 6.gdb 6.1 gdb的常用指令 学习目标: 1.知道…...

小节1:Python字符串打印

1、字符串拼接 用可以将两个字符串拼接成一个字符串 print("你好 " "这是一串代码") 输出: 2、单双引号转义 当打印的字符串中带有引号或双引号时,使用\或\"表示 print("He said \"Let\s go!\"") 输…...

2023国赛C题解题思路代码及图表:蔬菜类商品的自动定价与补货决策

2023国赛C题:蔬菜类商品的自动定价与补货决策 C题表面上看上去似乎很简单,实际上23题非常的难,编程难度非常的大,第二题它是一个典型的动态规划加仿真题目,我们首先要计算出销量与销售价格,批发价格之间的…...

数据可视化工具中的显眼包:奥威BI自带方案上阵

根据经验来看,BI数据可视化分析项目是由BI数据可视化工具和数据分析方案两大部分共同组成,且大多数时候方案都需从零开始,反复调整,会耗费大量时间精力成本。而奥威BI数据可视化工具别具匠心,将17年经验凝聚成标准化、…...

LeetCode算法心得——生成特殊数字的最少操作(贪心找规律)

大家好,我是晴天学长,这是一个简单贪心思维技巧题,主要考察的还是临场发挥的能力。需要的小伙伴可以关注支持一下哦!后续会继续更新的。 2) .算法思路 0 00 50 25 75 末尾是这两个的才能被45整除 思路:分别找&#x…...

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献 1 题目 1.1 问题背景 多波束测深系统是利用声波在水中的传播特性来测量水体深度的技术,是在单波束测深的基础上发展起来的,该系统在与航迹垂直的平面内一次能发射出数十个乃至上百个…...

如何处理异步编程中的回调地狱问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 解决回调地狱问题的方法⭐使用 Promise⭐使用 async/await⭐ 使用回调函数库⭐模块化⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端…...

什么是Lambda表达式?

Lambda表达式是Java 8引入的一个重要特性,用于简化函数式编程中的匿名函数的定义和使用。它可以被视为一种轻量级的匿名函数,可以作为参数传递给方法或存储在变量中。 Lambda表达式的语法形式如下: (parameters) -> expression 或 (para…...

公式trick备忘录

增大不同class feature之间的距离用hinge loss 相关, similarity learning, svm https://www.youtube.com/watch?vQtAYgtBnhws https://www.youtube.com/watch?vbM4_AstaBZo&t286s...

向量数据库Milvus Cloud核心组件再升级,主打就是一个低延迟、高准确度

支持 ScaNN 索引 Faiss 实现的 ScaNN,又名 FastScan,使用更小的 PQ 编码和相应的指令集可以更为友好地访问 CPU 寄存器,从而使其拥有优秀的索引性能。该索引在 Cohere 数据集,Recall 约 95% 的时候,Milvus 使用 Knowhere 2.x 版本端到端的 QPS 是 IVF_FLAT 的 7 倍,HN…...

ELK框架Logstash配合Filebeats和kafka使用

ELK框架Logstash配合Filebeats和kafka使用 本文目录 ELK框架Logstash配合Filebeats和kafka使用配置文件结构input为标准输入,output为标准输出input为log文件output为标准输出output为es input为tcpspringboot配置logstash配置 input为filebeatsfilebeats配置logsta…...

后端面试话术集锦第 十二 篇:java基础部分面试话术

这是后端面试集锦第十二篇博文——java基础部分面试话术❗❗❗ 1. String类中常用的方法 split():把字符串分割成字符串数组 indexOf():从指定字符提取索引位置 trim():去除字符串两端空格 replace():替换 hashCode():返回此字符串的哈希码 subString():截取字符串 equa…...

【广州华锐互动】电厂三维数字孪生大屏的功能和优势

在工业互联网的背景下,电厂三维数字孪生大屏系统正在逐渐成为电力行业的重要技术。通过创建电厂的虚拟模型,这个数字孪生系统可以实现对实际电厂的实时监控,预测维护需求,优化运营效率,甚至在某些情况下,能…...

es6解构用法

一: 解构数组 二:解构对象 一: 解构数组 原理:模式(结构匹配), 索引值相同的完成赋值 总结:位置对应 二:解构对象 原理:模式(结构匹配), 属性名相同的完成赋值 {}{} 对象结构赋值的应用 常用的就以上两种 &#…...

a_bogus 音 算法还原大赏

a_bogus算法还原大赏 hello,大家好呀,我是你的好兄弟,[星云牛马],花了几天时间算法还原了这个参数的加密过程,一起看看吧,记得加入我们的学习群:529528142 天才第一步,F12你会不&am…...

【计算机网络】UDP协议详解

目录 前言 端口号的拓展 端口号范围划分 netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 前言 我们前面讲完了http和https协议,它们都属于应用层,按照TCP/IP五层模…...

2023-9-8 满足条件的01序列

题目链接&#xff1a;满足条件的01序列 #include <iostream> #include <algorithm>using namespace std;typedef long long LL;const int mod 1e9 7;int qmi(int a, int k, int p) {int res 1;while(k){if(k & 1) res (LL) res * a % p;a (LL) a * a % p;…...

获取街道、乡镇级的地图geoJson数据,使用echarts绘制地图

在此以泰州靖江市为例为例&#xff0c;记录一下实现过程 1、整体完成后实现的效果如下 2、获取数据 &#xff08;1&#xff09;DataV.GeoAtlas 第一个能想到的获取数据的网站就是它&#xff0c; 是阿里推出的一个用于获取全国、各省、各市以及个县级市详细地图信息的json文…...

DBMS_RESOURCE_MANAGER

参考文档&#xff1a; Database Administrator’s Guide 27 Managing Resources with Oracle Database Resource Manager 27.5.5 Creating a Resource Plan BEGINDBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN > bugdb_plan,…...

通俗讲解傅里叶变换

参考:六一礼物:给孩子解释什么是傅里叶变换 牛!不看任何数学公式来讲解傅里叶变换 如何直观形象、生动有趣地给文科学生介绍傅里叶变换? - 知乎 从基说起…… 从数学的角度,提供一个形象有趣的解释。理解傅里叶变换的钥匙是理解基♂,它能让你重新认识世界。 1. 什么是…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...