【linux】linux开发工具的使用

article/2025/11/5 16:08:42

linux开发工具的使用

  • 一、linux软件管家-yum
    • 1.1 软件包的概念
    • 1.2 yum的使用
      • 1.2.1 查看安装包
      • 1.2.2 安装软件
      • 1.2.3 卸载软件
  • 二、linux下的编辑器-vim
    • 2.1 插入模式下的命令
    • 2.2 命令模式下的命令
    • 2.3 底行模式的命令
    • 2.4 vim的配置
  • 三、linux下的编译器-gcc/g++
    • 3.1 预处理
    • 3.2 编译
    • 3.3 汇编
    • 3.4 链接
    • 3.4 函数库
    • 3.5 g++
  • 四、linux调试器-gdb
  • 五、linux下项目自动化构建工具-make/Makefile
    • 5.1 Makefile的细节
    • 5.2 Makefile中的特殊符号

一、linux软件管家-yum

1.1 软件包的概念

软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系
在window下我们下载软件的时候可以使用软件市场下载软件,那么在linux中下载软件呢?
答案是yum
linux软件下载有三种方式:

1️⃣ 源码安装:将软件源代码进行编译
2️⃣ rpm安装:利用linux内置的安装包安装:类型安卓的apk文件
3️⃣ yum安装: 自己考虑依赖关系,不需要人处理

第一和第二中安装方式安装需要大量的其它依赖文件,而yum就像一个软件管家。

1.2 yum的使用

1.2.1 查看安装包

指令:yum list
功能:把linux可以安装的软件全部以list的方式列出来

在这里插入图片描述
可以以利用管道筛选
在这里插入图片描述

1.2.2 安装软件

指令:sudo yum install ……
输入sudo yum install figlet后看看效果:
在这里插入图片描述

1.2.3 卸载软件

指令:sudo yum remove ……
卸载掉刚刚的软件:
在这里插入图片描述

二、linux下的编辑器-vim

在这里插入图片描述
vim是linux下一个多模式的编辑工具,分为三种模式:

1️⃣ 命令模式:这个模式下可以控制光标的移动,可以进行字符的删除,复制,粘贴,替换等命令。正常模式下按i即可进行插入模式
2️⃣ 插入模式:可以做文字的输入,这个模式下与windows下的txt文件编辑没有区别!直接用就行了!按esc即可退出到正常模式
3️⃣ 底行模式:输入冒号进入(即shift+;)可以进行文件的保存,退出,查找等其它指令

指令:vim + 文件名
功能:使用vim打开文件,如果没有该文件,会自己创建

输入i进入插入模式就可以写代码了:

在这里插入图片描述
如果我们要保存退出的话,就需要按esc进入底行模式了:输入wq即可保存和退出
在这里插入图片描述

2.1 插入模式下的命令

插入模式

按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字

从插入模式切换为命令模式

按「ESC」键

2.2 命令模式下的命令

光标移动:

vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
在这里插入图片描述

批量注释:

1️⃣ ctrl + 「v」
2️⃣ 用「h」、「j」、「k」、「l」选择要注释部分
在这里插入图片描述
3️⃣ 按大写的「i」
4️⃣ 输入"//"
5️⃣ 按「Esc」
在这里插入图片描述

批量取消注释:

1️⃣ ctrl + 「v」
2️⃣ 用「h」、「j」、「k」、「l」选择要取消注释部分
3️⃣ 按「d」
在这里插入图片描述

按「^」(shift + 6):移动到光标所在行的“行首”
按「$」(shift + 4):移动到光标所在行的“行尾”
在这里插入图片描述
在这里插入图片描述

按[gg]:进入到文本起始行
按「G」(shift + g):移动到文章的最后
在这里插入图片描述
在这里插入图片描述

按「b」:光标回到上个字的开头
按「w」:光标跳到下个字的开头
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文本操作:

「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能
「yy」:复制光标所在行到缓冲区
「nyy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字
「np」:粘贴n行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次撤销
「ctrl + r」: 撤销的恢复
在这里插入图片描述
在这里插入图片描述

「dd」:删除光标所在行
「dd + p」:剪切功能
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

「shift + ~」:大写变小写,小写变大写,按住就一直往后替换直到行尾
在这里插入图片描述

「x」:每按一次,从左往右删
「nx」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
在这里插入图片描述
在这里插入图片描述

