Linux开发工具

前言:哈喽小伙伴们,经过前边的学习我们已经掌握了Linux的基本指令和权限,相信大家学完这些之后都会对Linux有一个更加深入的认识,但是Linux的学习可以说是从现在才刚刚开始。

这篇文章,我们将讲解若干个Linux的开发工具,让我们能够开始使用Linux来做一些事情。


目录

一.yum

1.什么是yum

2.yum操作

(1)搜索

 (2)安装

(3)运行

(4)卸载

二.vim

1.什么是vim

(1)命令模式

(2)插入模式

(3)底行模式

 2.vim配置

三.gcc/g++

1.指令

2.翻译过程

四.make/makefile

五.gdb

1.什么是gdb

2.gdb操作

总结


一.yum

1.什么是yum

相信现在没有年轻人不会从手机或者电脑上下载各种各样的APP软件,但是你们知道这些APP为什么能被下载到手机上吗???

除了能够直接从浏览器上下载安装包之外,每个手机和电脑上都会有原装应用商店,我们都是通过应用商店这个媒介,从应用厂商的服务器中将应用的安装包提取到自己的设备上在进行安装。

yum,就是这些应用商店,是一个软件下载安装管理的一个客户端

我们可以通过yum,在Linux系统中安装一些东西。那具体的安装过程又是怎样的呢???

通过yum安装指令按照要安装的东西去寻找对应的服务器。但是我们为什么能找到对应的应用厂商的服务器呢???

这是因为,我们的机器内部,内置了目标服务器的地址链接


2.yum操作

(1)搜索

yum list | grep XXX

通过该指令,便可以搜索到所有携带XXX的软件,比如说我们搜索带有“sl”的软件:

等待一段时间之后就会给我们罗列出所有携带“sl”软件。


 (2)安装

sudo yum (-y) install XXX

通过该指令就可以将对应的XXX软件进行安装。因为安装软件是在对应的root目录下进行的,所以要加上sudo,让我们的普通用户权限升级为root权限。比如说安装一个名为“sl.x86_64”的软件:

这里的“sl.x86_64”中,sl是软件名称,x86_64为软件的运行环境

安装时会有一个确认,确认一下是否安装,如果不想确认,便可在指令中加上“-y”,强制安装

调用指令后要输入对应的普通用户的密码,然后等待安装完成即可。


(3)运行

安装之后直接输入软件名字即可实现运行,这里我们运行一下“sl”:

能够看出此软件的功能就是在屏幕上驶过一辆火车。 


(4)卸载

sudo yum(-y)remove XXX

能够安装同样就能卸载,使用上述指令便可将XXX软件进行卸载。例如我们将“sl”进行卸载:

如图所以,如果指令不加“-y”,卸载时就会给出一个确认,是否要删除,如果不想确认,就可以加上“-y”,直接强制卸载。 


二.vim

学过这么多知识之后,我们终于可以开始在Linux上编写代码啦,而Linux系统中,供我们编写代码的工具即为vim


1.什么是vim

vim一Linux系统下的一款多模式的编辑器。那么何为多模式呢???

vim编辑器下一共分为三种模式:

命令模式:允许使用者通过命令来进行文本的编辑控制。

插入模式:编辑模式

底行模式:用来让vim进行包括但不限于shell之间的交互。

下面我们就通过讲解vim使用方法的同时,来介绍这三种模式。


(1)命令模式

vim的使用方法为:

vim XXX文件

通过vim+XXX文件指令,能够让我们对该文件进行编写,同时进入vim的编辑器窗口: 

 但是会发现我们进入该窗口之后,并不能立即写代码,并且按某些按键时不会有任何反应

这是为什么呢???

实际上,刚进入vim编辑器时,我们就是处在命令模式之中,随后通过执行某些命令来实现编辑器对文本的各种操作。下面是常用的操作指令,均在光标所在处执行:

n + yy:复制当前n行

n + p:将复制内容粘贴n次

u:撤销,ctrl + u:恢复上一次撤销。

n + dd:剪切/删除指定n行

shift + 4:将光标定位到当前行的结尾。

shift + 6:将光标定位到当前行的开始。

gg:将光标定位到整个文本的最开头。

shift + g:将光标定位到整个文本的最后一行。

n + shift + g:将光标定位到文本的第n行。

h,j,k,i:分别能让光标进行左、下、上、右移动,也可带n,直接移动n次。

w:按照单词为单位进行光标后移。

b:按照单词为单位进行光标前移。

shift + ~:将指定字母进行大小写切换。

n + x:删除光标后续的n个字符。

n + shift + x:删除光标之前的n个字符。

