Linux知识点 -- Linux环境基础开发工具使用

Linux知识点 – Linux环境基础开发工具使用

文章目录

  • Linux知识点 -- Linux环境基础开发工具使用
  • 一、Linux编辑器 - vim
    • 1.vim的打开与关闭
    • 2.vim的三种模式
    • 3.命令模式常见命令
    • 4.底行模式命令
    • 5.设置vim的table键为4个字符
    • 6.vim中多行注释与去注释
  • 二、Linux编辑器 - gcc / g++
    • 1.介绍
    • 2.gcc / g++的使用
    • 3.gcc / g++的编译过程
    • 4.Linux下的动、静态库
  • 三、Linux项目自动化构建工具 - make / Makefile
    • 1.介绍
    • 2.使用make / Makefile来构建项目
    • 4 .PHONY: 伪目标
    • 5.Linux多文件项目
    • 6.Makefile的简易编写方法
  • 四、进度条小程序
  • 五、Linux软件包管理器yum
    • 1.介绍
    • 2.yum的使用
  • 六、Linux版本控制器git
    • 在Linux上使用git
  • 七、Linux调试器gdb
    • 1.背景
    • 2.gdb的调试指令


一、Linux编辑器 - vim

vim配置:https://gitee.com/HGtz2222/VimForCpp?_from=gitee_search

1.vim的打开与关闭

打开vim

[lmx@VM-8-2-centos lesson07-27]$ vim

Linux知识点 -- Linux环境基础开发工具使用_第1张图片
使用vim打开文件

[lmx@VM-8-2-centos lesson07-27]$ vim main.c

Linux知识点 -- Linux环境基础开发工具使用_第2张图片
关闭vim
shift + :,光标到左下角,然后输入q,退出vim;
Linux知识点 -- Linux环境基础开发工具使用_第3张图片

2.vim的三种模式

(1)命令模式:默认打开的模式,输入命令可执行;
输入 i 切换至编辑/插入模式,按ESC退回命令模式;
输入 shift + : 切换至底行模式,按ESC退回命令模式;

Linux知识点 -- Linux环境基础开发工具使用_第4张图片
(2)编辑/插入模式:用于文本编辑;
Linux知识点 -- Linux环境基础开发工具使用_第5张图片
(3)底行模式:执行底行命令;
Linux知识点 -- Linux环境基础开发工具使用_第6张图片
注:编辑模式和底行模式不能互相切换;

3.命令模式常见命令

(1)yy:将当前光标所在的行进行复制;
nyy表示复制n行;

(2)p:当复制的行在光标处进行粘贴;
np表示粘贴n次;
(3)dd:将当前光标所在的行进行剪切(删除);
ndd表示剪切n行;

Linux知识点 -- Linux环境基础开发工具使用_第7张图片
(4)u:撤销操作;
(5)ctrl + r :撤销u操作;
(6)shift + g:光标定位到文件的结尾;
(7)gg:光标定位到文件的最开始;
(8)n + shift + g:光标定位到文件的任意行;
(9)shift + 6(^):光标定位到当前行的最开始;
(10)shift + 4(¥):光标定位到当前行的最结尾;
(11)w,b:以单词为单位,进行光标的前后移动;
(12)h,j,k,l:左,下,上,右;
(13)shift + ~:大小写切换
(14)shift + r:进入替换模式(insert);
(15)r:替换光标所在的字符;
nr:替换n个字符;
(16)x:删除光标所在字符;
shift + x:删除光标之前的字符;
支持nx,n + shift + x;

4.底行模式命令

(1)set nu/nonu : 打开行号 / 取消行号;
(2)vs 文件名:分屏操作;
分屏切换光标:ctrl + ww;
(3)w:写入,保存;w!是强制保存;
(4)q:退出;q!强制退出;
(5)!cmd :不退出vim执行对应的cmd命令(执行命令行,编译,运行,查看man等);

Linux知识点 -- Linux环境基础开发工具使用_第8张图片

5.设置vim的table键为4个字符

[lmx@VM-8-2-centos lesson07-27]$ cd ~  //进入家目录
[lmx@VM-8-2-centos ~]$ vim .vimrc	//打开vim配置文件

