保姆式详解Linux中常见开发工具之yum,vim,gcc/g++,gdb,make/makefile,gitee

发布于:2022-11-09 ⋅ 阅读:(12) ⋅ 点赞:(0) ⋅ 评论:(0)

一、前言

通过前面的学习,我们掌握了Linux中的权限理解和对Linux中的文件进行权限设置,今天我们将着重讲解Linux中的几个非常重要且常见的开发工具:yum,vim,gcc/g++,gdb,make/makefile,gitee

二、yum

首先我们要知道yum到底是什么东西??相信大家在手机上都有看到应用市场app,在Linux中,yum就相当于是手机上的一个应用市场app,也就是里面存放着我们需要下载安装的工具,我们可以通过yum进行安装。在Linux中,常见的安装方式有:源码安装,rpm安装,yum安装,前两种方式对目前的学习而言较为复杂,目前暂不讨论,因此,目前重点是掌握yum安装方法,下面以安装几个常见的工具作为例子进行介绍

1、利用yum来安装sl

首先简单看看sl能够干啥,sl是一条能够在Linux屏幕上打印出运动的火车的指令,看看效果:
在这里插入图片描述
在使用工具的过程中通常有三部曲:搜索,安装,卸载(前两者属于安装软件的过程)

(1)搜索

利用yum进行直接搜索的话不利用我们查看工具,因为它会弹出大量的工具(Linux中的所有软件),非常复杂:

yum list

在这里插入图片描述
因此,我们可以采用前面学习过的一个工具**(文本行过滤工具grep)**进行过滤,帮助我们快速筛选出我们想要的东西:yum list|grep sl
在这里插入图片描述

(2)安装

当我们找到我们想要的工具之后,我们可以直接使用sudo yum install 想要安装的工具即可完成工具的安装,例如:sudo yum install sl
在这里插入图片描述
在我的系统之中,因为我已经安装了,所以它会提示已经安装最新版本,没有事情可做
在安装的时候,有时系统会询问是否确定使用一些空间内存来安装这个工具,那么这个时候我们只需要按y+回车表示确定即可,当然,也可以直接在安装命令中添加-y选项即可确定安装,无需后续重新确定,如:sudo yum install -y sl
在这里插入图片描述

(3)卸载

当我们在使用的过程中发现我们不想要这个工具了,我们可以进行手动卸载软件,这个时候需要使用remove指令进行软件的卸载,如:sudo yum remove sl
在这里插入图片描述

2、利用yum来安装lrzsz

lrzsz是一个可以将windows中的文件直接拖拽进行Linux界面的工具,这里同样会介绍使用过程中的三部曲:搜索,安装,卸载

(1)搜索

在搜索的时候,我们同样要记得使用listgrep指令,其中list指令可以复责筛选出Linux中的所有软件和工具grep负责筛选出我们想要的东西,这里需要用到的指令是:yum list|grep lrzsz进行搜索,搜索结果如下:
在这里插入图片描述

(2)安装

找到想要的软件之后就可以使用yum指令进行安装对应的软件了:sudo yum install lrzsz

在这里插入图片描述

(3)卸载

不需要软件的时候直接使用remove指令就可以将软件进行卸载了,sudo yum remove lrzsz
在这里插入图片描述

三、vim编辑器

1、简介

vim是一款编辑器,只能用于编写代码,不能执行其他功能,这个和VS系列的编译器是不一样的,VS系列的工具是集成开发环境,也就是能够完成各种各样的功能的环境,不限于编写基本代码,编译和调试等均能够进行,vim是一款多模式的编辑器,因此,我们必须熟悉vim中的各个模式的情况以及熟练使用vim中的各种常见的指令

2、如何在Linux中安装vim编辑器?

一条指令就可以解决问题:sudo yum install -y vim
在这里插入图片描述

3、vim中的常见模式

目前我们只学习vim中的三种常见的模式:命令模式、底行模式、插入模式

(1)命令模式

命令模式也是vim中的默认模式,即用vim打开一个文件时,默认就是命令模式
在这里插入图片描述
当我们看到normal这样的字眼的时候,就表示vim此时处于命令模式,此时是无法直接向文件中输入内容的,命令模式一般是操作一些指令进行使用的,一般编写代码的话我们是在插入模式中执行的

(2)插入模式

