一、yum
1.关于yum的基本认识
yum是Linux下用于远程下载一些软件或者插件的一个指令,我们通常需要下载一个软件,是需要通过网络远程连接到服务器,通过地址去找到我们需要的软件,并且下载到本地,类似于手机中的软件商城,yum在Linux中就起着软件商城的作用
yum有自己的配置文件,我们称之为yum源,基本的yum源有:基本yum源和拓展yum源
一般也就够用了,若是需要额外配置自己的yum环境则根据需要去搜如何配置即可
查看yum的指令是:ls /etc/yum.repos.d/
2.yum指令的使用
(1)下载软件
yum install -y 软件名称
若是有些文件找不到,则有可能在拓展源中,使用
yum install -y epel-release 软件名称
(2)卸载软件
yum remove -y 软件名称
(3)在yum内搜索相关软件
yum list | grep 关键字
ps:由于直接展开yum list内容太多了,所以通过管道搜索筛选出自己需要找的软件包
二、vim
1.关于vim的基本认识
vim是一款多模式的文本编辑器,通常我们使用的vs2019等等的编译器叫集成开发环境,也就是将文本编辑和编译生成可执行程序等等功能都放在了一起,而vim则只是一款单纯的文本编辑器
vim具有多种模式,不同模式有不同的用法和差别,每种模式能够相互切换。
2.vim的模式切换
命令模式:vim默认打开后的模式就是命令模式,一般是用来对文本进行各种处理操作的
插入模式:可以进行文本编辑,文本写入和删除
底行模式:进行一些对vim这个工具的一些操作,例如退出保存等等
替换模式:替换模式下可以覆盖式的替换文本
3.不同模式下常用的指令
(1)命令模式
复制、粘贴、剪切、删除
yy / n yy : 复制光标所在行内容或者是n行的内容(n就是在按yy前,先按数字表示n行)
p / np : 粘贴内容到当前光标位置的下一行,粘贴n组(插入的形式粘贴内容)
dd / n dd :dd就是剪切当前行,ndd就是一次性剪切n行,如果剪切后不粘贴,那就是删除
x / n x : 行内删除,从左到右的删
X / n X : 行内删除,从右到左的删
撤销与撤销的撤销
u:撤销上一次的操作
ctrl r :对上一次撤销操作进行撤销
光标移动
shift g:将光标移动到文档末尾
gg:光标移动到文档开始
n shift g :将光标移动到指定的n行位置
shift 4 :将光标定位到当前行的最末尾位置
shift 6:将光标定位到当前行的最开始位置
w / n w:将光标按单词为单位在当前行中往后移动
b / n b:将光标按单词为单位在当前行中往前移动
h j k l : 对应左下上右
替换文本
shift ~ :快速切换大小写
r / n r :行内替换(先输入n,n要输入有效大小r才会生效,然后按r,再按要替换后的字母)
shift + r : 切换替换模式,覆盖式的任意替换
(2)底行模式
set nu / set nonu : 设置或关闭行号显示
%s/'被替换的内容'/'替换后的内容'/g:替换关键字,例如,%s/666/999/g (将666替换成999)
/"关键字" :文档中搜索关键字的功能
!指令:优先执行指令内容,例如运行等等,然后点击任意按键返回vim
vs filename : vs 加一个文件名指新建一个文件并且分屏操作
ctrl ww :分屏下光标切换到另一个文件中去
3.环境配置
关于vim的环境配置,在网上可以找到很多相关的配置,这个较为复杂,由于我目前是初学,所以不会自己进行配置,这里提供一个在centos 7.X版本下支持的一个vim环境一键配置的指令行,注意,只在centos7.X的版本可行
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
三、gcc和g++
1.关于gcc和g++的基本认识
gcc和g++的用处和用法都是一样的,两者都是编译器,gcc用来编译C语言代码,g++用来编译C++代码,其中使用的指令参数效果都是一样的,所以放在一起学习
这一块需要拓展一下关于编译的知识,编译一个c语言的文件要经过这几步:
预处理:头文件展开、条件编译、宏替换、取消注释等等
↓ 生成 .i 文件,此时文件内还是c语言的代码
编译:将 .i文件里的C语言转换成汇编语言
↓ 生成 .s文件,此时文件内是汇编语言
汇编:将汇编语言转换成二进制,翻译形成二进制目标文件
↓ 生成 .o文件,此时文件内是二进制语言
链接:将我们这边生成的.obj文件和库里的文件进行链接,形成可执行程序
对应的gcc的指令也能够将这几步单步进行操作,当然后续使用gcc或g++编译时,直接一步到位即可
2.gcc/g++的使用
直接编译.c文件生成可执行文件
gcc test.c -o myfile (将test.c文件编译生成可执行程序,并将文件命名为myfile)
注意:-o 参数后紧跟着自定义的文件名称
逐步编译的命令行参数
-E : 编译执行完预处理阶段后停下,生成 .i文件
-S:编译执行完编译阶段后停下,生成 .s文件
-c:编译执行完汇编阶段后停下,生成 .o文件
-o:对生成的可执行文件进行重命名,-o后紧跟着重命名的文件名称
3.关于链接的简单理解(拓展知识点)
我们在生成可执行程序的最后一步中,还需要去对一些库里的文件进行链接,而链接分为动态链接和静态链接
动态链接,就是指通过动态库的地址去进行相关文件的链接,最终生成可执行程序,这种好处就是消耗的内存空间较少,多方共享同一个库,但缺陷就是一旦库出现缺失,则使用动态库的文件将无法编译通过,会出现链接失败的错误
静态链接,则是将库中需要用到的部分相关文件拷贝一份到编译的文件中去执行,这种好处是相对库独立,不会因为库出现错误,而无法进行链接,但是拷贝会非常浪费空间
一般都是使用动态链接的,gcc和g++编译也是使用动态链接
四、make和makefile
1.对make和makefile的基本认识
make是一个指令,makefile是一个文件
makefile是自主创建在当前目录下的一个文件(m可以大写)
make是执行makefile文件的一个指令,里面的指令由用户根据一定的规则自己编写
make和makefile是一个比较难上手的工具,目前只是浅浅的接触,并且用它来对我们的C语言文件进行一键编译和删除这两个简单用法,其中涉及到的语言语法目前只需要做一个简单的理解,先用起来
2.makefile中的语法规则和使用
语法规则解释
目前我们只需要会在makefile内编写以上的代码即可
第一行展示的是所谓的依赖关系,即myfile文件需要依赖test.c文件生成
第二行则是依赖方法,即需要gcc去对test.c文件进行编译,在写依赖方法前需要空一个tab键
第四行的 “.PHONY: ” 表示总是允许被执行的,再其后面带上指令的名称则允许该指令多次执行,而一般像编译这种指令是不能被总是执行的,因为编译消耗大
第五行也是依赖关系,允许被依赖者为空
使用
在编写好makefile后,保存并退出,在当前目录下,直接输入指令make,则会默认执行最靠近上面的第一个指令,例如如上图举例的,则会指行“gcc -o myfile test.c”这一指令
要执行其他的指令,可以“make 指令”
例如,make clean ( 即执行 rm -f myfile )
五、gdb
1.关于gdb的基本认识
gdb是在Linux系统下的一个调试器,用于调试可执行程序(debug版本)
注意:gcc和g++默认编译好后是release版本的,因此需要再编译时加入参数 -g(携带调试信息)
与vs2019下的调试是一样的,只不过Linux下的调试没有可视化界面,都是采用命令行操作
2.操作相关的命令
list/l n(具体行号):显示文件第n行的源代码,一次显示10行,接着继续回车会在上次的位置往下列,每次列10行
list/l 函数名:列出某个函数的源代码,一次列十行
r / run:运行程序(F5)
n / next:单步逐过程运行,相当于vs下的F10
s / step:逐语句运行,相当于(F11)
b / break n(行号):在第n行设置断点
b / break 函数名:在某个函数开头设置断点
info break(b) :查看断点信息。
finish:执行完当前函数,返回上一层然后停下来等待命令
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序(从当前断点执行到下一个断点)
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值,相当于监视窗口
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行,执行完区间代码
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb
基本常用的目录就上面这些,已经基本足够完成当前调试的功能了
总结
本篇文章总结了在Linux下关于程序开发最基本的几个工具,以及基本的使用方法
yum用于下载
vim文本编辑器,也就是记事本
gcc/g++,用来编译c/c++代码
gdb用于程序的调试
make和makefile,自动化构建工具