「X」:大写的X,每按一次,从右向左删
「nX」:例如,「20X」表示删除光标所在位置的“前面”20个字符
在这里插入图片描述
在这里插入图片描述

「r」:替换光标所在处的字符
「nr」:替换n个字符
「R」:替换光标所到之处的字符,直到按下「ESC」键为止
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 底行模式的命令

「set nu」: 在文件中的每一行前面列出行号。
「set nonu」:关闭行号
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

「vs + 文件名」:多文件操作
「ctrl + ww」: 让光标跳转
在这里插入图片描述
这样就可以把一个文件的内容拷贝/剪切到另一个文件(「dd + p」)

:wq就可以退出分屏

2.4 vim的配置

我们知道,我们要显示行号需要手动输入set nu,每次进入都需要手动设置
那么,我们能不能刚进文件不需要指令,自动显示行号呢?
配置方法:在自己的家目录下文件夹中新建一个.vimrc(/etc目录下)
在新建的文件中写入指令就可以了。
推荐指令(一键配置):

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

补充一点:任何配置只会改变自己,不影响别的用户

三、linux下的编译器-gcc/g++

gcc是一款可以编译c语言代码的编译器,如果想编译c++代码可以使用g++
先写一个测试程序:
在这里插入图片描述
指令:gcc + 文件
在这里插入图片描述
运行方法是:

./xxxx

在这里插入图片描述
当然也可以绝对路径编译
在这里插入图片描述

在学习gcc选项之前,我们先回顾一下c程序的编译过程

预处理:去注释,展开宏,头文件
编译:生成汇编代码
汇编:生成机器二进制代码
链接:通过链接函数和其它第三方库,生成可执行程序或库文件

3.1 预处理

预处理过程:

gcc -E test.c -o test.i

说明一下,gcc的 -o 选项可以把输出放在特定的文件,不用-o就会全部显示出来
在这里插入图片描述
在这里插入图片描述

3.2 编译

编译过程:

生成汇编语言,这个过程会检查语法是否有错误

gcc -S test.i -o test.s

我么也可以从test.c 开始编译。
在这里插入图片描述

3.3 汇编

汇编过程,生成机器代码(乱码),生成可重定向目标文件,不能直接执行

gcc -c test.s -o test.o

在这里插入图片描述

3.4 链接

我们还需要最后一步链接过程:链接

gcc test.o -o test

在这里插入图片描述

3.4 函数库

在linux中有两种库:

动态库:.so(windows是.dll)
静态库:.a(windows是.lib)

而链接的过程就是把自己写的c程序和第三方库关联起来。
那么静态链接和动态链接有什么区别呢?

静态库是把库文件代码全部导入到我们要编译的程序中
动态库并没有这样做,而是在程序执行时再进行库链接

静态库占用内存很大,动态库占用内存小,可以节省系统开销

在这里插入图片描述
如果要用静态链接:

gcc test.c -o test -static

在这里插入图片描述
静态库如果不存在,就需要自己下载。

下载C静态库:

sudo yum install -y glibc-static

下载C++静态库:

sudo yum install -y libstdc+±static

3.5 g++

首先要知道g++也能编译c语言

创建c++文件:

touch test.cpp

编译c++:

g++ test.cpp -o cpp

在这里插入图片描述

四、linux调试器-gdb

在vs下我们调试起来会很容易,但是gdb会比较麻烦。
如果要调试时,我们在编译时必须让它生成调试信息(-g)(debug信息)

gcc testgdb.c -o testgdb -g

进入方法:

gdb xxx(可执行程序)

在这里插入图片描述
如果想要退出就输入:

quit或者ctrl + d

常用命令:

list/l 行号:接着上次的位置往下列,每次默认列10行

在这里插入图片描述

这里看到不是从第一行开始显示,我们可以l + 1
在这里插入图片描述

b(breakpoint): 设置断点
disable: 禁用断点
enable: 启用断点
d(delete) x :删除序号为x的断点,(不带x会删除所有断点)
r(run): 运行程序(到断点处)
n(next): 单条执行(window中的F10)
s(step): 单条(会进入函数)(window中的F11)
bt 查看调用堆栈
info b: 查看断点情况

在这里插入图片描述
在这里插入图片描述
那如果我们想查看其中的值呢?

display: 跟踪查看一个变量
undisplay: 取消跟踪