在这里插入图片描述
将这几行改为4,table就是4字符了;

6.vim中多行注释与去注释

  • 多行注释
    (1)在命令模式下,CTRL + v进入visual block模式;
    (2)该模式中使用j 、k选中需要注释的行;
    Linux知识点 -- Linux环境基础开发工具使用_第9张图片
    (3)shift + i进入首行编辑模式,输入注释代码符号//;
    Linux知识点 -- Linux环境基础开发工具使用_第10张图片
    (4)ESC后就会注释所有选中行;
    Linux知识点 -- Linux环境基础开发工具使用_第11张图片

  • 取消多行注释
    (1)在命令模式下,CTRL + v进入visual block模式;
    (2)使用h、j、k、l选中需要删除的内容;
    Linux知识点 -- Linux环境基础开发工具使用_第12张图片
    (3)输入d,就可以删除选中内容;
    Linux知识点 -- Linux环境基础开发工具使用_第13张图片

二、Linux编辑器 - gcc / g++

1.介绍

gcc / g++是专门用来编译链接c / c++的编译器;
默认centos7.6 or 8匹配的gcc版本是4.8;
gcc进行程序处理的过程与widows系统上的IDE处理过程是一样的,都经历4步:
(1)预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译 …)
(2)编译(c -> 汇编)
(3)汇编(汇编 -> 可重定向二进制目标文件)
(4)链接(链接多个.o文件,多个.obj文件合并形成一个可执行文件,默认名为a.out)

2.gcc / g++的使用

使用gcc编译生成可执行文件:
Linux知识点 -- Linux环境基础开发工具使用_第14张图片
执行gcc 文件名… -o 可执行文件名
-o是指定一个新名字,输出到该文件;
也可以gcc -o 可执行文件名 文件名…

-o后一定要跟着目标文件名;

[lmx@VM-8-2-centos lesson07-27]$ gcc hello.c -o hello
[lmx@VM-8-2-centos lesson07-27]$ ls
hello    install.sh  main.o    mytest  test.c  test.o
hello.c  main.c      Makefile  proc    test.h

运行可执行文件
./可执行文件
(./是指在当前文件夹下)

[lmx@VM-8-2-centos lesson07-27]$ ./hello
hello world!

使用g++编译生成可执行文件
Linux知识点 -- Linux环境基础开发工具使用_第15张图片

[lmx@VM-8-2-centos lesson07-27]$ g++ hello.cpp -o hello
[lmx@VM-8-2-centos lesson07-27]$ ls
hello      install.sh  main.o    mytest  test.c  test.o
hello.cpp  main.c      Makefile  proc    test.h

3.gcc / g++的编译过程

gcc选项
Linux知识点 -- Linux环境基础开发工具使用_第16张图片

(1)预处理
在这里插入图片描述
g++ -E:从现在开始进行程序的翻译,如果预处理完成,就停下来;
预处理后保存到可执行临时文件hello.i中;
Linux知识点 -- Linux环境基础开发工具使用_第17张图片
(2)编译
在这里插入图片描述
g++ -S:从现在开始进行程序的翻译,如果编译完成,就停下来;
编译后保存到hello.s文件中;
Linux知识点 -- Linux环境基础开发工具使用_第18张图片
(3)汇编
在这里插入图片描述
g++ -c:从现在开始进行程序的翻译,如果汇编完成,就停下来;
汇编后生成可重定向目标文件hello.o;
Linux知识点 -- Linux环境基础开发工具使用_第19张图片
(4)链接
在这里插入图片描述
链接生成可执行文件hello(若不指定文件名,默认名为a.out);

4.Linux下的动、静态库

静态库:是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为".a"(windows下为".lib");
动态库:在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销;动态库一般后缀名为".so"(windows下为".dll");
gcc默认生成的二进制程序,是动态链接的;

Linux中的库位置
在这里插入图片描述
gcc / g++默认生成的可执行文件是动态连接的
Linux知识点 -- Linux环境基础开发工具使用_第20张图片
gcc / g++使用静态链接
Linux知识点 -- Linux环境基础开发工具使用_第21张图片
若链接失败,可能是没有安装静态库:

sudo yum install -y glibc-static  #c静态库
sudo yum install -y libstdc++-static  #c++静态库

三、Linux项目自动化构建工具 - make / Makefile

1.介绍

一个工程中的源文件有很多,按类型、功能、模块分别放在若干个,目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于更复杂的功能操作;
make是一个命令,Makefile是一个文件,两者一块完成项目的自动化构建;
Makefile中包含了a.依赖关系;b.依赖方法;

2.使用make / Makefile来构建项目

(1)创建Makefile文件

[lmx@VM-8-2-centos lesson07-27]$ touch Makefile

(2)编写Makefile并构建项目
Linux知识点 -- Linux环境基础开发工具使用_第22张图片
在Makefile中编辑依赖关系和依赖方法:
依赖关系可以不依赖任何文件;
在这里插入图片描述
编辑好Makefile后,在命令行中执行make指令,系统就会依照Makefile中的依赖关系和依赖方法去构建项目:
在这里插入图片描述
在这里插入图片描述
(3)项目清理
Linux知识点 -- Linux环境基础开发工具使用_第23张图片
使用make clean指令调用clean文件,执行清理项目的指令;
Linux知识点 -- Linux环境基础开发工具使用_第24张图片
注:Makefile默认只会找到第一个目标文件去执行,只有一对依赖关系和方法;
像上面的Makefile在执行make指令时只会执行test文件,而不会找到后面的clean;
如果改成下面这样:
Linux知识点 -- Linux环境基础开发工具使用_第25张图片
make时只会执行clean,而不会执行后面的test;
在这里插入图片描述
如果想执行Makefile后面的目标文件,可以在make后面带上文件名;
在这里插入图片描述

4 .PHONY: 伪目标

==.PHONY:==标记的目标文件为伪目标,总是被执行;
Linux知识点 -- Linux环境基础开发工具使用_第26张图片
clean为伪目标;
Linux知识点 -- Linux环境基础开发工具使用_第27张图片
make执行一次后,可执行程序test是最新的,就不能再次执行了;
而伪目标clean可以一直执行;

注:Makefile是如何得知我们的可执行程序是最新的:
是根据文件的最近修改时间来知道的
Linux知识点 -- Linux环境基础开发工具使用_第28张图片

5.Linux多文件项目

在这里插入图片描述
Linux知识点 -- Linux环境基础开发工具使用_第29张图片
Linux知识点 -- Linux环境基础开发工具使用_第30张图片
Linux知识点 -- Linux环境基础开发工具使用_第31张图片
Makefile需要执行的指令:
Linux知识点 -- Linux环境基础开发工具使用_第32张图片
Linux知识点 -- Linux环境基础开发工具使用_第33张图片
Makefile第一个找到的目标文件是mytest,所以在第一次make时,系统检测到没有test.o 和 main.o,所以会继续向下执行,直到形成test,o和mian.o;
Linux知识点 -- Linux环境基础开发工具使用_第34张图片

6.Makefile的简易编写方法

Linux知识点 -- Linux环境基础开发工具使用_第35张图片
其中,$@代表这个依赖方法对应的依赖关系中的目标文件,就是hello;
$^代表:右侧的所有文件(hello.c等),适用于多个.c文件共同合成一个可执行程序;

四、进度条小程序

写代码时先写Makefile,保证能把hello world跑通,再写其他代码;
Linux知识点 -- Linux环境基础开发工具使用_第36张图片
Linux知识点 -- Linux环境基础开发工具使用_第37张图片
缓冲区问题:
Linux知识点 -- Linux环境基础开发工具使用_第38张图片
在这里插入图片描述
hello world会在3秒之后才会打印;
printf这句代码早就执行完了,只不过信息没有立马被显示出来;
c语言是会给我们提供输出缓冲区(一段内存空间)的,根据特定的刷新策略来进行刷新;
显示器设备,一般的刷新策略是行刷新,碰到’\n’,就把’\n’之前的所有字符全部显示出来;

如果需要马上刷新输出缓冲区,可以用fflush:
Linux知识点 -- Linux环境基础开发工具使用_第39张图片
在这里插入图片描述
这样hello world就会立刻打印出来,打印完再等3秒程序运行结束;

