Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)

摔倒了,就正好躺下来歇歇,只要方向是对的,慢一点也会到。

Yum

‍Yum概述

yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。Yum是rpm系统的自动更新程序和包安装/删除程序。它会自动计算依赖项,并计算出安装软件包应该发生的事情。Yum有一个用于添加简单功能的插件接口。它使维护机器组变得更容易,而无需使用rpm手动更新每台机器。

‍Yum的设置

‍添加epel源

例如我们这里是在安装了CentOS 7.6 的腾讯云,我们可以直接通过下面的命令安装 epel 的 yum 源:

sudo yum install epel-release

‍常见用法

1、 显示所有的软件包

yum list

下面图中的只是一部分的软件包,因为显示不了那么多。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第1张图片

2、 安装软件包

yum install packagename(软件包名)
注意:普通用户在安装软件时,最好还是带上sudo来提升我们的权限,以防后期出现一些配置的错误。

3、 卸载软件包

yum erase packagename(软件包名)

4、 搜索软件包

yum search packagename(软件包名)

5、 清除缓存

yum clean all # 清除系统所有的yum缓存
yum makecache # 生成yum缓存

注意:

  • 在使用yum源时,我们必须得先知道一个服务器同一时刻只允许一个yum进行安装,不能在同一时刻同时安装多个软件。必须等上一个下载完后才能安装下一个。

yum是从服务器上下载RPM包,所以在下载时必须联网,可以通过ping指令判断当前云服务器是否联网,如下动图所示:
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第2张图片
在这里我们先下载3个软件,下面讲时会用到。

  • 1、下载gcc用来编译C程序
    sudo yum install gcc
  • 2、下载g++用来编译C++程序
    sudo yum install gcc-c++
  • 3、下载irzsz用来实现linux与windows文件互传
    sudo yum install lrzsz
  • 4、下载gdb用来调试程序
    sudo yum install gdb
  • 5、下载yum用来编辑
    sudo yum install vim*

windows与linux文件互传

在上面的安装软件包我们已经安装好lrzsz。我们就可以实现互传文件的操作。

windows to linux

命令格式:

rz [option]
将windows环境上的文件上传到linux机器上。

Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第3张图片

linux to windows

命令格式:

sz [option] filename
将云服务器上的文件下载到本地机器的指定文件夹。

Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第4张图片

注意:

  • rz 命令和 sz 命令不能直接上传、下载文件夹,可先将文件夹打包,当作文件上传和下载。

vim编辑器

vim概述

vim(Vi improved)是vi编辑器的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

vim编辑器的使用

1、使用vim打开文件

vim 文件名
① 如果文件已存在,则直接打开
② 如果文件不存在,则vim编辑器会自动在内存中创建一个新文件

例如:使用vim命令打开csdn.txt文件
vim csdn.txt

(1)、保存文件
在任何模式下,连续按两次Esc键,即可返回到命令模式。然后按(shift+:)冒号,进入到末行模式,输入wq,代表保存并退出。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第5张图片

(2)、强制退出文件
和上面的一样先进入到命令模式后,输入冒号后,在输入q!
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第6张图片

vim 基本模式

我们这里主要介绍vim最常用的四种模式:命令模式、插入模式、底行模式、可视模式。

1、命令模式(Normal mode)。
用vim打开一个文件就直接进入命令模式了(这是默认的模式)。在这个模式中, 你可以使用上下左右按键来移动光标,你可以使用删除字符或删除整行来处理文件内容, 也可以使用复制、粘贴来处理你的文件数据。
在命令模式下有如下操作:
Ⅰ、光标移动
shift+$:光标移动到本行的结尾。
shift+^:光标移动到本行的开始。
shift+g:光标移动到结尾。
gg:光标移动到最开始。
n(你要移动到哪一行的行号)+shift+g:光标移动到给定的行。
w:按照“单词”为单位进行光标tiao’zhuan,从左往右,在从上到下
b:按照“单词”为单位进行光标tiao’zhuan,从右往左,在从下往上
h:光标向左一个字符
j:光标向下走一行
k:光标向上走一行
l:光标向右走一行
Ⅱ、复制粘贴
yy:复制光标所在的一行内容。
nyy:复制包括光标所在位置开始的以下n行。(n为你想要拷贝的行数<包括本行>)
yw:复制一个”单词“。
nyw:复制n个”单词“。
p:粘贴。
np:粘贴n次。
Ⅲ、撤销与反撤销
u:撤销。
ctrl+r:恢复刚刚的撤销。
Ⅳ、删除和剪切
dd:删除光标所在的一行。
dd后+p就相当剪切。
x:删除光标所在位置哪一个字符。<往后删>
shift+x(X):删除光标之前的字符。(不包括光标所在位置)<往前删>
nx:删除光标所在位置开始的n个字符(包括光标所在位置)。
r:下面的操作,直接替换当前光标所在的字符
nr:下面操作,直接替换n个字符为相同的字符
shift+r®:进入替换模式
Ⅴ、切换大小写
shift+~:碰到大写变小写,碰到小写变大写。

