一,软件包管理工具-yum
软件包管理工具:安装其他的软件工具
yum(包管理器)–类似于手机上的应用商店—redhat系列Linux中默认的管理工具。提供软件包的查看,安装,移除等管理操作
三板斧操作:
1.查看软件包:yum list ----查看所有软件包
yum search–搜索指定软件包(示例:yum search gcc / yum makecache将软件包信息保存到本地)
2.安装软件包:1.su root; 安装软件包必须具有管理员权限; yum install–安装软件包 (示例:yum install lrzsz)
3.卸载软件包:1.su root; 卸载软件包必须具有管理员权限; yum remove–卸载软件包 (示例:yum remove lrzsz)
二,编辑器-vim
vim–Linux下非常常用的一个编译器
vim是一个命令行编辑器,其中不能使用鼠标(使用鼠标是无效的)–在命令行中实现光标的移动,文本的操作,文本的编辑。因此vim具有多种操作模式:12种,常用的有3种:插入模式,普通模式,底行模式
vim的三种模式:
插入模式:进行文本数据的编辑插入
普通模式:进行文本常见的操作--复制,剪切,粘贴,删除,撤销,返回,文本对齐,光标移动
底行模式:进行文本的保存退出,以及文本的匹配,查找,替换等操作
vim的基本使用:
打开文件:vim filename—打开一个已有的文件,如果没有就会创建,打开文件后默认处于普通模式(所有模式都是围绕普通模式切换的)(注意:所在目录必须具有可写权限)
vim的操作模式转换:
普通模式—>插入模式:
i--直接进入插入模式;
a--光标后移一个字符,进入插入模式;
o--在光标所在行下方创建新行,进入插入模式;
普通模式—>底行模式:
使用英文冒号: 进入底行模式,实现文本的保存和退出操作;
:q-退出,
:w-保存
:wq-保存并退出
:q!-强制退出-不保存
其它模式—>普通模式:
任何模式按下ESC键,都可以返回普通模式
注意:
vim打开文件,每次其实是打开一个临时文件,作为中间交换文件,然后关闭源文件,编辑的操作都是在中间文件中完成的,只有正规退出 :wq的时候才会将改变的数据写入源文件中,并且删除中间文件。
否则中间文件存在的情况下,下次vim打开文件的时候,就会有提示信息(删除这个中间文件后就没有)
普通模式下的操作指令:
光标移动:h/j/k/l-上下左右移动光标,w/b按单词移动光标,ctrl+f/b上下翻页
文本操作:
gg 回到当前文本的首行
G 移动到当前文本的尾行
gg=G 调整代码的格式
删除
x 删除当前光标的字符
X 删除当前光标的前一个字符,直到当前光标前字符删除完
dw 删除单词
[num]x 删除从当前光标位置开始删除num个字符
[num]X 删除当前光标所在位置的前num个字符
dd 删除光标所在的那一行数据
[num]dd 向下删除包含光标在内的多行数据
复制
yy 复制当前光标所在的这行数据
[num]yy 复制多行数据
yw 拷贝光标所在字
[num]yw 从包含光标所在字开始拷贝num个字
p 向光标的下一行去粘贴
P 向光标的上一行去粘贴
替换
r 替换当前光标所在字符
流程:在普通模式下,按一个r,表示替换光标所在的字符,接下来,按想要替换成的字符
R 替换多个字符,会先切换到replace模式,一直替换,如果替换完成了,按ESC返回到普通模式
撤销
u 撤销上次动作
ctrl+r 反撤销
更改
cw 更改光标当前所在的一个字
c[num]w 从当前光标位置开始更改num个字
跳
num G 表示光标跳至文章的第num行行首
vim 的底行模式:
:set nu
:set nonu
:%s/[deststr]/[srcstr]/g 将全文的deststr全部替换成srcstr
:s/[deststr]/[srcstr]/g 将光标所在行的所有deststr全部替换成srcstr
:[num1,num2]s/[deststr]/[srcstr]/g 从num1到num2行的deststr全部替换成srcstr
三,编译器-gcc
编译器—gcc/g++将我们所写的高级语言代码解释成为机器指令集
gcc是C语言编译器,g++是C++编译器;不同语言有自己的编译器。
编译流程:
1.预处理–展开头文件,宏替换,去注释,条件编译
gcc -E [filename].c -o [filename].i
选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。
2.编译–语法语义检测,没有错误则解释为汇编指令
gcc -S [filename].c -o [filename].s
3.汇编–将汇编指令解释成为机器指令
gcc -c [filename].c -o [filename].o
如果只编译到汇编位置为止就一定要加-c选项
4.链接–将所有用到的机器指令文件打包到一起,生成可执行程序。
gcc [filename].o -o [execfilename]
链接库文件的时候,有两种链接方式:
静态链接:产生的可执行文件大,会将所有依赖的信息全部编译到可执行程序当中去,但是运行时不需要额外依赖加载库文件,但是如果多个程序使用了相同的静态库,则运行时会在内存中造成代码冗余,可移植程度高
gcc [filename].c -o [execfilename] -static
动态链接:产生的可执行文件小,会将所依赖的信息记录在符号表当中,运行时需要加载动态库,不会在内存中造成代码冗余,可移植程序低。对公司来说一般都是采用这个链接方式,因为会将各个模块解耦出来
gcc [filename].c -o [execfilename]
gcc编译器,在链接生成可执行程序时,会默认链接标准C库,默认的链接方式为动态链接
四 ,调试器-gdb
调试一个程序的运行过程,能够让我们从运行过程中发现程序哪里有问题,可以适当的改变数据达到某种目的。并不是所有的程序都可以调试,调试器只能调试具有调试符号信息的程序–debug版本的程序
gcc生成可执行程序。默认会生成release版本的程序,程序中没有调试符号信息,想要生成debug版本需要加上-g选项。
调试一个程序前提:这个程序是一个debug版本程序,是gcc -g a.c b.c -o main生成的程序。
1.调试器加载程序
gdb ./main | 直接使用gdb加载程序 |
---|---|
gdb -p 30507 | 直接对一个正在运行中程序进行调试,-p用于指定进程id |
2.开始调试程序
run | 直接运行 |
---|---|
start | 开始逐步调试 |
3.常用调试指令
a.流程控制
next/n | 下一步,遇到函数直接运行,不会跟踪进入 |
---|---|
step/s | 下一步,遇到函数则跟踪进入函数 |
list/l | 默认查看调试行附近代码,也可以指定行 list a.c:20 |
until | 直接运行到指定行,也可以执行文件 until a.c:25 |
continue/c | 继续运行,直到断点处停下 |
b.断点操作
break a.c:9 | 给指定文件指定行打断点,程序运行到断点就会停下 |
---|---|
break function | 给函数打断点 |
info break | 查看断点信息 |
watch | 给变量打断点,当变量数据发生改变的时候停下 |
delete/d | 删除断点 |
c.内存操作
print/p | 查看变量数据 print a; 设置变量数据 print a=10; |
---|---|
backtrace | 查看程序运行调用栈信息,程序一旦崩溃,查看调用栈可以快速定位崩溃位置–栈顶函数 |
五,项目自动化构建工具-make/makefile
Makefile:普通的文本文件,用于记录项目的构建规则流程
make:Makefile解释程序,对Makefile中的构建规则流程进行解释执行,完成项目的构建
1.makefile的编写规则:
目标对象:依赖对象
制表符\t 编译命令
目标对象:是要生成的可执行程序的名称
依赖对象:是生成目标对象所需要的原码文件
2.make的执行规则:
1.一旦在命令行执行make,则运行make解释程序,在当前目录下找Makefile文件
2.make的执行规则中,要生成目标对象,首先要先保证依赖对象已经生成,则会递归向下寻找依赖对象的生成规则。
3.打开文件,找到第一个目标对象,与依赖对象进行时间关系判断,判断目标对象是否需要重新生成(只生成第一个目标对象就会退出)
4.若需要生成,则执行指令;(指令不一定非是生成目标对象的指令)
3.Makefile编写规则进阶:
make中的预定义变量:预定义变量通常都是在执行指令中使用
$@:表示目标对象
$^:表示所有依赖对象
$<:表示所有依赖对象中的第一个依赖对象
% 通配符的使用:匹配识别任意字符串
wildcard/patsubst关键字的使用
clean:makefile中的清理命令
clean:
rm -rf main$(obj)
伪对象的声明使用:
.PHONY:目标对象名称
伪对象的作用:不管对象是否最新,每次都要重新生成
.PHONY:clean
clean:
rm -rf main $(obj)