插入模式顾名思义就是可以向文件中插入东西,其实就是写入东西,就是可以正常地进行编辑文件内容,那么因为我们利用vim打开文件的时候默认是命令模式,所以这个时候需要先转换为插入模式,此时我们可以按下键盘中的i即可转换为插入模式
在这里插入图片描述
当我们看到insert时,就表示目前处于插入模式,可以正常地向文件中输入内容

(3)底行模式

在这里插入图片描述
当我们看到command的时候就说明现在处于底行模式底行模式的作用,用于退出vim编辑器,退出的方式为:在底行模式下按wq+enter,w(保存写入的内容)q(退出),所以一般情况下我们都是w和q一起使用,意思为保存并退出

4、vim中的常见模式转换(重要)

我们目前知道vim编译器是一个多模式的编辑器,目前我们所学习的模式有三个**:默认模式(命令模式)、插入模式、底行模式**,那么接下来我们就是要来研究这三个模式之间要如何进行转换

  1. 命令模式与插入模式之间的转换
  • 从命令(默认)模式转换为插入模式:按i
  • 从插入模式转换为命令(默认)模式:按esc
  1. 命令(默认)模式与底行模式的转换
  • 从命令模式转换为底行模式:按shift+:
  • 从底行模式转换为命令模式:按esc

常见的操作:打开vim编辑器,此时处于默认的命令模式无法编写代码,此时我们需要按i转换为插入模式才可以编写代码,编写完代码之后按esc转换为命令模式,在命令模式下如果需要进行一些常规的指令操作则可以进行指令操作批量化处理我们编写的代码,如果不需要进行处理,则可以按shift+;转换为底行模式,在底行模式下按wq+回车就可以退出vim编辑器,这个过程就是一个完整的利用vim编辑器进行编写代码的过程

  1. 注意:插入模式和底行模式之间无法进行直接的转换,若需要进行转换,则需要先转换为中间模式(即命令模式),再进行转换

5、vim中常见的基本操作指令(重要)

  1. 复制和粘贴
  • 复制:如果只是复制一行,则按yy,如果想要复制n行,则按nyy,n为整数
  • 粘贴:如果只是粘贴一份,则按p,如果想要粘贴n份,则按np
  1. 剪切:剪切一般会和粘贴操作配合进行使用,当然也可以不配合使用,那么单独使用的时候承担的就是删除角色
  • 剪切:如果只是剪切一行,则按dd,如果想要剪切n行,则按ndd
  • 粘贴:如果只是粘贴一份,则按p,如果想要粘贴n份,则按np
  1. 撤销操作
  • 针对常规操作进行撤销操作:按u
  • 针对u撤销操作进行撤销操作:按ctrl+r
  1. 光标快速定位
  • 光标快速定位到文本的末尾:按shift+g
  • 光标快速定位到文本的开头:按gg
  • 光标快速定位到第n行:按n+shift+g
  • 光标快速定位到当前行的末尾:按shift+4
  • 光标快速定位到当前行的开始:按shift+6
  1. 光标的快速移动
  • 向后以单词为单位进行移动:按w
  • 向前以单词为单位进行移动:按b
  1. 上下左右
  • 左:按h
  • 下:按j
  • 上:按k
  • 右:按l
  1. 大小写快速进行转换:按shift+~
  2. 替换单词
  • 替换光标所在字符:按r
  • 替换n个字符:按nr
  • 批量化进行替换:shift+r
  1. 删除
  • 删除光标所在字符:按x
  • 删除n个字符:按nx

6、如何配置vim

我们首先需要明确,默认安装的vim编辑器是没有任何功能的,即和普通的文本编辑器没有任何区别,那么现在我们需要配置一些东西才能够使vim具有补齐缩进提示等功能

  1. 登录gitee账号之后搜索vimforcpp
    在这里插入图片描述
  2. 将命令复制到xshell进行处理
    在这里插入图片描述
  3. 输入用户的账号和密码
  4. 使用命令:source~/.bashrc来激活配置好的vim

四、gcc/g++

gcc和g++分别是C语言和C++语言的编译器,需要注意的是:gcc只能编译C语言文件(即.c为后缀的文件),g++能够同时编译C语言文件和C++文件(因为C++兼容C语言),因为gcc和g++的选项和操作基本一致,这里目前先以gcc为例进行讲解
在学习gcc的操作中,我们重点需要掌握一个命令,那就是将我们写的源文件直接编译形成可执行程序的命令:gcc test.c -o test,这条命令的意思为:对test.c文件进行编译,然后指定形成test可执行程序,因此这里的test就是一个可执行程序,需要注意的是**,如果我们没有采用-o选项进行指定生成文件的话,那就会默认生成a.out可执行程序**
在这里插入图片描述
在这里插入图片描述
下面就重点讲解一下源文件在进行编译的详细过程,编译的过程包括:预处理,编译,汇编