2、插入模式(Insert mode)。
在一般模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件的内容,只有当到你按下【i, I, o, O, a, A】等任何一个字母之后才会进入编辑模式。这时候屏幕的左下方会出现【INSERT】的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下【Esc】即可退出编辑模式。

3、底行模式(Command mode)。
在底行模式下,我们可以将文件保存或退出,也可以进行查找字符串等操作。在底行模式下我们还可以直接输入vim help-modes查看当前vim的所有模式。
在底行模式下有如下操作:
Ⅰ、行号
set nu:显示行号
set nonu:取消显示行号
Ⅱ、分屏
vs 文件名:分屏
ctrl+w+w:光标在多屏下进行切屏
Ⅲ、退出
退出: :(冒号)+q

4、可视模式(Visual Modes)
在这个模式下我们可以进行多行注释以及取消多行注释等,在命令模式中,直接按ctrl + v(可视块)或V(可视行)或v(可视),然后按下↑ ↓ ← →方向键来选中需要复制的区块,按下y 键进行复制(这里和命名模式不一样,不要按两下yy),最后按下p 键粘贴退出可视模式按下Esc。
Ⅰ、多行注释
第一步:按Esc退出到命令模式,按gg切换到第1行。
第二步:然后按Ctrl+v进入到可视化区块模式。
第三步:在行首使用H、J、K、L进行左、下、上、右键选择需要注释的多行。
第四步:按下键盘(大写)“I”键(Shift + i),进入插入模式。
第五步:输入//号注释符。
第六步:输入完成后,连续按两次Esc即可完成添加多行注释的过程。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第7张图片
Ⅱ、取消多行注释
第一步:按Esc退出到命令模式,按gg切换到第1行。
第二步:然后按Ctrl+v进入可视化区块模式(列模式)。
第三步:使用键盘上的方向键的H、J、K、L进行左、下、上、右选中需要移除的//号注释。
第四步:直接按方向键上面的Delete键即可完成删除注释的操作。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第8张图片

Linux编译器 gcc/g++

gcc/g++概述

GNU CC(简称gcc)是GNU项目中符合ANSI C标准的编译系统,gcc和g++能够编译用C、C++、Object C、Jave等多种语言编写的程序。

gcc/g++编译流程

1、预处理
在预处理阶段gcc与g++会进行宏替换、去注释、条件编译、头文件包含等工作。生成 .i 文件。
例如:g++ -E test.cpp -o test.i
上面指令的含义是:执行完预处理就停下来,并生成test.i的文件。

2、编译
在编译阶段gcc与g++会先检查我们的代码语法是否有错误和代码的规范性,最后将我们的代码编译成汇编代码。生成 .s 文件。
例如:g++ -S test.i -o test.s
上面的指令含义是:执行完编译阶段就停止,并生成test.s的文件 。

3、汇编
在汇编阶段gcc与g++会将编译后生成的汇编代码编译成机器码。生成 .o 文件。
例如:g++ -c test.s -o test.o
上面的指令含义是:执行完汇编阶段就停止,并生成test.o的文件。

4、链接
最后在链接阶段连接器将目标文件和你用到的相关库文件一起链接起来。
例如:g++ test.o -o test.exe
上面的指令含义是:将我们的文件及相关的库文件链接形成可执行程序。

注意:
1、如果记不住我们每个阶段用什么选项的话,不妨看看自己键盘的左上角的ESC键,但要注意我们的汇编阶段是小写的c。
2、其默认生成的release版本,不可以进行调试。

动静态库

在链接阶段我们要链接相关的库文件,其中这些库文件中,又分为动态库和静态库两种。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第9张图片

Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第10张图片

✏️动静态库区别

1.命名方式不同:
静态库libxxx.a:库名前加”lib”,后缀用”.a”,“xxx”为静态库名。
动态库libxxx.so:库名前加”lib”,后缀变为“.so”。

2.链接时间不同:
静态库的代码是在编译过程中被载入程序中。
动态库的代码是当程序运行到相关函数才调用动态库的相应函数。

3.链接方式不同:
静态库的链接是将整个函数库的所有数据在编译时都整合进了目标代码。
动态库的链接是程序执行到哪个函数链接哪个函数的库。

✏️动静态库优缺点

