目录
vim:文本编辑器
gcc:编译器
makefile:不普通的普通文件
gdb:调试器
yum:软件包管理
vim是随Linux和UNIX系统分发的vi编辑器的gg改进版本,具有很高的可配置性和效率,包含分屏编辑、颜色格式和突出显示编辑文本等功能。vim 有12种模式,每种模式有不同的功能,做不同的操作。
普通模式、插入模式、底行模式、视图模式、替换模式等..
命令: vim filename
模式转换图及转换方法↓↓↓
从普通模式切换到插入模式的方法:
i: 从光标所在位置开始插入
a: 从光标所在位置的下一个字符处开始插入
I: 将光标移动到行首,然后进入插入模式
A: 将光标移动到行尾,然后进入插入模式
o: 在光标所在行的下方,新建一行,进入插入模式
O: 在光标所在行的上方,新建一行,进入插入模式
s: 删除光标所在字符,然后进入插入模式
S : 删除所在行,然后进入插入模式
从普通模式切换到底行模式的方法:
:w 保存
:q 退出
:q! 强制退出(不保存本次修改)
:wq 保存并退出
:!pwd 临时执行命令,按回车返回vim
:set nu 临时设置行号
从普通模式切换到视图模式的方法:
v 进入行视图模式,可以进行选择操作 (visual) -->按 “=” 可格式化对齐
ctrl+v 进入列视图模式,可以进行选择操作(visual block)
V 进入行视图模式,可以进行选择操作(visual line) 此时 “行” 是最小的操作单位~
从插入模式/底行模式/视图模式返回普通模式:
ESC
普通模式下的常用操作:
h 向左移动光标
j 向下移动光标
k 向上移动光标
l 向右移动光标
w 光标向右移动一个单词
b 光标向左移动一个单词
gg 光标移动到文档首行
G 光标移动到文档末尾行
gg=G 全文缩进对齐
yy 复制光标所在行
nyy 从光标所在行开始向下复制n行
p 向光标所在行下方粘贴新行
P 向光标所在行上方粘贴新行
dd 删除光标所在行(vim种删除其实是剪切)
ndd 从光标所在行开始向下删除n行
x 删除光标所在字符
dw 删除光标位置开始的一个单词
u 撤销操作
ctrl+r 返回撤销操作
r 替换光标所在字符--> r + 要修改成的字符
R 进入替换模式,对内容一直替换
linux下程序的执行就是告诉操作系统程序文件在哪个路径下。
gcc是一个编译工具,将我们所写的C语言程序编程成为机器可识别的语言程序。
windows下和Linux下的二进制接口不同,程序不能互相运行,因为ABI不同。
ABI应用程序二进制接口是一个所有处理二进制的程序(包括编译器、汇编器、链接器和语言运行库支持)都会使用的接口
gcc常用选项
-o:指定要生成的文件的名称
-g:开启gdb调试选项,目的是在可执行程序中加入调试符号信息
程序的编译过程:
1. 预处理(gcc -E:只预处理)
去掉注释,展开所有代码
2. 编译(gcc -S:只编译)
先纠错,没有错误则编译成为汇编代码
3. 汇编(gcc -c:只汇编)
将汇编代码生成机器可识别代码
**汇编只是将我们写的代码编译完毕,但是不能运行,因为代码不完全,我们调用的一些库函数,并不知道如何实现,需要经过第四步才能生成可执行程序。
4. 链接
将库中的函数链接过来和我们的代码最终合并生成可执行程序
链接过程有两种:
动态链接:链接的是动态库
静态链接:链接的是静态库(gcc -static 静态链接)
动态链接生成的可执行程序小,静态链接大,但是动态链接生成的程序运行时需要动态库的存在,静态库不需要(静态链接就是将库中的函数全部拿过来生成可执行程序了,所以大)
程序的链接方式默认是动态链接。
在makefile 中定义很多程序编译规则,在终端命令行下敲击一个make命令,这时make程序,会跑到当前目录下找寻makefile文件,按照makefile中已经规划好的编译顺序和规则,完成整个项目的编译。
命令->vim makefile
->make
make只在当前目录下找名字叫makefile/Makefile的文件。
如何编写makefile文件:
目标对象名称:依赖对象名称
【Tab键】 为了生成对象所执行的命令
‘main’is up date说的是,目标对象已经是最新的,不需要重新生成;
make这个程序会去判断依赖文件的最后修改时间,和目标对象文件的最后修改时间,如果目标对象的时间戳大于依赖文件的时间戳,那么就证明依赖文件在上次编译后没改过,不需要重新编译。
make的执行规则:
1、make可以检测目标对象与依赖对象的时间属性,判断程序是否需要重新编译。
2、make永远只找第一个目标对象生成,生成第一个对象就退出了。
3、make可以指定要生成的对象,例如:make clean
伪对象:不管是不是最新的,都要重新生成( .PHONY来声明)
例 .PHONY:main clean
预定义变量:makefile 中已经提前定义好的变量
$@ 编写规则中要生成的目标对象
$^ 编写规则中所有的依赖对象
$< 编写规则中第一个依赖对象
变量的使用要加$符号,否则认为是字符串赋值
上方的举例可写为:
wildcard
用于获取文件名 ,获取当前目录下文件名以.c结尾的文件名赋值给src
扩展: = := ?= += 这几种赋值方式有什么不同?
1) "=" 递归展开赋值,右侧的变量还允许在后面定义。左侧变量的值,由右侧变量最后的值决定。
2) ":=" 将右侧中包含的变量直接展开给左侧的变量赋值。
3) "?=" 只有当左侧变量还没有被定义的时候,才会将右侧的值赋给左侧;
如果左侧变量已经被定义过,即使是空值,?=不会给左侧赋值。
4) "+=" 给左侧变量追加值。
gdb调试一个程序需要这个程序在编译时加上 -g 选项开启调试,为可执行程序加入些调试符号信息。
命令 gcc -g filename
gdb如何加载程序
gdb filename(例 ./main)
gdb进入之后 file ./main
gdb常用命令
run (r) 开始运行程序,程序直接跑起来
r -l -s -a 程序的参数在这里加载
start 开始逐步调试程序
list(l) 查看当前行附近代码
next(n) 下一步(不跟踪进入函数)
s 下一步(跟踪进入函数)
until n 直接运行到第n行
b 添加断点
b main.c:n 给main.c第n行添加断点
b n 给当前文件第n行添加断点
b func 给函数添加断点
i 查看详细信息
i b 查看当前断点信息
d 默认删除所有断点
d n 删除 i d 为n的断点
p 打印变量内容
p x(变量名)
watch 变量监控,变量内容修改时会停下(c为下一步)
watch x(变量名)
bt 查看函数调用栈信息
quit(q) 退出
yum是红帽子系列linux操作系统进行软件包管理的工具
软件的安装/移除/查看都是通过yum工具完成的。
yum help 将显示用法信息
查看
yum list 显示已安装的和可用的软件包
yum list | grep 想要安装的包名字
yum search KEYWORD 根据仅在名称摘要字段中找到的关键词列出软件包
yum info PACKAGENAME 提供与安装包相关的详细信息,包括安装所需的磁盘空间
安装
yum install PACKAGENAME 获取并安装软件包,包括所有依赖项
yum update PACKAGENAME 获取并安装更新版本的软件包,包括所有依赖项
移除
yum remove 安装包名字
yum remove 将删除列出的软件包和需要将要删除的软件包的任何软件包,可能导致意外删除软件包,因此请仔细检查要删除的软件包列表。
yum history 查看安装和删除事务的摘要