🧑?💻Linux环境基础开发工具使用🧑?💻
一、Linux编辑器——vim
1.1 vim的基本概念
🚨vim只负责写代码
vim是一款多模式编辑器分为:命令模式(默认打开的模式)、插入模式和底行模式…等等,最基本使用的是这三种👇
各模式的功能区分如下:
- 命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段。
- 插入模式: 只有在插入模式下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
- 底行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。
注意:
vim是需要配置的,配置原理:在你都家目录下有一个隐藏文件.vimrc (没有的话自己创建一个),当你启动vim时,你的vim程序会读取你自己的.vimrc 文件进行配置。
1.2 vim的基本操作
- 进入vim
在系统提示符号输入vim 文件名称 ,进入vim后处于命令模式 - 命令模式——>插入模式,输入a、i、o都可
- 插入模式——>命令模式,输入ESC
- 正常模式——>底行模式,输入shift + :
- 退出vim及保存文件,在底行模式下输入
wq ,w表示保存当前文件,q表示退出。
1.3 vim命令模式命令集
操作光标:
- vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母h、j、k、l,分别控制光标左、下、上、右移一格。
命令 | 功能 |
---|
shift + ^(6) | 光标定位到当前行的最开始 | shift + $(4) | 光标定位到当前行的行尾 | gg | 光标定位到文件的最开始的起始行 | shift+g | 光标定位到文件的结尾 | n+ shift+g | 光标定位到文件指定行 | w/b | 以单词为单位进行光标的前后移动 | nl | 光标移到该行的第n个位置,如:5l,6l |
操作文本:
命令 | 功能 |
---|
yy | 复制光标所在行到缓冲区 | nyy | 复制当前行以及之后的n行,包含当前行 | p | 将缓冲区内的字符粘贴到光标所在位置 | np | 一次重复粘贴n行 | dd | 删除当前光标所在行 | ndd | 删除包含当前光标的n行 | dd+p | 剪切 | u | 撤销操作 | ctrl+r | 撤销u的操作 | shift+~ | 快速大小写替换 | r | 替换光标所在的字符,支持nr | shift+r | 进入替换模式,直接进行多个内容的替换 | x | 从左向右删除光标后的字符,支持nx | X | 从右向左删除光标后的字符,支持nx |
1.4 vim底行模式命令集
命令 | 功能 |
---|
set nu / nonu | 调出行号/取消行号 | vs 文件 | 多屏操作 | w | 写入,保存 | q | 退出 | w! | 强制保存 | q ! | 强制退出 | ! cmd | 不退出vim执行命令 |
二、Linux编译器——gcc/g++使用
gcc是一个专门用来编译链接C语言的编译器 g++是一个用来编译链接C++/C语言的编译器 实例: gcc mytest.c –o mytest
程序翻译的过程就是文本的C转换为计算机的二进制,需要四个过程:
- 预处理
- 编译
- 汇编
- 链接
2.1 预处理
预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以 # 号开头的代码行。 实例: gcc –E mytest.c –o mytest.i 选项“ -E ”,从现在开始进行程序的翻译,如果预处理完成,就停下来。 选项“ -o ”是指目标文件, “ . i ”文件为预处理之后的文件。
2.2 编译
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。 实例: gcc –S mytest.i –o mytest.s 选项“ -S ” ,从现在开始进行程序的翻译,如果编译完成,就停下来。
2.3 汇编
汇编阶段是把编译阶段生成的“ .s ”文件转成“ .o ” 可重定向二进制目标文件。 实例: gcc –c mytest.s –o mytest.o 选项“ -c ” 从现在开始进行程序的翻译,如果汇编完成,就停下来。
🎈总结:
2.4 链接
在成功编译之后,就进入了链接阶段。 实例: gcc mytest.o –o mytest 这一步不需要任何选项。
?C程序是脱离不开C库文件的
- Linux下 user/include/stdo.h提供C语言的函数声明。
- Linux下 lib64/libc-2.17.so.6提供C语言的函数实现。
- 我们写的程序程序包含头文件,链接库文件,形成可执行文件。
ldd 文件名 / file 文件名 可以查看文件所依赖的库文件。- Linux: .so(动态库) .a(静态库)
- window:.dll(动态库) .lib(静态库)
一般链接的过程,是有两种方式的:
-
动态链接——需要动态库,将库中我要的方法的地址,填入我的可执行程序中,建立关联! -
静态链接——需要静态库 ,将库中方法的实现,真的拷贝到我们的可执行程序中!
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,但是占用资源。其后缀名一般为“.a”。
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省资源。动态库一般后缀名为“.so”,
注意:
- gcc/g++在编译时默认使用动态库。
- 如果我们想要静态链接,需要
gcc test.c - o mytest-s -static ,-static 此选项对生成的文件采用静态链接。 - 如果Linux环境中没有静态库,需要
sudo yum install -y glibc-static 安装C静态库sudo yum install -y libstdc++-static 安装C++静态库。
三、Linux项目自动化构建工具——make/Makefile
3.1 make/Makefile是什么?
?make是一个命令,Makefile是一个文件
3.2 make/Makefile的作用:
-
makefile带来的好处就是自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 -
make是一个命令工具,是一个解释makefile中指令的命令工具。 -
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
3.3 为什么要有make/Makefile?
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
3.4 Makefile怎么去写?
举例:👇
Makefile
1 myproc:myproc.c
2 gcc -o myproc myproc.c
3 .PHONY:clean
4 clean:
5 rm -f myproc
简写: $@代表myproc,&^ 代表:右侧的所有文件,后面可以跟很多个文件
当我们在Linux命令行下输入make(make自定向下扫描,只会形成第一个目标文件)就会执行gcc -o myproc myproc.c 这条命令,生成myproc可执行文件,再输入make clean就会清除刚才生成的myproc文件。
3.5 Makefile中.PHONY的作用:
在Makefile中,.PHONY后面的目标表示的也是一个伪造的目标, 而不是真实存在的文件目标,表示总是被执行!习惯总给clean设置.PHONY,相当于vs的清理解决方案 。
总是被执行 代表着👆总是会根据依赖关系,执行依赖方法。无论文件有没有修改,都会执行。(makefile会根据文件最近修改时间来获取文件是否被修改)
.PHONY:all
a:a.c
gcc -o $@$^
b:b.c
gcc -o $@$^
.PHONY:clean
clean:
rm -f a b
四、Linux 软件包管理器——yum
4.1 什么是软件包?
- 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。
- 但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包后直接进行安装。
- 软件包和软件包管理器, 就好比 App 和 应用商店这样的关系。yum是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat,Centos等发行版上。
4.2 yum三板斧
yum三板斧
yum list|greap 软件名 查找软件sudo yum install (-y) 软件名 安装软件 -y表示全部同意 sudo yum remove (-y) 软件名 卸载软件
注意事项:
- 关于 yum 的所有操作必须保证主机网络畅通!!
- 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成。
- yum安装软件只能一个装完了再装另一个,正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错。
- yum源是一个配置文件,在
/etc/yum.repos.d 路径下,里面有大量的链接,现在基本上都是国内的镜像网站链接。 - 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构。
五、git——版本控制器
5.1 什么是版本控制?
- 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。
- 版本控制器最主要的功能就是追踪文件的变更,常见版本控制器有git和svn。
- git和GitHub的关系是:git是弓(软件/工具),你的代码是箭,github是靶子(平台)
5.2 git三板斧
预备:git clone 你的git仓库链接 git add 你的文件 #添加我们的代码到本地仓库 git commit - m"这里必须提交日志" #提交代码到本地仓库中 git push #提交我们的代码到远端仓库
注意: 无法提交时,无脑git pull,文件修改后照样三板斧就可以,git只会记录变化部分。
Linux调试器-gdb使用
程序的发布方式有两种,debug模式和release模式 ,而 Linux gcc/g++默认是形成的可执行程序是release模式,无法直接调试。 如果要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。 例如gcc test.c -o test -g
选项 | 功能 |
---|
quit | 退出gdb | list/l | 显示代码 | r | 开始调试,如果没有设置断点,就直接结束! | b 行号 | 给特定的行号打断点 | info b | 显示断点(断点的编号) | d 断点的编号 | 删除断点的编号 | n | 逐过程,相当于vs里面的F10 | p 变量名 | 打印变量内容 | s | 逐语句,相当于vs里面的F11 | bt | 查看当前的调用堆栈 | finish | 当当前函数跑完,就停下来 | display 变量 | 设置常显示 | undisplay 变量编号 | 取消常显示 | until 行数 | 跳转到指定行,不建议 | disable/enable 断点编号 | 打开/关闭断点 | set var 变量=大小 | 设置变量值 |
|