1、预处理

这个过程会进行的操作有:宏替换,头文件的展开,去掉注释,条件编译
在这个操作之中,我们会使用一个选项:-E,-E选项的作用就是,从现在开始进行编译,到预处理结束就停下来,命令的使用格式为:gcc -E test.c -o test.i,这条代码的意思为:从现在开始进行编译,到预处理结束时就停下来,停下来之后形成一个文件叫做test.i,这个文件中就是预处理进行的结果:形成一个test.i的文件
在这里插入图片描述

在这里插入图片描述

2、编译

编译过程要做的事情就是将C语言翻译成汇编语言,这个过程需要使用的选项就是-S,意思是从现在开始进行编译,到编译结束时就停下来,这个过程中使用的命令是:gcc -S test.i -o test.s,这条命令的意思为:从现在开始进行编译,到编译结束时就停下来,停下来之后会指定形成一个test.s的文件
命令操作过程即结果:
在这里插入图片描述
查看test.s文件中的内容:vim test.s
在这里插入图片描述

3、汇编

汇编的过程就是将汇编语言翻译转化为二进制,这个过程需要的选项是-c,这个过程使用的命令是:gcc -c test.s -o test.o,以.o为结尾的文件是一种目标文件,一般是在汇编过程形成的,这条命令的意思为:现在开始进行汇编,到汇编过程结束的时候就停下来,然后生成一个叫做test.o的目标文件
命令操作过程:
在这里插入图片描述
查看test.o的内容:vim test.o
在这里插入图片描述

4、链接

链接的过程就是将我的文件和所需要的库文件链接起来,本质就是将我的代码和所需要的库文件中的方法(函数)建立联系,这个过程需要使用的命令:gcc test.o -o test ,直接可以形成可执行程序
命令操作如下:
在这里插入图片描述

简单总结一下:翻译的过程中包括预处理,编译,汇编和链接

  1. 预处理:gcc -E test.c -o test.i
  2. 编译:gcc -S test.i -o test.s
  3. 汇编:gcc -c test.s -o test.o
  4. 链接:gcc test.o -o test

#### 在vim编辑器中查看多文件需要知道的一些操作
在多文件中,如果我们想要在vim编辑器中查看多个文件,则可以在vim编辑器的底行模式中输入vs 文件名,如在当前路径下我们有test.c,test.i,test.s,test.o,test四个文件,那么我们首先可以使用vim test.c查看源代码,在查看源文件的过程中我们可以使用vs test.i查看test.i中的内容,那么这种情况下,因为我们知道光标只能在一个文件中存在,那么我们应该怎么操作才能使光标在不同的文件中进行移动呢??此时,我们可以在多文件的查看的状态下使用CTRL+ww,就可以实现光标在不同的文件之间进行来回切换

五、动态库和静态库

在程序进行链接的时候,我们通常都需要包含各种库文件,这些库文件就包含动态库和静态库,在Linux和windows中动态库和静态库文件的后缀是不一样的
动态库:Linux中(主要是以,so为结尾),windows(主要是以.dll为结尾)
静态库:Linux中(主要是以.a为结尾),windows(主要是以.lib为结尾)

1、动态库

一般是将库的链接加载到可执行文件中,不需要将库文件中的代码全部拷贝进行可执行程序,但是后期程序在运行的时候还是需要动态库的代码的

2、静态库

与动态库刚好相反,静态库需要将静态库中的代码全部拷贝进可执行程序中,因此一般形成的可执行程序的大小会比较大,但是后期程序在运行的时候就不再需要静态库文件了