n + r:对包括光标指定的字符及其后边的共n个字符进行替换。

shift + r:进入替换模式,可以对文本的任意字符进行替换。

shift + zz:保存并退出

批量化注释操作:

ctrl + v:通过方向键选中若干行;shift + i,进入插入模式;//,注释第一行;Esc,选中行全部注释

批量化去注释:

ctrl + v:通过方向键选中若干行;d,删除选中。

以上所有指令,不加n均代表只执行一次


(2)插入模式

在命令模式下,按下键盘上的“i”键,就可以进入插入模式,也就是说可以进行编写操作了:

能够看出在插入模式下,窗口的左下角会有INSERT,也就是插入的英文

编写完代码之后,想要退出插入模式,则需按下Esc键,便可从插入模式退出回命令模式

除了i之外,a、o键同样可以进入插入模式,但是三者有所不同:

i:进入插入模式不会移动光标。

a:进入插入模式会将光标后移一位。

o:进入插入模式会直接另起一行。


(3)底行模式

当我们代码编写完之后,想要退出vim时,需要在命令模式的前提下,同时按下SHIFT+;/:两个键位,此时窗口的左下角便会有一个“:”,代表着进入了底行模式

底行模式下,“w”键表示保存,“q”键表示退出,所以在编写之后想要退出vim,便可输入wq,随后回车,便可同时完成保存+退出

退出之后来看我们的文件,内容确实存在。

在底行模式下也同样有若个常用指令:

w:保存

q:退出

!:强制

set nu:显示行号

set nonu:去除行号

/+关键字:搜索文本中指定的关键字

! + 指令:无需退出vim,可以进行shell命令的执行,常用函数查看

vs 文件名:分屏,多文件操作

ctrl + ww:不同文件之间的光标转移


 2.vim配置

虽然我们已经了解了怎么用vim编程,但是他并没有像其他编程软件一样能够简单快捷的补全代码,自动缩进之类的操作,这就需要我们自己来对vim进行配置。

首先,在自己的家目录下建立一个名为.vimrc的文件:

但是我们找不到vimrc文件 ,这是因为"."的作用是将vimrc文件隐藏

随后我们用vim对.vimrc文件进行编写

比如我们写上一个get nu显示行号的指令后保存退出。之后我们再在家目录下使用vim写文件时,就会自动显示行号

还有其他有帮助的指令就需要靠大家自己去配置了。


三.gcc/g++

gcc和g++是两种文件编辑器能够执行我们所编写的代码。不同的是,gcc只能执行c语言代码,g++则既可以执行c语言代码,也可以执行c++代码

1.指令

我们以gcc为例来讲解这两种编辑器的具体使用: 

 如图,我们新建一个名为test.c的c语言文件,并编写一个循环代码后保存退出。

随后通过指令gcc + 文件名,对文件进行编译,同时默认生成一个名为a.out的可执行程序。 

最后通过指令./+可执行程序名,便可执行程序。 

同时我们也可以在编译文件时,通过指令 gcc + 文件名 + -o + 可执行程序名,来指定生成的可执行程序的名字


2.翻译过程

一段程序的翻译过程并没有我们所认为的那么简单,它一共分为四个步骤

  1. 预处理:宏替换,去注释,头文件展开,条件编译
  2. 编译:将C变成汇编语言
  3. 汇编:将汇编语言编译成为二进制目标文件
  4. 链接:形成可执行程序

我们也可以通过在指令中添加如下部分,将一段程序的运行过程停留在这四种阶段并展示结果

-E:只激活预处理,但不会生成文件,需要自己把它重定向到一个输出文件中

-S:编译到汇编语言不进行汇编和链接

-c:编译到目标文件

-o:文件输出到文件


四.make/makefile

虽然我们已经认识和了解到了如何使用vim和gcc/g++来编写和运行文件,但是使用它们还是需要我们自己去一次一次的执行指令总归还是没有像我们使用的VS等编译器方便

make和makefile的作用,就是将这些指令整合在一起,达到一次执行的目的

首先我们要知道,make是一个命令,而makefile是一个文件需要我们自己去创建和编写

当我们执行make指令时,它会自动进入当前目录下的makefile文件中,并执行存在里边的指令

如图,我们创建了makefile文件,并在里边编写如上代码。

调用make命令, 发现文件里的gcc -o mytest test.c 指令被执行生成名为mytest的可执行程序。 这便是make/makefile的基本用法

再来看makefile文件的内部:

前两行为一个整体mytest为目标文件,冒号“:”表示依赖关系,test.c则为依赖文件(可以不止一个,用空格隔开)。

