Linux基础2

vim

一个文本编辑程序,没有菜单,只有命令,且命令繁多

各种模式的操作

命令模式

移动光标:
h: ← 	左移
l: → 	右移
j: ↓ 	下移
k: ↑ 	上移
gg: 	光标移动文件开头
G: 		光标移动到文件末尾
0: 		光标移动到行首
$: 		光标移动到行尾
nG:	跳转到第n行

删除(剪切):
x: 			删除光标后一个字符,相当于 Del
X: 			删除光标前一个字符,相当于 Backspace
dw: 		删除光标开始位置的字,包含光标所在字符(光标必须移动到删除单词的首字符上)
d0: 		删除光标前本行所有内容,不包含光标所在字符
D(d$): 	删除光标后本行所有内容,包含光标所在字符
dd: 		删除光标所在行
n dd 		删除指定的行数

撤销:
u: 		一步一步撤销
Ctr-r: 	反撤销

复制粘贴:
yy: 	复制当前行,n yy 复制 n 行
p: 		在光标所在位置向下新开辟一行,粘贴
P: 		从光标所在行, 开始粘贴

查找:
/要查找的	从光标所在位置向后查找 (n: 下一个	N:上一个)
?要查找的	从光标所在位置向前查找

替换:
r: 替换当前字符

文本行移动:
>>: 文本行右移
<<: 文本行左移

文本输入模式:

i: 插入光标前一个字符
I: 插入行首
a: 插入光标后一个字符
A: 插入行未
o: 向下新开一行,插入行首
O: 向上新开一行,插入行首
s: 删除光标所在的字符
S:删除当前行

末行模式

行跳转
:123 -> 跳转到第123行
替换
替换一行:
:s/abc/123 -> 将当前行中的第一个abc替换为123
:s/abc/123/g -> 将当前行中的abc全部替换为123

替换全部:
:%s/abc/123 -> 将所有行中的第一个abc替换为123
:%s/abc/123/g -> 将所有行中的abc全部替换为123

替换指定行:
:10,30s/abc/123/g -> 将10-30行中的abc全部替换为123
执行shell命令
末行模式里输入!,后面跟命令

模式之间的切换

在这里插入图片描述

在末行模式下分屏

sp 		将屏幕分为<水平>两部分
vsp 	将屏幕分为<垂直>两部分
sp(vsp) + 文件名 		水平或垂直拆分窗口显示两个不同的文件
wqall 	保存并退出所有屏幕
wq 		保存并退出光标所在的屏幕
ctrl+ww 切换两个屏幕

gcc(GNU编译器套件)

gcc +参数:
查看版本号		-v
产生目标文件		-o		
指定头文件目录	-l +目录
编译时定义宏		-D
编译优化				-On	(0-3)
					-O0 - 没有优化
					-O1 - 缺省值
					-O3 - 优化级别最高
提示更多警告信息	-Wall
只编译子程序		-c
生成预处理文件	-E
包含调试信息		-g (gdb调试的时候必须加此参数)

静态库

指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件.

1.命名格式

lib+静态库名+.a

2.使用场景

在核心程序上使用,保证速度,可忽视空间,现在很少使用。

3.优点

1.寻址方便,速度快
2.库被打包到可执行程序中,直接发布可执行程序即可使用

4.缺点

1.静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
2.如果静态函数库改变了,那么你的程序必须重新编译。

5.静态库的制作

(1) gcc +*.c 文件 -c 得到 *.o 文件

(2) 得到静态库 lib----.a

ar rcs lib----.a a.o b.o c.o
通过ar打包工具打包  .o  文件
参数:
		r	将文件插入静态库中
		c	创建静态库,不管库是否存在
		s	写入一个目标文件索引到库中,或者更新一个存在的目标文件索引
查看库中的符号(函数、全局变量等): nm lib----.a

6.使用静态库

1.gcc +源文件 +-L静态库路径 +-l静态库名 +-I头文件目录 +-o可执行文件名
2.	gcc + 源文件 + -I头文件 + lib----.a

注意:生成的静态库需要跟对应的头文件同时发布,头文件中存放的是函数接口(函数声明)

动态库(共享库)

1.描述

(1)机制

共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。

(2)优点

1.节省内存(共享)
2.易于更新(动态链接)
		停止运行程序
		使用新库覆盖旧库(保证新旧库名称一致,接口一致) “接口”
		重新启动程序。

(3)缺点

延时绑定,速度略慢

(4)使用场合

对速度要求不是很强烈的地方都应使用动态库

(5)注意事项

动态库是否加载到内存,取决于程序是否运行。

2.命名格式