3、动态库和静态库的优缺点

  1. 优点
  • 动态库:不需要将动态库中的代码全部拷贝进行每一个可执行程序,这样一来就节省了很多空间,而且形成的可执行程序的体积也会比较小
  • 静态库:因为已经将静态库中的代码全部拷贝进可执行程序,所以后期程序在运行的过程中不再需要依赖静态库文件中的代码,即使静态库文件被销毁也不会影响程序的运行
  1. 缺点:
  • 动态库:由于动态库是将动态库的链接加载到可执行程序中,并不是将动态库本身的代码加进可执行程序,因此后续仍然需要依赖动态库文件,一旦动态库文件被销毁,则程序将无法运行
  • 静态库:由于在程序进行链接形成可执行程序的时候需要将静态库文件中的代码全部拷贝进行可执行程序,因此会导致可执行程序的体积较大,从而容易浪费系统的内存资源
    由于使用静态库进行静态链接的时候需要的内存空间比较大,因此一般在进行链接的时候都会默认使用动态库进行动态链接,这样比较节省系统的内存资源

六、gdb调试器

1、为什么要使用gdb调试器

在实际开发中,可能用到的Linux环境会比较多一点,相对而言,使用VS系列的编译器就会比较少一点,而且一般项目也是在线上的,所以我们要学会gdb调试器,以后如果项目中的代码出现问题才能够马上利用gdb调试器进行快速调试解决代码的问题

2、在使用gdb进行调试之前需要知道的问题

我们知道,在windows中的VS编译器中,我们调试是在debug版本下进行调试的,我们写的代码默认是有两种发布方式的,分别为:debug和release在Linux中,默认形成的可执行程序是release版本的,也就是说默认使用gcc test.c -o test 这样形成的可执行程序默认是不带有调试信息的,我们可以在Linux中进行验证,首先我们要知道使用gdb调试器进行开始调试的指令是:gdb 可执行程序,如:gdb test
在这里插入图片描述
最终的结果就是,系统给我们提示该文件中没有包含相应的调试信息,这是因为Linux中形成的可执行程序默认是release版本的,那么如果想要进行调试,我们就需要将可执行程序转换成为debug版本,转换的方法是:gcc -o test_g test.c -g
在这里插入图片描述
如何查看调试信息?

readelf -S test_g|grep debug
readelf -S test|grep dubug

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
从上面的结果中我们可以看出来。release版本是不带有调试信息的,只有debug版本的可执行程序才带有相应的调试信息
如果我们不想要继续进行调试我们可以输入quit就可以退出gdb调试器

2、gdb调试器的常见使用指令(重点)

  1. l:显示源代码,也可以加上行号,表示为在某行开始显示代码
    在这里插入图片描述
  2. 关于断点
  • 打断点:b+行号,表示在某行打断点
  • 查看断点信息:info b(包含断点的编号,这个编号在删除断点的时候需要用到)
  • 删除断点:d+断点编号
    在这里插入图片描述
    删除断点的演示
    在这里插入图片描述
  1. r:让程序跑起来,相当于VS中的F5,直到遇到断点的时候才停下来
  2. p:用于查看变量的值,用法为p+变量,如:p a表示查看a当前的值
  3. s:逐语句进行调试,相当于VS中的F11
  4. n:逐过程进行调试,相当于VS中的F10
  5. bt:查看调用堆栈信息
  6. display:对变量进行长显示,相当于VS中的监视
  7. undisplay:对变量进行取消长显示,相当于VS中删除监视窗口中的变量
  8. until:可以实现跳转到某行的功能,比如:until 9表示跳到第9行
  9. c:表示从一个断点跳到下一个断点
  10. finish:表示在一个函数中可以自动执行完一个函数之后就停下来

七、make/makefile项目自动化构建工具

1、make和makefile是什么?

其中make是一条指令,常见的make指令有:make用于生成可执行程序,make clean 用于清理项目清理不需要的文件

2、生成项目(生成可执行程序)

一般的生成项目就需要包含两个东西:依赖关系和依赖方法

  • 依赖关系:表明谁依赖谁的问题,比如:哪个文件的形成需要依赖哪个文件
  • 依赖方法:在第一条命令表明好依赖关系之后,接下来就是要表明这个依赖关系要怎么依赖,即怎么生成结果文件

实例:有一个mytest.c的源文件和一个makefile文件,mytest.c中写的是C语言代码,makefile中就需要写相关的文件依赖关系和依赖方法
makefile:
在这里插入图片描述
然后使用make指令就可以快速进行编译链接形成可执行文件
在这里插入图片描述

3、清理项目

清理项目的过程一般需要一个makefile中的关键字:.PHONY,这个关键字之后一般跟的是一个为目标
命令操作过程
在这里插入图片描述
makefile中的代码
在这里插入图片描述

4、单文件makefile案例

