Linux开发工具
我们在Linux下
- 编写代码:vim
- 编译代码:gcc/g++
- 调试代码:gdb
- 运行或者自动化构建程序:make/makefile
Linux编辑器 vim
编辑器 – 只负责写代码
打开vim时是命令模式(默认打开的模式),如果想从其他模式回到命令模式按ESC
在命令模式下输入
i
:进入编辑/插入模式:
:进入底行模式shift + r
:进入替换模式
在底行模式下输入
q
退出,q!
强制退出w
保存,w!
强制保存wq
保存退出 ,wq!
强制保存退出ESC
回到命令模式
命令模式的常见命令
命令 | 作用 |
---|---|
yy | 将当前光标所在行复制 |
p | 将复制行进行粘贴 |
dd | 将当前光标所在行,剪切(删除) |
nyy,np,ndd | n是具体的数字,nyy指一次复制n行,np将复制的内容粘贴n次,剪切(删除)n行 |
u | 撤销命令 |
ctrl + r | 撤销u操作 |
shift + g | 光标定位到文件结尾 |
n + shift + g | 光标定位到第n行 |
gg | 光标定位到文件开头 |
shift + 4($ ) | 将光标定位到当前行的最结尾 |
shift + 6(^ ) | 将光标定位到当前行的最开始 |
w | 以单词为单位进行光标的后移 |
b | 以单词为单位进行光标的前移 |
h,j,k,l | 左,下,上,右 |
shift + ~ | 大小写切换 |
r | 替换光标所在的字符,支持nr |
x or X | 删除光标所在的字符,包括之前或者之后 |
底行模式常见命令
命令 | 作用 |
---|---|
set nu/nonu | 打开行号/取消行号 |
vs 文件名 | 分屏操作 |
w | 写入 |
q | 退出 |
!cmd: | 不退出vim执行对应的命令(执行命令行,编译,运行,查看man) |
在vim的底行模式中,
- 😒 表示substitute,也就是替换, 格式为以下:
- :[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
- range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行
- {pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
- {string} 表示要将匹配到的字符串替换为的新的string字符串
- [flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
- [count] 表示在一行中匹配多少次,很少会用到…
- 如果想要将文件中所有 nihao 替换为 hello 则命令为: %s/nihao/hello/g
- :p 用于打印指定区间的行
- :[range]p[rint] [flags]
- :i 在指定行上方添加文本
- :{range}i[nsert] [!]
Linux编译器 gcc/g++
程序的翻译过程
文本的C – 计算机二进制
- 预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译 …).i
- 编译(C -> 汇编).s
- 汇编(汇编 -> 可重定向二进制目标文件).o
- 链接(链接 -> 多个 .0,.obj -> 合并形成一个可执行 .exe,.out)
[hmy@VM-8-15-centos ~]$ gcc mytest.c -o hmy //-o指定生成可执行文件的名称,hmy是可执行文件的名称
gcc/g++
选项 | 作用 |
---|---|
-o | 指定生成可执行文件的名称 |
-E | 从现在开始进行程序的翻译,如果预处理完成,就停下来 |
-S | 从现在开始进行程序的编译,如果编译完成,就停下来 |
-c | 从现在开始进行程序的翻译,如果汇编完成,就停下来 |
动静态库
一般链接的过程,是有两种方式的:
-
动态链接,需要动态库 Linux:
.so
Windows:.dll
将库中我要的方法的地址,填入我的可执行程序中,建立关联!!
-
静态链接,需要静态库 Linux:
.a
Windows:.lib
将库中方法的实现,真的拷贝到我们的可执行程序中!!
gcc/g++默认形成的可执行程序是动态链接的
-static表明使用静态链接的方法形成可执行程序
[hmy@VM-8-15-centos ~]$ gcc mytest.c -o hmy -static
Linux项目自动化构建工具make/makefile
make是一个命令
makefile是一个文件
他们的作用是自动化构建项目
编写makefile
- 依赖关系
- 依赖方法
mytest:test.c //依赖关系gcc test.c -o mytest //依赖方法.PHONY:clean //伪目标
clean: //依赖关系rm -f mytest //依赖方法
make会自顶向下执行第一个依赖关系,当mytest没有写在第一个时,可以显式执行 make mytest
.PHONY
伪目标:总是会根据依赖关系,执行依赖方法。习惯给clean设置
Linux软件包管理器 yum
YUM 是 “Yellowdog Updater, Modified” 的缩写,它是一个包管理工具,用于简化在系统上安装、更新和删除软件包的过程。
YUM可以理解为Linux上的软件应用市场
yum的作用:1.搜索、下载、安装 2.解决依赖关系
yum的操作
yum源:就是一个配置文件 [hmy@VM-8-15-centos lesson7]$ ls /etc/yum.repos.d 里面配置了你的下载网址
yum三板斧:
- yum list(查找所有软件) yum list | grep py(查找所有软件名包含py的软件)
- yum install
- yum remove
扩展:
- yum makecache 命令:该命令用于将服务器上的软件包信息缓存到本地系统。
- yum search 命令:该命令用于在所有可用的软件包中搜索包含指定关键字的软件包。
- yum clean all 命令:该命令用于清除缓存中的软件包头文件和旧的软件包。
- yum upgrade 命令:
- yum -y update:升级所有包同时,也升级软件和系统内核;
- yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。 所以D选项不完整严谨
版本控制器 git
git三板斧:
预备:
- git clone 你的git仓库链接 例如:git clone https://gitee.com/h-miyang/for_-linux.git
- git add 你的文件 #添加我们的代码到本地仓库 例如:git add . 或 git add test.c
- git commit -m “这里必须写提交日志!” #提交代码到本地仓库中
- git push #提交我们的代码到远端仓库
其他情况:
- 有时候无法提交,会出现提交冲突 无脑 git pull
- .gitignore #不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore
- git rm 删除文件
调试器 gdb
(no debugging symbols found). gcc && g++默认形成的可执行程序是release的!!故无法直接被调试!
gcc mytest.c -o mytest-debug -g # -g表示该程序是debug方式发布的
gdb操作:
gdb会记录最近一条命令,如果命令无变化,就直接回车2
命令 | 作用 |
---|---|
quit | 退出gdb |
r(run) | 开始调试,如果没有设置断点,就直接结束运行! |
b(breakpoint)+ 行号 | 给特定的行号打断点 |
info(information) b | 查看断点 |
d(delete)+ 断点编号 | 删除断点 |
n(next) | 逐过程 |
p(print)+ 变量名 | 打印变量内容 |
s(step) | 逐语句 |
bt | 查看当前调用堆栈 |
finish | 将当前函数跑完就停下来 |
display + 变量名 | 设置长显示 |
undisplay + 变量名编号 | 取消长显示 |
until + 行号 | 跳转到指定行 |
c(continue) | 运行至下一个断点处停下来 |
disable/enable + 断点编号 | 使能(打开和关闭)断点 |