倒计时程序:
Linux知识点 -- Linux环境基础开发工具使用_第40张图片
\r:回车,不会触发行刷新;\n:换行;
每打印完一个字符串,\r光标回到最开始,在当前行继续向后打印,然后强制刷新缓冲区;延迟1s后进入下一次循环;
在这里插入图片描述
程序运行完成后,光标回到最开始:
在这里插入图片描述
进度条程序

  1 #include<stdio.h>  
  2 #include <unistd.h>  
  3 #include <string.h>  
  4   
  5 #define NUM 102  
  6   
  7 int main()  
  8 {  
  9   char bar[NUM];  
 10   memset(bar, 0, sizeof(bar));  
 11   const char* lable = "|/-\\"; //4符号代表进度条  
 12   
 13   int count = 0;  
 14   while(count <= 100)  
 15   {  
 16     
 17     printf("[%-100s][%d%%] %c\r", bar, count, lable[count%4]);  
 18     bar[count++] = '#';  
 19     fflush(stdout);  
 20     usleep(30000);//单位是微妙  
 21   }  
 22   printf("\n");                                                             
 23   return 0;                                          
 24 }    

运行效果:
在这里插入图片描述

五、Linux软件包管理器yum

1.介绍

把常用的软件提前编译好,做成软件包,放在一个服务器上,通过包管理器可以很方便的获取这个编译好的软件包,直接进行安装;
软件包和软件包管理器就好比app和应用商店的关系;
yum是Linux下的非常常用的一种包管理器;

2.yum的使用

(1)安装yum源扩展

sudo yum install -y epel-release

yum安装一般都要使用到sudo权限;
-y后面是源扩展的名称;

(2)查找软件

yum list | grep sl

Linux知识点 -- Linux环境基础开发工具使用_第41张图片
yum list是列出yum源下所有的软件,| grep sl是将文本送人管道,然后找寻其中包含sl字符串的内容,再打印;

(3)安装软件

sudo yum install -y 软件名

-y是指所有选项默认认可;

(4)卸载软件

yum remove 软件名

六、Linux版本控制器git

在Linux上使用git

(1)新建仓库
Linux知识点 -- Linux环境基础开发工具使用_第42张图片
复制仓库链接:
Linux知识点 -- Linux环境基础开发工具使用_第43张图片

(2)克隆仓库

git clone 仓库链接

在这里插入图片描述
Linux知识点 -- Linux环境基础开发工具使用_第44张图片

(3)git add

git add 文件/文件夹名   #上传该文件/文件夹
git add .			  #上传现目录下所有文件

git add会自动识别改动的文件,并上传到本地仓库;
其实是添加到了.git文件中,git上传就是上传.git文件;

Linux知识点 -- Linux环境基础开发工具使用_第45张图片
Linux知识点 -- Linux环境基础开发工具使用_第46张图片

(4)git commit

git commit -m "提交日志"

提交代码到仓库中;
在这里插入图片描述

(5)git push

git push

提交代码到远端仓库;

(6)其他情况
第一次使用时,可能需要配置用户名和邮箱:
Linux知识点 -- Linux环境基础开发工具使用_第47张图片
执行这两条指令,将用户名和邮箱改成自己的;

有时无法提交,会出现提交冲突

git pull

执行gti pull指令,同步本地仓库代码;

(7).gitignore文件
不想提交某些后缀的文件到远端的git仓库,就可以将该文件的后缀添加到.gitignore文件中;
Linux知识点 -- Linux环境基础开发工具使用_第48张图片
gitee创建仓库时就可以选择添加.gitignore文件,但是如果已经创建的仓库还想添加.gitignore文件,应该如下操作:
1.在当前git文件夹中打开git bash窗口:
在这里插入图片描述
Linux知识点 -- Linux环境基础开发工具使用_第49张图片
2.创建.gitignore文件,并添加不想上传的文件后缀到此文件中:
在这里插入图片描述
Linux知识点 -- Linux环境基础开发工具使用_第50张图片
此时,文件夹中已经有了.gitignore文件;
在这里插入图片描述

3.为避免冲突,先同步下远程仓库

git pull

