Linux——环境开发基础(vim、gcc、yum、git、gdb)

目录

1.Linux编辑器——vim使用 

2.Linux编译器——gcc/g++

3.Linux项目自动化构建工具——make/Makefile

4.Linux软件包管理器——yum

5.Linux调试器——gdb


前言:因为篇幅原因,本文着重列出命令,小伙伴下去自己尝试,只有多使用才能真的记住! 

1.Linux编辑器——vim使用 

vim是一款多模式的编辑器

——命令模式(默认打开的模式

——编辑/插入模式(输入i)(输入ESC回退到命令模式)

——底行模式(输入shift + :)(输入ESC回退到命令模式)

——替换模式(shift+r)


常见命令:(括号里的相当于解释,在输入命令时不需要)

yy:将当前光标所在的行,复制          nyy(n代表具体数字,复制n行)

p:将复制行进行粘贴                         np(复制n倍)

dd:将当前光标所在的行进行剪切(删除)  ndd(删除n行)+p(删除粘贴->剪切)

u:撤销操作

ctrl+r:撤销u操作

shift+g:光标定位到文件的结尾            

n+shift+g:光标定位到文件的任意行

gg:光标定位到文件的最开始

shift+6(^):将光标定位达到当前行的最开始

shift+4($):将光标定位到当前行的最结尾

w,b:以单词位单位进行光标的前后移动(w后,b前)

h,j,k,l:左,下,上,右

shift+~:大小写切换

shift+r:进入替换模式

r:替换光标所在的字符                      nr(替换n个字符)

x:删除光标所在的字符(从左到右)  nx(删除n个字符)

shift+x(X):删除光标所在的字符(从右到左)


底行模式:(光标在哪个屏就是哪个文件的底行)

set nu:显示行号

set nonu:取消行号

vs 文件名:分屏操作

w:写入    w!强制写入

q:退出    q!强制退出

ctrl+w+w:多分屏切换光标

!cmd(cmd是执行命令):不退出vim执行对应的命令(执行命令行,编译,允许,查看man)等


可视模式: ctrl+v(未完待补充)

vim的多行注释:

    命令模式下ctrl+v进入可视化模式

    使用hjkl选中需要的区块

    shift+i进入插入模式

    //输入注释,按下Esc实现多行注释

vim的取消多行注释:

    命令模式下ctrl+v进入可视化模式

    使用hjkl选中需要的区块

    直接按x或者d就可以直接删除,再按Esc退出

2.Linux编译器——gcc/g++

g++没有输入命令:

sudo yum install -y gcc-c++

gcc没有输入命令:

sudo yum install -y gcc

gcc是一个专门用来编译链接c语言的编译器

程序翻译的过程:

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

1.预处理(a.去注释    b.宏替换    c.头文件展开    d.条件编译 ...)

——预处理了还是C语言吗?

答:还是C语言

2.编译(C->汇编)

3.汇编(汇编->可重定向二进制目标文件)

4.链接(链接->多个.o,.obj->合并形成一个可执行).exe

查看版本:

gcc -v
g++ -v

gcc 源文件 -o 可执行文件        #形成可执行文件

 

或者可以这样写:gcc -o 可执行文件 源文件

预处理:

#-E:从现在开始进行程序的翻译,如果预处理完成就停下来!

gcc -E 源文件 -o 临时文件.i(预处理文件)

编译:

#-S:从现在开始进行程序的翻译,如果编译完成就停下来!

gcc-S 临时文件.i -o 临时文件.s

汇编:

#-c:从现在开始进行程序的翻译,如果汇编完成就停下来!

gcc -c 临时文件.s -o 可重定向可执行文件.o(二进制)

链接:

gcc . o文件 -o 可执行程序


动静态库:

ldd 可执行程序——查看库

file 可执行程序——查看使用什么链接方式

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

a.动态链接——需要动态库(.so)    windows下:.dll

b.静态链接——需要静态库(.a)      windows下:.lib

动态链接:将库中我要的方法的地址,填入我的可执行程序中,建立关联!(节省资源)

静态链接:将库中方法的实现,真的拷贝到我们的可执行程序中!(占用资源)


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

如何静态链接?加—static!

-static:表明使用静态链接的方式形成可执行程序!

 

你的机器可能因为没有静态库,而导致链接失败!

动态链接必须使用.so动态库文件

静态链接必须使用.a静态库文件

sudo yum install -y glibc-static             #C静态库
sudo yum install -y libstdc++-static     #C++静态库

3.Linux项目自动化构建工具——make/Makefile

make是一个命令

Makefile是一个文件

存在价值:自动化的构建项目

编写Makefile:a.依赖关系    b.依赖方法

make自顶向下扫描,只会自动形成第一个遇到的目标

要想生成下面的:make 目标

.PHONY总是被执行的!

——总是会根据依赖关系执行依赖方法!

——习惯:给clean设置.PHONY

Makefile如何知道我们的可执行程序是最新的??

——根据文件的修改时间(比较可执行程序和源文件的时间,源文件时间比可执行程序晚就会执行make

 

Access:访问时间

Modify:内容修改时间

Change:属性修改时间

 

多文件Makefile:

 

执行结果:

 


4.Linux软件包管理器——yum

1.你要下载安装的软件是在你的电脑上面吗?

    不是,是在软件开发平台

2.如果不在,你怎么知道在哪里的?

    我不知道,yum知道

3.谁放的?

    Linux社区或者对应的开发人员

yum作用:a.搜索,下载,安装    b.解决依赖关系

一般原生的Linux系统,内置的下载链接基本都是自己配套的国外的网址

yum的操作

yum源:一个配置文件 

查看yum源:ls /etc/yum.repos.d

yum三板斧:

1.#yum list | grep xxxx            查找yum列表

2.#sudo yum install -y 安装软件

3.#sudo yum remove 你的软件         #移除


git——版本控制器

    雷纳斯托瓦丝,自己着手写一个版本控制器!——git

git三板斧:

#git clone 你的git仓库链接

1.#git add 你的文件  #添加我们的代码到本地仓库,git add .把所有文件到本地仓库

2.#git commit -m “这里必须写提交日志"

3.#git push                                                    #提交我们的代码到远端仓库

git log                            #查看提交记录

冲突解决:

git pull                            #同步 

阻止一些后缀文件上传:在.gitignore文件中

git rm   #可以删除


5.Linux调试器——gdb

 

gcc,g++默认形成的可执行程序搜索release的!故无法直接被调试!(默认动态链接形成)

要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项

 

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

gdb命令:

quit:退出

r:开始调试,如果没有设置断点,就直接运行结束!
l:查看代码
b+行号:给特定的行号打断点
info b:查看断点(包含断点的编号)
d 断点编号:删除断点
n:逐过程,等同VS的F10
p 变量名:打印变量内容
s:逐语句,等同VS的F11 
bt:查看当前的调用堆栈
finish:将当前函数跑完,就停下来
display:设置长显示
undisplay 编号: 取消长显示
until:跳转到指定行
c:运行至下一个断点处会停下来!
disable/enable 断点的编号:使能(关闭和打开)断点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/43024.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于K8s的Pod的详解(一)

关于K8s的Pod的详解(一) Pod和API server的通信加快Pod启动更改Pod的资源Pod 的持久卷的单个访问模式Pod 拓扑分布约束Pod 拓扑分布中的最小域数 Pod 作为k8s创建,调度,管理的基本单位。由上级的Controller对Node上安装的Kubelet发…

绘出「星辰大海」:华为云Astro轻应用新手指南-第一章

第1章 旅程的开端 发现Astro轻应用地图 第1站:创建账户 首先,你需要在华为云Astro官网注册专属账号。若已有华为账户,可直接登录。 在官网点击「立即使用」,即可跳转至「登录界面」 在「登录界面」点击「注册」,注册…

csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

文章目录 ⭐前言⭐利用inscode免费开放资源💖 在inscode搭建vue3tsant项目💖 调整配置💖 antd 国际化配置💖 用户store💖 路由权限💖 预览 ⭐结束 ⭐前言 大家好,我是yma16,本文分享…

【架构基础】架构概念

软件架构产生的背景 1972年图灵奖获得者、荷兰计算机科学家Edsger Wybe Dijkstra早在20世纪60年代就开始涉及软件架构概念了。 20世纪60年代第一次软件危机引出了结构化编程,创造了模块的概念。 20世纪80年代第二次软件危机引出了面向对象编程,创造了…

Tensorflow无人车使用移动端的SSD(单发多框检测)来识别物体及Graph的认识

环境是树莓派3B,当然这里安装tensorflow并不是一定要在树莓派环境,只需要是ARM架构就行,也就是目前市场上绝大部分的嵌入式系统都是用这套精简指令集。 在电脑端的检测,有兴趣的可以查阅SSD(Single Shot MultiBox Detector)系列&a…

【转载】elasticsearch 倒排索引原理

由于整型数字 integer 可以被高效压缩的特质,integer 是最适合放在 postings list 作为文档的唯一标识的,ES 会对这些存入的文档进行处理,转化成一个唯一的整型 id(这个id是document的id)。 再说下这个 id 的范围&…

【C语言】程序环境和预处理

👀℉f:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》 🌝每一个不曾起舞的日子,都是对生命的辜负。 目录 前言: 一、程序的翻译环境和执行环境 二、详解编译链接 (一…

ORB-SLAM2学习笔记4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹

文章目录 0 引言1 KITTI数据集1.1 下载数据1.2 真值轨迹格式转换 2 单目ORB-SLAM22.1 运行ORB-SLAM22.2 evo评估轨迹(tum格式)2.2.1 载入和对比轨迹2.2.2 计算绝对轨迹误差 3 双目ORB-SLAM23.1 运行ORB-SLAM23.2 evo评估轨迹(kitti格式)3.2.1 载入和对比轨迹3.2.2 计算绝对轨迹…

Microsoft Edge 浏览器的Bing Chat

微软公司持续发力,推出的产品 Bing Chat 与 ChatGPT 之间的竞争愈发激烈。如今,微软不仅不断更新 Edge 浏览器,还将 Bing Chat 内置在边栏中,方便用户快速访问。这一举措不禁让人想起,Edge 浏览器如今已经是一款名副其…

探索AI图像安全,助力可信AI发展

探索AI图像安全,助力可信AI发展 0. 前言1. 人工智能发展与安全挑战1.1 人工智能及其发展1.2 人工智能安全挑战 2. WAIC 2023 多模态基础大模型的可信 AI2.1 WAIC 2023 专题论坛2.2 走进合合信息 3. AI 图像安全3.1 图像篡改检测3.2 生成式图像鉴别3.3 OCR 对抗攻击技…

动态规划入门第1课

1、从计数到选择 ---- 递推与DP(动态规划) 2、从递归到记忆 ---- 子问题与去重复运算 3、动态规划的要点 第1题 网格路1(grid1) 小x住在左下角(0,0)处,小y在右上角(n,n)处。小x需要通过一段网格路才能到小y家。每次,小x可以选…

【学会动态规划】最小路径和(9)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

视频增强技术-去噪

本文介绍了关于视频增强技术的相关方法包括传统方法和基于深度学习的方法,并给出了他们的对比实验结果,最后对它们简单的做了总结,文中有一些图片和总结来自于网上其他博主的文章,已在文中标记并给出了相关的原文链接,…

JAVA SE -- 第十天

(全部来自“韩顺平教育”) 一、枚举(enumeration,简写enum) 枚举是一组常量的集合 1、实现方式 a.自定义类实现枚举 b.使用enum关键字实现枚举 二、自定义类实现枚举 1、注意事项 ①不需要提供setXxx方法&#xff…

开源QianWei搭建音乐网站,并实现公网连接

开源QianWei搭建音乐网站,并实现公网连接 1、前言2、本地网页搭建2.1环境使用2.2 支持组建选择2.3 网页安装 3、本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4、公网访问测试5、结语 1、前言 音乐是我们生活和工作中不可或缺的调剂,它能让我们心…

155、基于STM32单片机老人防跌倒摔倒GSM短信报警系统ADXL345加速度设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图 六、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 单片机主芯片选…

【PostgreSQL内核学习(六)—— 工具使用学习】

工具使用学习 工具使用学习安装中出现的问题 声明:本文的工具学习内容来自于《小宇带你学pg内核分析》 工具的代码仓库链接为: https://github.com/shenyuflying/pgNodeGraph 此外,我还参考了以下文章: https://rng-songbaobao.bl…

Mac配置Latex环境教程2023

第一步:安装MacTex 官网:https://www.tug.org/mactex/ 第二步:安装编译器:Texpad xclient官网下载Texpad:https://xclient.info/s/texpad.html 第三步:开始使用 LeTex \documentclass{article}\begin{do…

rabbitmq模块启动报java.net.SocketException: socket closed的解决方法

问题 最近在接手一个项目时,使用的是spring-cloud微服务构架,mq消息消费模块是单独一个模块,但启动这个模块一直报如下错误: java.net.SocketException: socket closed 这个错误是这个模块注册不到nacos报的错,刚开…

在Debian 12 上安装 PHP 5.6, 7.4

环境:Debian 12 Debian 12 默认的PHP版本为 8.2 如果直接安装php7.4就出现下面的报错: sudo apt-get install libapache2-mod-php7.4 php7.4 php7.4-gd php7.4-opcache php7.4-mbstring php7.4-xml php7.4-json php7.4-zip php7.4-curl php7.4-imap p…