第二行称为依赖方法初始使用tab键空位(不能是四个空格),随后是一段指令,连接目标文件和依赖文件依赖方法可以不只是一个,可以多行调用多个指令,这些指令会按照从上到下的顺序一一执行

下面我要再添加一个:

再去执行: 

能够看出,当我们的指令和依赖文件无关时,依赖文件可以不写,只需要一个目标文件。

同时,当makefile文件中有多个目标文件时,如果只单独调用make,它默认只会执行第一个目标文件,执行其他目标文件则需要在make后加上目标文件名

再来看:

当我们多次调用mytest目标文件时,因为第一次已经生成了可执行程序,所以之后的调用都会提示说mytest已经是最新的,无法重复调用

但是如果非要重复调用也不是不行,但是需要增加一个东西

.PHONY可以解除限制,使该目标文件能够多次调用:

虽然能多次调用,但并不会生成多个可执行程序,所以一般不推荐其使用于对文件的各种操作上

 此外,目标文件和依赖文件还可以用符号来代替

其中“@”代表目标文件,“^”代表依赖文件(多个依赖文件可代替整体),$则起到替换的作用

 除此之外,我们还可以定义两个量来代替目标文件和依赖文件

如图,我们定义bin作为目标文件,src作为依赖文件随后对其赋值进行使用

这就相当于是C语言中的宏下边的指令不用变化,要改变时只用改变对bin和src的赋值即可。 

 

我们发现,使用make来执行这些指令时,都会自动显示,那如果我们不想显示,该如何隐藏呢?

很简单,只需要在指令前加@即可:


五.gdb

1.什么是gdb

通过上面四种工具的学习,我们已经能够实现在Linux上编辑代码,运行代码,但是还少了一个重要的东西,那就是调试代码

而gdb就是Linux调试器


2.gdb操作

我们知道,在我们的编译器上有debug和releae两个不同的版本类型。其中debug是程序员的开发和调试版本,专用于代码的编写和调试,而release则是最终授予用户使用的版本,其特点是代码已经经过测试,不含任何bug并且代码量和速度都达到最优

在我们的Linux系统下,由gcc默认生成的可执行程序都是release版本,是不能进行调试的,所以我们需要使用指令 gcc -o xxx  xxx  -g来生成一个debug版本下的可执行程序进行调试

现在有一个文件名为test.c,我们使用指令生成一个debug版本下的可执行程序: 

 gdb的使用方法为:gdb + 可执行程序名

成功执行指令之后就会现在该段内容,随后我们就可以输入gdb下的各种指令来实现调试啦:

  • quit:退出gdb
  • list / l 行号:显示文件源代码,每次显示10行,回车可继续显示
  • list / l 函数名:显示函数的源代码
  • r / run:运行程序
  • n / next:单条执行,逐过程
  • s / step:进入函数调用,逐语句
  • break / b 行号:在某行设置断点
  • break / b 函数名:在某函数开头设置断点
  • info / i  break / b:查看断点信息
  • d 断点编号:删除断点
  • disable / enable:禁用(非删除)/开启断点
  • finish / f:执行到当前函数返回,然后停下来等待指令
  • printf / p 变量/变量地址:查看变量内容或变量地址
  • display 变量/变量地址:跟踪查看变量值或变量地址,每次停下来都显示
  • undisplay:取消变量跟踪
  • until 行号:跳转到指定行,中间的代码会运行

总结

关于Linux的基本操作工具到这里就分享完啦,希望能够对大家有所帮助。

喜欢博主文章的小伙伴记得一键三连哦,我们下期再见啦!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础数据结构之Map和Set

Map和Set接口 1.Set集合:独特性与无序性 Set是Java集合框架中的一种,它代表着一组无序且独特的元素。这意味着Set中的元素不会重复,且没有特定的顺序。Set接口有多个实现类,如HashSet、LinkedHashSet和TreeSet。 2.Map集合&…

Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”

前言 随着业务数据的增加(比如电商业务中,随着用户规模和商品数量的增加),就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群,把数据分散保存到不同的实例上。但是这样做的话,如果要保存的…

利用牛顿方法求解非线性方程(MatLab)

一、算法原理 1. 牛顿方法的算法原理 牛顿方法(Newton’s Method),也称为牛顿-拉弗森方法,是一种用于数值求解非线性方程的迭代方法。其基本思想是通过不断迭代来逼近方程的根,具体原理如下: 输入&#…

PCB笔记(二十三):allegro 标注长宽(一般用于测量板宽)时如何显示双单位

步骤:首先选择标注工具,然后右键→Parameters,在弹出来的窗口中√上如下图二所示选项 最终要达到显示单位的效果的话,需要在Text项键入%v%u。 今天就记录到这里啦O

