总述
- yum:软件包管理工具,完成第三方工具软件的安装卸载功能
- vim:编辑器,路奴性写代码的工具
- g++/gcc:编译器,将高级语言进行编译成及其指令
- gdb:调试器,调试程序的运行过程
- make:就是 “makefile“ 项目的自动化构建工具
- git:项目的版本管理工具
1. yum:软件包管理工具
1.1 软件包是什么?
- 在linux下安装软件,通常办法是下载程序源代码,并进行编译,最后得到可执行程序。这样就比较麻烦了,于是有人把一些常用的软件提前编译好,做成软件包(就像是Windows上的安装程序)放在一个服务器上,通过包管理器很方便的获取到这个编译好的软件包,可以直接进行安装。
- 软件包和软件包管理器就和“app"和”应用商店“一样。
- yum(Yellow dog Updater,Modified)是linux下非常常用的一种包管理器。
1.2 软件包的操作
1.2.1 查看
- 命令:yum list
- 功能:查看当前一共有哪些软件包
- 注意:由于包的数目可能非常多,我们可以使用 yum search vim 命令只筛选出我们需要要的(这里用vim举例)
1.2.2 安装
- 命令:yum install filename
- 功能:安装软件
- 注意:要在具有 root 权限的情况下执行命令。如:sudo yum install lrzsz
1.2.3 卸载
- 命令:yum remove filename
- 功能:卸载软件
- 注意:要在具有 root 权限的情况下执行命令。如:sudo yum remove lrzsz
2. vim:linux编辑器
2.1 vim基本概念
2.1.1 什么是vim?
vim 是编辑器,用于编辑文本,编写代码的工具。因为 vim 的操作是在命令行中,不支持鼠标,因此光标的移动,文本内容的操作都需要命令来完成。因为 vim 是编辑器,所有有HIA具备插入数据的功能,因此 vim 为了实现命令操作和数据插入操作互不干扰,设计了多种操作模式。
2.2.2 vim 操作模式
- 共有12种操作模式,常见的有三种:
- 普通模式(Normal mode):
执行对文本内容进行操作的指令。控制屏幕光标的移动,字符,字或行的删除,模式切换。 - 插入模式(Insert mode):
文本数据的写入。模式切换 - 底行模式(last line mode):
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 - 模式切换
- 普通模式—>插入模式:i a o I A O
- 普通模式—>底行模式:英文冒号
- 其他模式—>普通模式:esc
2.2 vim基本操作
2.2.1 底行模式下常见操作
保存或者退出编辑
- :w 保存
- :q 退出
- :wq 保存并退出
- :q! 强制退出不保存
- /string 匹配字符串
- ?string 匹配字符串
2.2.2 普通模式下常见操作
- 模式切换
- [ i ]:进入插入模式后,从光标当前位置开始输入文字
- [ a ]:进入插入模式后,从目前光标所在位置的下一个位置开始输入文字
- [ o ]:进入插入模式后,从目前光标位置的下一行,从行首开始输入文字
- [ ESC ]:从插入模式切换为普通模式
- 移动光标
- [ h ] [ j ] [ k ] [ l ] :上下左右
- [ Ctrl ] + [ f ]:屏幕往上移动一页
- [ Ctrl ] + [ f ]:屏幕往下移动一页
- [ gg ]:光标移动到文本的开始
- [ G ]:光标移动到文本的最后
- 删除
- [ dd ]:删除光标所在行
- [ ndd ]:从光标所在行开始删除 n 行
- [ x ]:每按一次,删除光标所在位置的一个字符
- [ dw ]:删除光标所在单词
- 复制粘贴
- [ yy ]:复制光标所在行到缓存区
- [ nyy ]:复制从光标位置开始的 n 行文字
- [ p ]:将缓存区内的字符粘贴到光标所在位置。注意:所有与“ y "有关的复制命令都必须和“ p ”命令配合才能完成复制粘贴。
- 撤销和撤销还原
- [ u ]:撤销上一次操作
- [ Ctrl ] + [ r ]:撤销的还原
- 全文对齐
- 替换
1-12行的指定字符串替换 :1,12s/printf/scanf/g
2.3 注意
- 刚使用特别容易遇到的错误。在vim中编辑的时候不小心没保存就退出 了(比如我就是不小心按了Ctrl+z),然后你在之后每次再打开这个文件的时候会一直提示如下错误信息:
- 解决办法:
(1)记下你的 .swp 文件的存储位置 (2)输入 r —>在正常保存后退出 :wq (3)去你记住的 .swp 文件位置删除这个文件。问题就解决了
3. gcc/g++编译器
3.1 功能
将我们所写的高级语言代码编译解释成机器指令
3.2 编译过程
- 预处理:展开所有代码(引入头文件,宏替换,删除注释…)
- 编译:语法语义检测,没有错误则将代码解释成为汇编指令
- 汇编:架构汇编指令解释成二进制机器指令
- 链接:将所需的二进制机器指令(其他的.o以及库文件)打包生成可执行文件
3.3 gcc 常见选项:
- -E 只进行到预处理完成
- -S 只进行到编译完成
- -c 只进行到汇编完成
- -o 指定要生成的目标文件对象名称
- -g 告诉编译器不要生成release版本在 -c 时就要加上-g
3.4 选项举例
- gcc -E main.c -o main.i
- gcc -S main.i -o main.s
- gcc -c main.s -o main.o
- (gcc -g -c main.s -o main.o)
- gcc main.o -o main
- 此时 main 就是一个可执行文件了,可以输入 ./main 指令执行main文件。(其实就是告诉shell文件 main 文件在哪里 ,所以这里意思是main在当前目录下)。
3.5 其他概念
- 链接:将所有的机器指令(多个.o文件以及使用的库代码)打包生成可执行程序
- .o:我们自己的 .c 文件生成的机器指令文件
- 库文件:大佬们针对典型的常用函数,提前写好的打包好的机器指令文件
- 链接库文件:就是将库中使用到的函数的实现拿过来用。分为动态链接(在我们可执行程序中记录库中函数符号信息表,并没有把具体实现的指令写入可执行程序,而是在运行的时候去加载这个库。优缺点:生成的程序小,在内存中共享库,但是运行时依赖库的存在)和静态链接(将库中使用到的代码写入到可执行程序中。优缺点:生成的程序较大,运行时不需要依赖库,但是会存在运行时内存中存在重复冗余代码)
- gcc默认链接方式:动态链接。
4 gdb:调试器
4.1 什么是调试器
- 用来调试程序的运行过程。编译器只能发现语法错误,无法发现程序的运行错误(奔溃、逻辑异常)。
- 程序调试的前提:这个程序是一个debug版本的程序
- debug程序:不进行代码优化,并且会加入调试信息
- release程序:会进行代码优化,提高程序运行效率,无法调试
- gcc编译器默认生成release版本程序——无法进行调试
- gcc -g 选项,生成debug调试程序: gcc -g main.c -o main
4.2 常见调试指令
4.2.1 开始调试
-
run:直接运行 -
start:逐步调试
4.2.2 流程控制
-
list 查看文件附近代码,可以查看指定文件指定行代码的附近代码,例如:list child.c:5 -
n/next 下一步——逐过程(遇到函数直接运行完毕) -
s/step 下一行——逐语句(遇到函数,进入函数,继续逐语句进行调试) -
until 运行指定文件指定行,例如 until main.c:18 -
断点相关 -
打断点 :b/break 例如给指定文件指定行打断点: b/break main.c:8。 给指定函数打断点,例如:b/break test_func。 -
查看断点信息:info break / i b -
删除断点:d/delete break_id -
watch:给变量打一个监控断点,变量发生变化的时候触发断点 -
打印 -
print:查看/设置变量数据 -
p/print 变量:打印变量的值 -
c/continue:从调试位置开始不再逐步调试而是向下运行 -
backtrace:查看函数调用栈,快速找到程序奔溃位置。栈顶函数就是导致程序奔溃的函数 -
程序是运行参数是在gdb加载成之后,run/start 的时候给与 gdb ./main run -l -a…
5. make/makefile:项目自动化构建工具
- Makefile是一个文本文件,在其中编写项目的构建规则。
- make是一个Makefile的解释程序,在当前目录下找到名为Makefile的文件进行逐行解释。
5.1 makefile是什么
-
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile文件定义了其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。 -
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
5.2 make是什么
- make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
- make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
5.3 makefile 编写规则
5.4 make解释执行规则:
- make生成第一个目标对象后就会退出。
- 为了生成目标对象,递归先查找依赖对象的生成规则,生成依赖对象之后在生成目标对象
- .PHONY:总是要生成的对象(与外部文件脱离的文件)
5.5 makefile文件
6. git :项目的版本管理工具
6.1 功能
- 将项目的每个节点版本保存起来,以便于随时能够回滚还原。
- 协同开发
6.2 操作
- 克隆远程仓库:git clone https://gitte.com/qigezi/class_94.git
- 添加修改记录:git add --all ./
- 提交本地仓库:git commi -m “备注信息”(时间 XXX 对XXX 文件 做了 XXX 修改)
- 同步远程仓库:git push origin master
6.3 举例
- 在gitee 创建一个仓库
复制的仓库的路径 https 的 - 克隆远程仓库
在linux下输入下面指令(把在仓库复制的指令粘贴进来) : git clone https://gitee.com/yxydcode/linux_git_use.git - 添加修改记录:git add --all ./
输入指令:git add --all ./ - 提交本地仓库:git commi -m “备注信息”
输入指令:git commit -m “2021.10.17 yxy 添加了 main.c 文件” - 同步远程仓库:git push origin master
|