一、yum
yum是linux上将软件从互联网远程下载安装到本地的一个工具,类似安卓手机上的应用市场。yum通过yam源找到配置文件,路径/etc/yum.repos.d/
yum的使用
在使用yum相关命令时,建议使用root用户或在命令前面加上sudo。
查找软件
yum list | grep XXX
安装软件/卸载软件
yum install XXX
yum -y install XXX #安装时不询问
yum remove XXX
yum -y remove XXX #卸载时不询问
清除yum缓存
yum clean all
更新yum缓存
yum makecache
安装扩展yum源
yum -y install epel-release
更新
yum -y update #升级所有包同时,也升级软件和系统内核
yum -y upgrade #只升级所有包,不升级软件和系统内核,软件和内核保持原样。
二、vim编辑器
vim是一款在linux上的编辑器。
进入vim
vim XXX(文件名)
退出vim:在命令模式进入到底行模式输入q,如果需要强制退出则输入q!,保存并退出wq!。
:q
:q!
:wq
:wq!
vim常用模式
vim编辑器有三种常用模式:
命令模式:进入vim编辑器时,默认就在此模式,任意模式下按Esc键可回到命令模式。
底行模式:在命令模式按Shift+; 即可进入底行模式。
插入模式:在命令模式下按i键。
命令模式
进入命令模式,在任意模式下按esc键。
vim指令
1、文本编辑
yy / 数字yy:复制当前行/复制包括当前行在内的多行文本。
dd / 数字dd:剪切当前行/剪切包括当前行在内的多行文本。
p / 数字p :粘贴到当前行/粘贴多行相同内容。
u:撤销操作。
ctrl + r:还原最近一次的撤销操作。
x/ 数字x:删除光标所在位置字符/删除包括光标所在位置后n个字符。
Shift + x/ 数字Shift + x:删除光标所在位置前一个字符/删除不包括光标所在位置的前n个字符。
2、移动光标
h 向左移动
j 向下移动
k 向上移动
l 向下移动
Shift + g: 将光标移动到文档结尾。
数字 Shift + g:将光标移动到文档指定行的开头。
gg:将光标移动到文档开始。
Shift + 4($) :将光标移动到所在行结尾。
Shift + 6(^) :将光标移动到所在行开头。
w/b:以单词为单位进行左右移动。
数字w/ 数字b:将光标移动到后n个单词处/将光标移动到前n个单词处。
3、文本替换
Shift + `(~):将光标位置的小写字母转换为大写字母/大写字母转换为小写字母,并将光标自动向右移动一次,按住不动可以自动转换并移动光标。
r:在输入r后紧接着输入一个字符,可将光标所在位置字符替换为输入的字符。
数字r:在输入数字r后紧接着输入一个字符,可将光标所在位置后n个字符替换为输入的字符。
4、更改模式
i:进入插入模式。
Shift + r:进入替换模式。
Ctrl + w + w:将光标切换至其他分屏。
批量注释代码步骤:
1.命令模式下按ctrl + v 左下角出现" V-BLOCK".
2.使用hjkl移动光标选中要批量注释的区域.
3.按下CAPS LOCK键切换至大写,按下i键进入插入模式.
4.输入“//”,按Esc回到命令模式即可完成批量注释.
删除 批量注释代码步骤:
1.命令模式下按ctrl + v 左下角出现" V-BLOCK".
2.使用hjkl移动光标选中要删除的批量注释的区域.
3.输入“d”,即可删除批量注释.
插入模式
进入:在命令模式按i键可进入插入模式。
退出:按Esc。
底行模式
进入:Shift + ;(:)
底行模式指令
:set nu 显示行号
:set nonu 隐藏行号
:/字符 搜索/后输入的字符,高亮显示所有搜索的字符。
:w 保存
:w! 强制保存
:q 退出
:q! 强制退出
:wq 保存并退出
:wq! 保存并强制退出
:! code 不退出vim执行代码
:%s/ 原内容/ 替换后内容/g 将文档中所有 原内容替换为 替换后内容
:vs 文件名 使用vim编辑器分屏打开
三、gcc/g++编译器
Linux对c程序的翻译使用gcc/g++编译器。Linux翻译程序共有四个阶段:预处理、编译、汇编、链接。
gcc XXXX.c #默认生成a.out文件
gcc -o filename xxxx.c
gcc xxxx.c -o filename #自定义生成的可执行文件的名称
预处理(xxx.i)
gcc -E xxxx.c -o filename.i #对程序的翻译做到预处理之后就停止
编译(xxx.s)
gcc -S xxxx.c -o filename.s #对程序的翻译做到编译之后就停止
gcc -S xxxx.i -o filename.s #用预处理之后的文件进行编译
汇编(xxx.o)
gcc -c xxxx.c -o filename.o #对程序的翻译做到汇编之后就停止
gcc -c xxxx.s -o filename.o #用编译之后的文件进行汇编
链接
gcc -o filename xxxx.o #将可重定向的二进制文件进行链接
gcc -o filename xxxx.c #对文件进行预处理、编译、汇编、链接
函数库的概念
c程序中的方法一般都会依赖库中的方法。
库分为动态库和静态库。
静态库(libxxxxx.a):让编译器对用户的程序进行静态链接。
静态链接:链接时,如果是静态链接,则找到静态库,在静态库中找到所需要的代码并拷贝到自己的程序中。静态链接成功后不依赖任何库。因为需要拷贝代码的原因,比较占用空间。
动态库(libxxxxx.so):让编译器对用户的程序进行动态链接。所有动态链接程序共享动态库,方法的实现都在动态库,所有程序中只有方法的地址,故较为节省空间。
动态链接:链接时,如果是动态链接,则找到动态库,在动态库中找到所需要的代码并拷贝代码的地址到自己程序的相应位置。动态链接成功后依然依赖动态库,一旦动态库缺失,则程序无法运行。
Linux默认采用动态链接和动态库。
ldd xxxxx #显示可执行程序所使用的库
file xxxxx #获取文件类型,可查看可执行程序使用的链接方式
如果想要使用静态链接
gcc xxxx -o filename -static
四、自动化构建工具make/makefile
make是一个命令
makefile是一个文件,在源代码的路径下
touch Makefile #首先创建一个Makefile文件
vim Makefile #编辑Makefile文件
#Makefile文件中
test:test.c
gcc -o test test.c #一定要用tab键缩进
.PHONY:clean #表示一直执行
clean:
rm -f test
#Esc回到命令模式 -> :wq!保存并退出文件
make #自动化编译
ll #可看到test文件已经出现了
./test
make clean #自动运行第10行,自动删除test文件
规则
Makefile是一个围绕依赖关系和依赖方法进行自动化编译的工具。完成自动化编译必须要有正确的依赖关系以及与之对应正确的依赖方法。
依赖关系:格式为 目标文件:源文件。
依赖方法:必须使用tab缩进。
依赖关系的 " : " 右边可以是空的。
test:test.c #意为test依赖于test.c,“:”左侧为目标文件,右侧为目标文件所依赖的文件,即源文件
gcc -o test test.c #这是上面依赖关系对应的依赖方法,必须使用tab缩进
伪目标
".PHONY:" :修饰的称为伪目标,可以一直执行,即输入多次也可以执行对应的依赖方法。
例如:
clean被“.PHONY:”修饰,make clean可以一直执行。
233没有被“.PHONY:”修饰,make只可执行一次。
233被“.PHONY:”修饰后,可以一直执行。
" .PHONY: " 有关原理
没有被 " .PHONY: " 修饰的依赖关系只能执行一次主要参照目标文件与源文件的最近编辑时间。
如果目标文件的最近编辑时间比源文件的最近修改时间更新,则不能再执行那个语句,
如果源文件的最近编辑时间比目标文件的最近修改时间更新,则可以再次执行那个语句。
五、gdb调试工具
调试器的核心工作,主要是为了定位问题。
使用gdb调试工具的可运行文件必须是以debug模式编译的。
gcc -o filename xxxx.c -g #以debug模式编译
debug filename
gdb调试命令
l :显示代码/继续显示代码
l 0 :从程序的最开头开始显示代码
l n :从程序的第n行开始显示代码
r/run : 运行程序(相当于vs的F5)
n/next:逐过程
s/step:逐语句
until 行号:在函数内进行指定位置跳转,执行区间代码
finish:进入一个函数后使用,运行完毕此函数就停止
c:从一个断点直接运行到下一个断点
set var value = xxx :设置变量为xxx
b n/b file:行号 : 在第n行添加一个断点
b file:函数名 :在对应的函数代码第一行添加一个断点
info b : 查看所有断点
d n : 删除编号为n的断点
disable breakpoint n : 关闭编号为n的断点
enable breakpoint n : 开启编号为n的断点
bt:查看调用栈
p 变量:查看变量数据
display 变量:长显示变量数据(包括内置类型、自定义类型、stl等)
undisplay 长显示变量编号:取消对应编号的长显示
quit:退出gdb