静态库:

  • 优点是,在编译后的执行程序不再需要外部的函数库支持,运行速度相对快些。不依赖第三方库,程序的可执行较好。
  • 缺点是,如果所使用的静态库发生更新改变,你的程序必须重新编译。浪费空间、速度较慢。

动态库 :

  • 优点是,动态库的改变并不影响你的程序,所以动态函数库升级比较方便。节省空间(磁盘的空间、运行内存的空间),可执行程序体积小,加载速度快。
  • 缺点是,因为函数库并没有整合进程序,所以程序的运行环境必须提供相应的库。依赖动态库,程序的可移植性较差。

gcc/g++语法

语法: gcc/g++ 选项 文件
常用选项如下:

  • -E参数
    -E 选项指示编译器仅对输入文件进行预处理。当这个选项被使用时, 预处理器的输出被送到标准输出而不是储存在文件里.

  • -S参数
    -S 编译选项告诉 GCC 在为 C 代码产生了汇编语言文件后停止编译。 GCC 产生的汇编语言文件的缺省扩展名是 .s 。

  • -c参数
    -c 选项告诉 GCC 仅把源代码编译为目标代码。缺省时 GCC 建立的目标代码文件有一个 .o 的扩展名。

  • -o参数
    -o 编译选项来为将产生的可执行文件用指定的文件名。

  • -O参数
    -O 选项告诉 GCC 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2 选项告诉 GCC 产生尽可能小和尽可能快的代码。 如-O2,-O3,-On(n 常为0–3);

    • -O 主要进行跳转和延迟退栈两种优化;
    • -O0 表示不做优化
    • -O1 为默认优化
    • -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
    • -O3 则包括循环展开和其他一些与处理特性相关的优化工作。选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。

Linux调试器 gdb

由于我们知道用gcc或g++默认生成的可执行程序是release版本,那么我们怎么生成debug版本呢?只需要在我们的链接阶段加上 -g 就可以生成debug版本了。
在这里插入图片描述
在上面我们已经下载好了gdb调试器了并且生成了debug的可执行程序,下面我们就进行gdb调试的相关操作。
语法: gdb 文件名(debug版本的可执行程序)

gdb常用命令

Ⅰ、显示
1、list/l 1/n
语法:list/l
功能:显示当前可执行的代码,默认从合理的起始行进行显示。
如果想从第一行开始显输入指令 l 1或者list 1 在多按几次回车就能显示全部。

2、print/p
语法:print/p 变量/&变量/表达式
功能:只打印一次变量的值、打印变量的地址或打印表达式的值,下一次执行不会显示。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第11张图片

3、info break/b
语法:info break/b
功能:查看当前调试程序的所有的断点信息。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第12张图片

4、display和undisplay
Ⅰ、
语法:display (&)变量名
功能:display常显示当前的变量的值或地址
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第13张图片
Ⅱ、
语法:undisplay 常显示编号 编号为下图的红色方框中的数字。
功能:undisplay与display完全相反是取消当前的变量的值或地址常显示。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第14张图片

5、breaktrace/bt
功能:查看各级函数调用及参数。

Ⅱ、执行
1、run/r
功能:把代码运行起来。

*2、next/n
功能:与vs的F10功能相同,有函数调用不会进入函数,逐过程执行。

*3、step/s
功能:与vs的F11功能相同,有函数调用会进入函数,逐语句执行。

**4、until *
语法:until 行号
功能:跳转至任意行。

*5、finish
功能:在一个函数体内,执行执行完该函数内所有的语句。如果我们一直按s调试碰到系统函数时进入了,我们不想查看该函数的调用时,直接finish执行完该函数所有语句。

*6、continue/c
功能:从当前行跳转到下一个断点处。

Ⅲ、断点
1、info break/b
语法:info break/b
功能:查看当前调试程序的所有的断点信息。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第15张图片
2、break/b
语法:break/b 行数 含义:在给定的行数打断点。
功能:打断点。

3、delete/d
语法:delete/d Num数 其中的Num数为上表中的Num的第一个断点的意思。
功能:删除断点。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第16张图片
4、disable
语法:disable 编号
功能:禁用指定编号的断点。

5、enable
语法:enable 编号
功能:启用指定编号的断点。

总结

1、gdb会记住上一条的命令,按回车直接执行上一条输入的命令。
2、gcc/g++默认生成的是release版本,而gdb使用必须是debug版本。即生成的可执行程序必须带 -g。
Linux环境基础开发工具及使用(yum、vim、gcc、g++、gdb)_第17张图片

如有错误之处,还请各位指出,谢谢大家!!!
END…

你可能感兴趣的:(linux,linux,gdb,vim,gcc,g++)