Leetcode206:反转链表

一、题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表 示例: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]输入:head [1,2] 输出:[2,1]输入:head [] 输出&#xff1…

[ESP32 IDF]web server

目录 通过web server控制LED 核心原理解析 分区表 web server的使用 错误Header fields are too long的解决 通过web server控制LED 通过网页控制LED灯的亮灭,一般的ESP32开发板都可以实现,下面这篇文章是国外开发者提供的一个通过web server控制…

13.2K Star,12306 抢票助手帮你回家

Hi,骚年,我是大 G,公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 马上过年了,今年你在哪里过年?回老家吗&#x…

前端入门第一天

目录 HTML超文本标记语言——Hyper Text Markup Language 标签语法: 双标签: 单标签——只有开始标签,没有结束标签 基本骨架: 标签的关系: 注释: 标题标签:(新闻标题、文章标题、网页区域…

探索设计模式的魅力:为什么你应该了解装饰器模式-代码优化与重构的秘诀

设计模式专栏:http://t.csdnimg.cn/nolNS 开篇 在一个常常需要在不破坏封装的前提下扩展对象功能的编程世界,有一个模式悄无声息地成为了高级编程技术的隐形冠军。我们日复一日地享受着它带来的便利,却往往对其背后的复杂性视而不见。它是怎样…

项目安全-----加密算法实现

目录 对称加密算法 AES (ECB模式) AES(CBC 模式)。 非对称加密 对称加密算法 对称加密算法,是使用相同的密钥进行加密和解密。使用对称加密算法来加密双方的通信的话,双方需要先约定一个密钥,加密方才能加密&#…

C++ 动态规划 线性DP 最长共同子序列

给定两个长度分别为 N 和 M 的字符串 A 和 B ,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 N 和 M 。 第二行包含一个长度为 N 的字符串,表示字符串 A 。 第三行包含一个长度为 M 的字符串,表…

Servlet+Ajax实现对数据的列表展示(极简入门)

目录 1.准备工作 1.数据库源(这里以Mysql为例) 2.映射实体类 3.模拟三层架构(Dao、Service、Controller) Dao接口 Dao实现 Service实现(这里省略Service接口) Controller层(或叫Servlet层…

【blender插件】(1)快速开始

特性 blender的python API有如下特性: 编辑用户界面可以编辑的任意数据(场景,网格,粒子等)。修改用户首选项、键映射和主题。运行自己的配置运行工具。创建用户界面元素,如菜单、标题和面板。创建新的工具。场景交互式工具。创建与Blender集成的新渲染引擎。修改模型的数据…

LeetCode.1686. 石子游戏 VI

题目 题目链接 分析 本题采取贪心的策略 我们先假设只有两个石头a,b, 对于 Alice 价值分别为 a1,a2, 对于 Bob 价值而言价值分别是 b1,b2 第一种方案是 Alice取第一个,Bob 取第二个,Alice与Bob的价值差是 c1 a1 - b1&#xf…

【Crypto | CTF】BUUCTF rsarsa1

天命:第二题RSA解密啦,这题比较正宗 先来看看RSA算法 这道题给出了 p,q,E,就是给了两个质数和公钥 有这三个东西,那就可以得出私钥了 最后把私钥和质数放进去解密即可得到解密后的明文 from gmpy2 impor…

会计的记账凭证

目录 一. 记账凭证的填制与审核1.1 收付款凭证1.2 转账凭证1.3 单式记账凭证 二. 记账凭证的编号 \quad 一. 记账凭证的填制与审核 \quad \quad 1.1 收付款凭证 \quad 注意︰ 凡是涉及货币资金之间收付款的业务如将库存现金存入银行或从银行提取现金等类经济业务。在实际工作中…

程序员的悲哀:知名Python库requests作者失业了

在当今这个快速发展的科技时代,程序员作为创新的驱动力,一直被视为时代的宠儿。然而,即使在这样一个充满机会的领域,也有着不为人知的辛酸。近日,一个令人震惊的消息传遍了编程社区:知名Python库requests的…

css1基础选择器

大纲 一.标签选择器 比较简单,前面直接写目标标签 二.类选择器 应用 例子 三.多类名选择器(调用时中间用空格隔开) 四.id选择器 应用 五.通配符选择器 应用 六.总结

gRPC使用详解

起源特点主要优缺点应用场景组成部分使用方法SpringBoot集成gRPCVert.x集成gRPCNacos集成gRPC监控gRPC调用过程Java使用示例 起源 gRPC的起源可以追溯到2015年,当时谷歌发布了一款开源RPC框架,名为gRPC。gRPC的设计初衷是为了提供一种标准化、可通用和跨…