在这里插入图片描述
可以看到display展示的值每次都会显示出来,如果我们只想展示一次:

p(大小写都可以) + 变量

在这里插入图片描述

当我们确定这个函数没有问题的时候,我们可以直接跳出函数:

finish: 执行到当前函数返回(跳过函数)

在这里插入图片描述
假如在函数处有个断点,在函数下面有个断点,我们进入函数后想直接跳到下个断点:

continuing: 跳到下个断点处

而如果在一个函数内我们想跳过一段代码:

until + 行数: 跳到指定行

五、linux下项目自动化构建工具-make/Makefile

首先要知道make是一个指令,Makefile是一个文件。
他们共同形成可执行程序。

通常在一个大型项目中,通常需要编译大量的源文件,我们又不可能一条一条的用gcc编译我们的makefile就可以实现一次性编译,只要设置好对应文件的依赖关系即可。

什么是依赖关系呢?
gcc test.c test
其中test就依赖于test.c

我们先在当前项目文件夹下新建一个名叫Makefile的文件,对其进行编辑
格式:

可执行程序:依赖文件
gcc 文件 -o 程序

在这里插入图片描述
在这里插入图片描述
项目清理功能:
在这里插入图片描述

在这里插入图片描述
make和clean对应VS中的生成解决方案清理解决方案

5.1 Makefile的细节

我们发现我们使用make的时候后面不用加东西,而clean得make clean,这是为什么?

make扫描makefile文件的时候,默认只生成一个目标依赖关系,一般是第一个。
所以我们通常把生成可执行程序的步骤放在最前面,再往下解决依赖问题

.PHONY又是什么呢?

.PHONY修饰对应的符号(伪目标)总是可执行

在这里插入图片描述
可以看到make只能执行一次,而clean总是可以执行。

5.2 Makefile中的特殊符号

在这里插入图片描述

$@ 表示依赖关系中的目标文件(冒号左边)
$^ 表示文件列表(冒号右边)

符号会自己替换,跟上面展示的一样。



纸上得来终觉浅,绝知此事要躬行。


http://chatgpt.dhexx.cn/article/QA9F93jY.shtml

相关文章

Linux系统:开发工具

开发工具 如 Visual Studio、IDEA 这样的集编写编译调试运行以及各种复杂功能于一身的开发工具,叫做集成开发环境 IDE。Linux 下一般使用代码编辑工具 vi/vim,编译工具 gcc/g,调试工具 gdb。 1. 编辑工具 vim vim,它是一款十分强…

Linux的开发流程

嵌入式linux开发流程 在嵌入式学习的过程中,嵌入式linux的学习是不可少的,可以说嵌入式linux是学习比较困难的,会遇到各种各样的问题,那么嵌入式linux学习有一个重要的点就是嵌入式linux开发的流程,这是必须要知道的&a…

Linux开发速记教程之第一篇

一、Linux职业方向 ①、服务器运维;②、应用软件开发;③、设备驱动开发。 二、设备驱动开发 Linux 系统的一个重要设计哲学是一切皆文件。包括硬件设备,对于系统来说也是一个文件,所以系统向上层应用程序提供 open、 write、 re…

Linux开发工具详解

目录 前言一.Linux编辑器-vim使用1.vim的基本概念2.vim命令模式命令集3.vim底行模式命令集4.简单的vim配置 二.Linux编译器-gcc/g使用1.背景知识2.gcc如何完成a.预处理(进行宏替换)b.编译(生成汇编)c.汇编(生成机器可识别代码)d.链接(生成可执行文件或库文件)e.重要概念f.动态链…

直接跳转与间接跳转

转载自: https://www.csdn.net/tags/MtjaIg1sNDE1MDYtYmxvZwO0O0OO0O0O.htmlhttps://www.csdn.net/tags/MtjaIg1sNDE1MDYtYmxvZwO0O0OO0O0O.html 正常执行的情况下,指令按照它们出现的顺序一条一条地执行。跳转(jmp)指令会导致执行切换到程序中一个全新的位置。 …

Vue路由跳转传参或打开新页面跳转

1. 通过路由中的name属性 使用params传递参数, 使用this.$route.params获取参数 这种方式传递相当于post请求, 传递的数据不会显示在url地址栏,但是页面刷新,参数会丢失 1 2 3 4 5 6 7 8 9 // 传递参数 this.$router.push({ name: "首页", params: { …

