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.rhkb.cn/news/250843.html

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

相关文章

事务、MVCC、锁

目录 事务MVCC锁 事务 四大特性:ACID 脏读:事务A读取到未提交事务B修改的数据 不可重复读:事务A修改了未提交事务B读取的数据 幻读:事务A增删了未提交事务B读取的数据 不可重复读与幻读都是读取的结果不同,前者侧重于…

数据结构+算法(第11篇) :无死角“盘”它!二分查找树

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

05 MyBatis之表关系的声明+事务+SqlSession三件套的作用域

MyBatis 支持一对一,一对多,多对多查询。XML 文件和注解都能实现关系的操作。多对多实质就是一对多 1. 表关系的维护 1.1 One一对一 一对一查询和多表(两表)查询很相似, 都能查询两表的全部属性 区别是一对一可以在对象中嵌套对象, 呈现包含关系; 多表…

在Linux中对Nginx进行安全加固

准备工作 在IP为x.x.x.x的服务器上安装nginx,确保Linux系统为nginx环境。 检查nginx是否配置nginx账号锁定策略 配置nginx账号锁定策略,降低被攻击概率。 第一步,查看nginx的锁定状态。 命令:passwd -S nginx 若结果出现“P…

安装配置sqoop

一、了解Sqoop 1、Sqoop产生的原因 A. 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。 B. 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。 以上是sqoop产生的主要原因,也因此Sqoop主要用于hadoop与关系型数据库之…

数据湖系列之二 | 打造无限扩展的云存储系统,元数据存储底座的设计和实践

海量数据对数据湖存储的扩展能力提出了极高的要求。元数据面作为云存储最核心、最底层的系统之一,直接决定了存储系统的扩展性。 本文作为数据湖系列的第二篇,将为大家揭开元数据面存储底座的秘密,如何设计能够支撑存储容量的“无限扩展”。…

监测Tomcat项目宕机重启脚本(Linux)

1.准备好写好的脚本 #!/bin/sh # 获取tomcat的PID TOMCAT_PID$(ps -ef | grep tomcat | grep -v tomcatMonitor |grep -v grep | awk {print $2}) # tomcat的启动文件位置 START_TOMCAT/mnt/tomcat/bin/startup.sh # 需要监测的一个GET请求地址 MONITOR_URLhttp://localhost:…

Vue3_基础使用_2

这节主要介绍:标签和组件的ref属性,父子组件间的传递值,ts的接口定义,vue3的生命周期 1.标签的ref属性。 1.1ref属性就是给标签打标识用的,相当于html的id,但是在vue3中用id可能会乱,下面是ref…

卸载Ubuntu双系统

卸载Ubuntu双系统 我们卸载Ubuntu双系统,可能出于以下原因: 1、Ubuntu系统内核损坏无法正常进入 2、Ubuntu系统分配空间不足,直接扩区较为复杂 3、以后不再使用Ubuntu,清理留出空间 123无论出于哪种原因,我们都是要…

Power BI案例-链接Mysql方法

Power BI案例-连锁Mysql 方法1-通过组件mysql-connector-net-8.3.0: 选择文件–获取数据–选择MySQL数据库–选择链接 提示无组件,选择了解详细情况 弹出浏览器,选择下载 不用登陆,可以直接下载 下载的组件如下&#xff1a…

2024年数学建模美赛 A~E 题目解析

2024美赛A题:资源可用性和性别比例 背景 尽管一些动物物种不属于通常的雄性或雌性,大多数物种在出生时要么显著地为雄性,要么为雌性。虽然许多物种在出生时表现出1:1的性别比,但其他物种则偏离了这个均衡的性别比例。这被称为性…

算法day9

算法day9 栈与队列基础232用栈实现队列225用队列实现栈 栈与队列理论基础 言简意赅:栈的原理就是后进先出。队列就是先进先出。 相关操作: 栈:入栈,出栈,判栈空,取栈顶元素。 队列:出队&#…

什么是ACL?

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OC…

Skywalking的Trace Profiling 代码级性能剖析功能应用详解

代码级性能剖析 Skywalking 提供了Trace Profiling功能对具体出现问题的span进行代码级性能剖析。 代码级性能剖析就是利用方法栈快照,并对方法执行情况进行分析和汇总。并结合有限的分布式追踪 span 上下文,对代码执行速度进行估算。性能剖析激活时&a…

Linux系统管理和Shell脚本笔试题

1、写一个sed命令,修改/tmp/input.txt文件的内容,要求:(1) 删除所有空行;(2) 在非空行前面加一个"AAA",在行尾加一个"BBB",即将内容为11111的一行改为:AAA11111BBB #写入内…

自然语言处理(NLP)—— Dialogflow ES聊天机器人

1. 背景介绍 这个实验室的目标是让你了解并使用Google的Dialogflow服务。Dialogflow是一个可以让你创建聊天机器人的服务,这个过程不需要或者只需要很少的编程技能。 1.1 账号的创建 为了完成这个实验室,你需要在以下网站上创建账号&#xff1a…

STM32--USART串口(3)数据包

一、前言 在实际的工程中肯会有同时发送多种数据的情况,比如要不停的发送x、y、z分别对应三种不同的数据。xyzxyzxyz,但接收方可能是从中间某个地方开始接收的,这就导致数据错位。所以我们就需要将数据进行分割,打包成一个一个的…

Request Response 基础篇

Request & Response 在之前的博客中,初最初见到Request和Response对象,是在Servlet的Service方法的参数中,之前隐性地介绍过Request的作用是获取请求数据。通过获取的数据来进行进一步的逻辑处理,然后通过对Response来进行数…

如何搭建私有云盘SeaFile并实现远程访问本地文件资料

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-hsDnDEybLME85dTx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

MySQL 多表查询

重点: MySQL 的 三种安装方式:包安装,二进制安装,源码编译安装。 MySQL 的 基本使用 MySQL 多实例 DDLcreate alter drop DML insert update delete DQL select 3.5)DDL 语句 表:二维关系 设计表&…