4.在本地项目目录下删除缓存

git rm -r --cached

5.再次上传所有文件

git add .
git commit -m "filter new files"
git push

(8)git rm

git rm 文件名

可以删除文件;

七、Linux调试器gdb

1.背景

如果我们将gcc / g++生成的可执行程序直接用gdb进行调试,我们会发现:
Linux知识点 -- Linux环境基础开发工具使用_第51张图片
gdb会提示没有调试信息;
这是因为gcc / g++默认生成的在可执行程序是release版本的,故无法直接被调试;

生成deBug版本的可执行程序:

g++ test.cpp -o test-deBug -g

-g表明该程序是以deBug方式发布的;
Linux知识点 -- Linux环境基础开发工具使用_第52张图片
这样就可以使用gdb对程序进行调试了;

2.gdb的调试指令

注:gdb会记录最近一条命令,如果命令无变化,可以直接回车运行上一条命令;

(1)进入调试环境

gdb test-deBug 

Linux知识点 -- Linux环境基础开发工具使用_第53张图片

(2)退出gdb

(gdb) q

退出调试环境(quit);

(3)打印代码

(gdb) l 0

l 行号,从该行开始打印代码(全称为list,可以简写);
Linux知识点 -- Linux环境基础开发工具使用_第54张图片

(4)开始调试运行

(gdb) r

开始调试运行代码,运行到第一个断点处,如果没有断点,就直接运行到结束(run);
Linux知识点 -- Linux环境基础开发工具使用_第55张图片

(5)打断点

(gdb) b 17

b 行号,可以在该行打断点(breakpoint);
在这里插入图片描述
打完断点后,run程序:
Linux知识点 -- Linux环境基础开发工具使用_第56张图片
程序会在第一个断点处停下来,此时如果继续run:
Linux知识点 -- Linux环境基础开发工具使用_第57张图片
gdb会提示该程序已经在运行了,是否重新运行;

(6)查看断点信息

(gdb) info b

(information)
在这里插入图片描述

(7)删除断点

(gdb) d 1

d 断点编号,可以删除该编号的断点,不能以行号来删除断点(delete);
在这里插入图片描述

(8)逐过程

(gdb) n

逐过程运行代码,相当于vs中的F10(next);
Linux知识点 -- Linux环境基础开发工具使用_第58张图片

(9)打印变量内容

(gdb) p result

p 变量名,可以打印当前状态下该变量的内容(print);
在这里插入图片描述

(10)逐语句

(gdb) s

逐语句运行程序,相当于vs中的F11,遇到函数会进到函数内部,进入函数后会显示函数名、形参值还有所在文件;
Linux知识点 -- Linux环境基础开发工具使用_第59张图片

(11)查看调用堆栈

(gdb) bt

可以查看当前的堆栈调用情况,最上面的是现在正在调用的堆栈;
在这里插入图片描述

(12)跑完当前函数

(gdb) finish

跑完当前所在的函数,并得到返回值;
Linux知识点 -- Linux环境基础开发工具使用_第60张图片
跑完后,当前堆栈就没有这个函数了;
在这里插入图片描述

(13)常显示变量值

(gdb) display i

display 变量名,可以常显示该变量的值;
Linux知识点 -- Linux环境基础开发工具使用_第61张图片

(14)取消常显示

(gdb) undisplay 2

undisplay 变量编号,取消该编号变量的常显示,注意是变量编号;
Linux知识点 -- Linux环境基础开发工具使用_第62张图片

(15)跳转运行到指定行

(gdb) until 11

until 行号,跳转运行到制定行,函数内执行,不建议直接跳到函数外;
Linux知识点 -- Linux环境基础开发工具使用_第63张图片

(16)运行到下一个断点

(gdb) c

直接运行到下一个断点处,相当于vs中的F5(continue);
Linux知识点 -- Linux环境基础开发工具使用_第64张图片

(17)断点的使能

(gdb) disable 2
(gdb) enable 2
(gdb) disable

disable / enable 断点的编号,使能(关闭 / 打开)断点;
Linux知识点 -- Linux环境基础开发工具使用_第65张图片

你可能感兴趣的:(Linux,linux,vim,运维)