Nginx 跳转

目录 一.Nginx常见模块1.http2.server3.location 二.location1.一般分为普通和正则2.location 常用的匹配规则3.location 示例4.location优先级排列说明 三.REWRITE模块1.功能2.跳转场景3.跳转实现4.执行顺序5.语法格式6.实例6.1域名跳转6.2基于客户端IP 访问跳转6.3基于旧域名…

pyqt5的页面跳转

前言: 正在学习python,学到了文件读取操作,想用pyqt5实现一下,发现我对于pyqt5还是不够了解。 现在记录一下我用pyqt5实现页面跳转的过程 方便以后查阅 pycharm使用pyqt5的话建议解释器用python3.7 由于目前我的水平还是太菜&…

div链接跳转

1、先建立一个div 2、给div写个id,直接写个go吧,再写个class,就叫go1吧 3、给它里面写个你要跳转的网址名称 4、给它设置个样式,弄个黑色背景什么的 5、然后把字体调成白色,文字居中 6、这是目前这个div的样子 7、接着…

layui页面跳转

//模拟单页跳转 $(document).ready(function(){ $(“dd>a”).click(function (e) { e.preventDefault(); $("#iframeMain").attr(“src”,$(this).attr(“href”)); }); }); 逻辑:通过jq拿a的href值放到iframe的src属性上 解释: e.preventD…

html-超链接跳转-外部和内部页面跳转

a标签表示超链接 1、通过a标签来表示超链接,点击超链接文本可以跳转到绑定的网站地址 1表示外部的地址 2表示内部的页面的访问地址,不是填写内部页面,内部页面访问地址

AS页面跳转

在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener: //define interface public static interface OnItemClickListener { void onItemClick(View view , int position); } 1 2 3 4 声明一个这个接口的变量: private OnItem…

页面跳转的两种方式(转发和重定向)区别详解:

转发和重定向的路径问题(重点) 1)使用相对路径在重定向和转发中没有区别 2)重定向和请求转发使用绝对路径时,根/路径代表了不同含义 重定向response.sendRedirect(“xxx”)是服务器向客户端发送一个请求头信息,由客户端再请求一次…

go语言web开发系列之八:gin框架中用go-redis缓存数据

一,安装需要用到的库 1,安装go-redis liuhongdiku:~$ go get -u github.com/go-redis/redis 说明:刘宏缔的go森林是一个专注golang的博客, 网站:https://blog.imgtouch.com 原文: go语言web开发系列之八:gin框架中用go-redis缓…

go语言web开发系列之二十一:用go-qrcode库生成二维码

一,安装用到的库 1,go-qrcode库的地址 GitHub - skip2/go-qrcode: :sparkles: QR Code encoder (Go) 2,安装go-qrcode库 liuhongdiku:~$ go get -u github.com/skip2/go-qrcode/... 3,resize库的地址(在二维码中间放icon时太大时需要缩放…

go语言web开发出错

2019独角兽企业重金招聘Python工程师标准>>> err listen tcp :8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 原因:开了两个服务器,造成监听端口冲突 转载于:https://my.osc…

go语言有哪些web框架

前言 由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web”框架”为主。这里稍微打了个引号,因为大部分”框架”从设计和功能定位上来讲,充其量都只能算是一个组件,需要…

go语言服务器代码,Go语言开发简单web服务器

欢迎,来自IP地址为:182.103.254.107 的朋友 Go语言由于其方便的并发通信机制以及强大的网络支持,常常被用于服务器软件的开发。本文将示例使用Go语言来开发简单的Web服务器。 HTTP协议是应用层协议,协议模型位于TCP之上&#xff0…

Go语言WEB开发[html/template包]

Go语言Web开发 Go语言提供了html/template包来支持模板渲染。Go提供的html/template包对HTML模板提供了丰富的模板语言,主要用于Web应用程序。 模板中的变量 模板中的变量通过{{.}} 来访问。 {{.}} 称为管道和root。 在模板文件内,{{.}}代表当前变量&…

Go语言web开发

一. HTTP Http:无状态协议,是互联网中使用Http实现计算机和计算机之间的请求和响应 Http使用纯文本方式发送和接收协议数据,不需要借助专门工具进行分析就可以知道协议中数据 Http报文(message)组成部分 请求行(request-line)请求头(head)请求体(body)响应头响应体 HTTP 1.1 实…