文章目录
前言
大家好,欢迎来到TheBlob的博客。时隔大半个月再次发Linux的文章,我也一度认为自己写的这些文章对各位没啥用处,因为与其说是文章,倒不如说是我的电子笔记更为合适。经过内心挣扎,决定还是继续发这些基础,希望能够帮助一些刚想入手却无从下手的小伙伴。话不多说开始献丑啦!
补充前面没有写上的基础命令
man ascii 查看ASCII
ctrl + C 强行终止
shift + 粘贴 从windows复制进去
在vim里面shift + k 进去看相关函数的用法
file xx 查看文件
readelf -a xx 查看可执行文件的elf
vim编辑器
插入模式
i 从当前光标位置插入
I 从光标行头插入
a 从当前光标位置的后一个字符进行插入
A 从光标行尾插入
o 从光标的下一个行添加新行插入
O 从光标的上一行添加新行插入
底行模式
q 退出
w 保存
wq 保存并退出
q! 强制退出
wq! 强制保存并退出
x 保存并退出
w hello.c 将编辑内容存到hello.c上
vs hello.c 分屏编辑
set nonu 临时取消行号
%s/nihao/hello/g 将文件全文的nihao变成hello
s/nihao/hello/g 将光标所在行nihao变成hello
/hello 去文本搜索hello字符
set key=XXXXXX 设密码
r 文件名 复制文件
例: r test.c 将test.c的内容复制到当前文件
命令模式:
yy 复制一行
nyy 复制n行
dd 切剪/删除一行
ndd 剪切/删除n行
p 粘贴
u 撤销
gg 回到文件头部
gg=G 自动排版(自动缩进)
G 回到文件尾部
r 替换一个字符
R 进入到替换模式
光标定位到行尾 shift + 4
光标定位到行头 shift + 6
光标定位到最后一行 hift + g (前面加 数字 可以定位到对应 行号)
定位到开头 gg
光标快速移动 b w
光标上下左右 h(左) j(下) k(上) l(右)
删除光标所在位置后的字符 x
删除光标所在位置之前的字符 X
大小写切换 shift + ~
多开文件操作:
vs 文件名
切换文件 ctrl ww
不退出编译程序 !gcc 文件名
不退出查看函数 !man 函数名 或 鼠标点到函数 shift + k 进入
gcc编译器
预处理 编译 汇编 链接
*预处理:
*加载头文件
*宏展开
*删除注释
*处理了条件编译
gcc -E xx.c -o xx.i
*编译:
将代码编译成为汇编代码
gcc -S xx.i -o xx.s
或者: gcc -S xx.c -o xx.s
*汇编:
将汇编代码汇编成为可重定向文件
gcc -c xx.s -o xx.o
或者 gcc -c xx.c -o xx.o
---->不会检测函数是否存在,是需声明即可
*链接:
将各个可重定向文件链接成为可执行文件(目标文件)
gcc xx.o yy.o zz.o -o xx
或者: gcc xx.c yy.c zz.c -o xx
-----> 会去检测声明的对象或者函数是否存在
补充:
gcc -v -Wall -O0 -g
-E //预处理
-S //编译
-c //汇编
-o //生成
-v //详细显示
-Wall //详细警告
-On // n是个数字 优化程度
-O0 不优化
-O1
-O2
数字越大,优化程度越高,编译时间越长,执行时间越短
-g
gdb调试
安装gdb
sudo apt-get install gdb
*编译的时候,后面要加 -g
*为什么要用?
一步一步调试,查找段错误的位置
*如何使用:
gdb 可执行文件
例子:
gdb xx
l : list显示代码
r : run 运行
start : 启动
n : next 不进入函数,直接执行
s : step 进入到每一个函数里面
p 变量名字 : printf 变量
例子 :
p i 打印出i的值
b n : breakpoint
n: 行
例子:
b 15
i b : infomation breakpoint
查看所有的断点
d 编号 : delete num
例子:
d 3 //删除编号为3的断点
c : continue 继续 一个断
q : quit : 退出
Makefile
*> make是一个项目管理工具
*> 使用:
*》安装make
sudo apt-get install make
*》书写 Makefile 的文件
*》按照make的规则,在Makefile中书写 代码
*Makefile基本姿势:
目标 : 依赖
(tab键) 命令
*声明:
依赖可以没有
命令也可以没有
目标就是我们要生成的东西
如果不需要生成目标,称该目标为伪目标
*make的使用:
make 目标 :
查看该目标文件是否存在,如果存在是否为最新。
如果不存在,则去生成,如果不需要生成,则该目标为伪目标
如果目标是整个Makefile中的第一个目标, 可以省略不写
优势:时间戳管理方式:
如果依赖没有目标新,那么就不需要重复编译,否则谁最新就编译谁
依赖文件必须存在,如果依赖不存在,make想方设法去生成(将其作为目标去生成)
cc -c -o xx.o xx.c
*伪目标:
我们不需要生成该文件,如果在项目中有该文件,则该伪目标由于没有依赖,永远是最新,顾不再执行,解决方式
.PHONY : 伪目标
* 变量赋值:
* 简单赋值
:= 在当前行有效
* 递归赋值
= 递归查找某变量的最后一个值
* 条件赋值
?= 如果某变量已经定义,那么该语句无效
* 追加赋值
+= 对某个变量进行追加操作
* 如果想隐藏命令(只执行,不显示),在命令前面加上@
echo : 打印的命令
$^ ---> 代表所有的依赖
$@ ---> 代表目标
$< ---> 代表第一个依赖
make -C 文件夹(目录)
-----》执行该 目录 下面的 Makefile下的第一个目标
make -C 文件夹(目录) 目标
-----》执行该 目录 下面的 Makefile下的目标
友情提示:
对于刚开始学的时候可以先把通讯录这种C语言初学者的小项目进行管理来练手,初步的熟悉一下Makefile的相关格式。
总结
以上就是Linux中相关工具的基本操作了,掌握了这些能够满足处于新手阶段在Linux上编写、调试C语言代码、并且还能初步了解项目管理。