lib+动态库名+.so

3.制作

(1)生成“与位置无关”的目标文件

gcc -fPIC *.c文件 -c
参数:
	-fPIC 表示生成与位置无关代码,执行完毕后生成一系列的 .o 文件

(2)制作动态库

gcc -shared -o lib----.so a.o b.o c.o
参数:
	-shared 制作动态库
	-o:重命名生成的新文件

(3)使用动态库

gcc main.c -L./ -l---- -I./ -o app
参数:
	-L  指定库所在的路径
	-I 	头文件目录位置
	app	重新生成的文件名

(4)执行生成的可执行文件

在这里插入图片描述

gdb调试

1.使用场景

1.程序编译无误,但是有逻辑错误
2.使用文字终端(shell),实现一个单步调试的功能
3.生成可执行文件之前必须加参数 -g

2.启动gdb调试

gdb + 可执行文件

3.gdb相关命令

l 				列出文件的代码清单
l + 行号		代码从第n行开始显示

b(break)		设置断点
b + 行号		在第n行设置断点
b + 行号+ 条件	在第n行设置断点,只有满足条件时时生效

info b			查看断点信息

r				运行程序
start 			单步执行,运行程序,停在第一行执行语句

disable/enable + 断点号 设置断点是否有效
d + 断点号		删除指定断点号对应的断点

p+ 变量名		打印变量值
display+变量名	追踪变量
undisplay+变量名编号	取消跟踪

n(next)		下一行(不会进入到函数体内部)
s(step)		下一步(会进入到函数体内部)

ptyte + 变量名 	查看变量的类型
finish 			结束当前函数,返回到函数调用点
set				设置变量的值 set var n=100
q(quit)		退出gdb调试

makefile

1.文件的命名规则

Makefile和makefile

2.用途

1.项目代码编译管理
2.节省编译项目的时间
3.一次编写终身受益

3.基本规则

格式:

目标:依赖
(tab缩进)命令

目标 --> 要生成的目标文件
依赖 --> 生成目标文件需要的一些文件
命令 --> 借助依赖文件生成目标文件的手段
tab --> 缩进,有且只有一个

最简单的makefile:

app:1.c 2.c 3.c 4.c main.c
    gcc 1.c 2.c 3.c 4.c main.c -I../include -o app

4.工作原理

1.若想生成目标,检查规则中的依赖条件是否存在,如果不存在,寻找是否有规则用来生成该依赖文件
2.检查规则中的目标是否需要更新,必须检查它的所有依赖,依赖中有任意一个被更新,则目标必须更新。(依赖文件比目标文件时间晚,则需要更新)

5.执行

make	通过makefile生成目标文件
	直接 make (使用makefile文件)
	make -f -- (指定一个名字不为makefile的文件)

make clean 	清除编译生成的中间.o文件和最终目标文件

6.变量

(1)普通变量

1.变量定义及赋值:abc = a.o b.o c.o
2.变量取值:abcd = $(abc)
3.由 Makefile 维护的一些变量
常用的变量名:
	CC:		表示c编译器版本
	CFLAGS:	表示编译时参数
	CPPFLAGS:	表示预处理参数
	CXX:		表示C++编译器版本
	CXXFLAGS:	表示c++编译时参数
	LDFLAGS:	表示库参数库选项
	INCLUDE:	表示头文件目录
	TARGET:	表示目标名
	RM:		删除选项

(2)自动变量

$@ --> 规则中的目标
$< --> 规则中的第一个依赖条件
$^ --> 规则中的所有依赖条件

(3)特殊字符

$(变量):对变量取值
@:只显示命令结果,忽略命令本身
-:如果当前命令出错,忽略错误,继续执行
%:通配符,通配符是以遍历的方式实现的

7.makefile内置函数

注意:makefile中所有的函数必须都有返回值

1.wildcard:按照指定格式获取当前目录下的所有文件名
例:SOURCEFILE=$(wildcard *.c):获取.c后缀的所有文件并返回赋值SOURCEFILE

patsubst:根据指定的格式进行替换(字符串替换)
例:DEFFILE=$(patsubst %.c,%.o,$(SOURCEFILE))

代码

app: main.o a.o b.o c.o d.o
           gcc -o app main.o a.o b.o c.o d.o
   main.o : main.c
           gcc -c main.c
   a.o : a.c
           gcc -c a.c
   b.o : b.c
           gcc -c b.c
   c.o : c.c
           gcc -c c.c
   d.o : d.c
           gcc -c d.c

   clean :
           rm app main.o a.o b.o c.o d.o

文件操作

stat函数:获取文件属性

返回值:成功:0 失败:-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值