上面讲解的基本就是使用单个文件的样例,将其中的生成项目和清理项目合起来就是一个单文件的makefile案例:
在这里插入图片描述

这里需要注意的是:makefile文件中不同的依赖关系和依赖方法是有顺序之分的,第一个依赖关系在外面的命令操作中默认使用make就可以执行,而其他的就需要使用make+ 目标才能够执行,
比如:上面这个案例:make默认执行的是生成项目,make clean执行清理项目 如果将上面的生成项目和清理项目的顺序倒过来,则make就会执行清理项目,要执行生成项目的话就需要使用make mytest

5、多文件makefile案例

在当前路径下我们创建了几个文件,分别是test.c,add.c,add.h,现在我们想要使用这几个文件来实现一个加法功能,很明显,在编译的过程中,我们需要将test.c和add.c编译形成test.o和add.o然后这几个文件再进行链接才能形成可执行程序,那么如果文件太多,我们就需要每一个文件都自己手动去执行gcc命令,那么这样一来就会非常麻烦,因此,这个时候,我们的自动化构建工具就能够很好地解决我们这个问题,我们只需要创建一个makefile文件,然后在里面写好不同文件之间的依赖关系和依赖方法即可
makefile文件中的内容:
方法一:能够展示出编译过程中的详细过程:

在这里插入图片描述
方法二:一步直接到可执行程序
在这里插入图片描述

指令操作:和单文件案例差不多
在这里插入图片描述
关于.PHONY?
这是makefile中的一个关键字,被修饰的将会总是被执行,没被修饰的将不是总被执行
如何区分总是被执行和不是总是被执行?

  • 不是总是被执行:
    在这里插入图片描述
    当文件被更新到最新的时间的时候,该指令将不再被执行
    如何判断文件是否已经被更新到最新了呢?
    系统中有一个查看文件的指令:stat,命令的用法:stat+文件名
    在这里插入图片描述

在这里插入图片描述
从中可以看到有三个时间:Access,Modify,Change ,其中:Access是文件被访问的时间Modify是文件的内容被改变的时间Change是文件的属性被改变的时间,这里需要注意,我们改变文件的内容的时候有时也会改变文件的属性,因为我们改变文件的内容的时候,文件的大小就会被改变,而文件的大小也属于文件的属性,所以改变Modify时间的时候也会改变Change时间
那么如何判断是否需要执行make指令呢??
这个时候就需要对比test.c和mytest的Modify时间了,如果test.c的Modify时间比较新(靠后),则需要执行make指令来重新形成可执行程序,否则,则不需要重新执行指令

  • 总是被执行:被.PHONY修饰的目标将会总是被执行

在这里插入图片描述
总是被执行的意思就是直接忽略对比两个文件之间的Modify时间,总是执行该指令

八、gitee的使用

1、如何在Linux上安装git?

使用yum来进行安装:sudo yum install -y git

2、在gitee上新建仓库


在这里插入图片描述
在这里插入图片描述

3、克隆仓库到本地

在Linux中执行git clone指令:git clone 刚刚复制的网址(git clone https://gitee.com/nan-he-qing/for_delete.git)
在这里插入图片描述

4、提交文件到gitee上(三板斧)

在使用git指令的时候可能会出现一些问题:比如刚开始没有相应的git指令,会出现如下的问题:

fatal: Not a git repository (or any of the parent directories): .git

在这里插入图片描述
这个时候需要在命令行中输入git init对git命令进行初始化
在这里插入图片描述
下面就可以使用git中的一些指令了:

  • 查看本地文件与远端的关系:git status
    在这里插入图片描述

  • git add 文件名:git add test.c
    在这里插入图片描述

  • git commit -m “提交的日志”:git commit -m “这是我今天联系在Linux上将代码提交到gitee上写的代码”
    在这里插入图片描述

  • git push
    在这里插入图片描述

这里需要注意的是我们使用三板斧的位置,就是我们首先是在Linux平台克隆我们的本地仓库(将远程仓库克隆到本地),然后在本地仓库这个目录进行操作

总结

在这篇文章中我们重点学习了Linux中的几款常见的开发工具,包括学会使用yum进行安装软件,使用vm编辑器来编写代码,使用gcc和g++编译器来编译我们的代码,使用gdb调试器来调试我们的代码,使用make/makefile来自动化构建我们的项目(这个在大型项目中的优势非常明显),最好我们还学会了如何在Linux上将我们写好的代码提交到远程的gitee上