三、Linux环境基础开发工具使用

目录

1.Linux软件的安装

2.Linux vim

2.1编写代码

2.2编译代码

2.3调试代码 

3.自动化构建工具-make/Makefile

4.Linux第一个小程序:进度条

5.使用git命令行


1.Linux软件的安装

1.源码安装

2.rpm安装

3.因为Linux开发中可能存在大量的软件之间的依赖关系,所以上面2种安装时非常麻烦的,安装B需要先安装A或者C,因此我们使用yum:本身会考虑依赖关系。yum和手机上的应用市场一样。

把Linux所有能安装的文件都列出来,普通用户需要提升权限sudo ,这里使用root用户操作,因为还没有添加信任,所以不能sudo:

筛选出sl.x86_64 .是转义字符,防止转义:

三、Linux环境基础开发工具使用_第1张图片

安装sl.x86_64

三、Linux环境基础开发工具使用_第2张图片

不想被提示:yum install -y sl.x86_64

输入sl 运行这个软件:小火车

卸载sl.x86_64 软件

yum remove sl.x86_64

yum remove -y sl.x86_64 不提示是否安装

在云服务器自带的man手册是精简手册,只能查指令,很多功能不全

安装man :

三、Linux环境基础开发工具使用_第3张图片

安装cowsay:

三、Linux环境基础开发工具使用_第4张图片

在安装软件的时候,yum怎么知道软件在那台服务器上呢?,其实内置了地址。

yum源所在:

三、Linux环境基础开发工具使用_第5张图片

CentOS-Base.repo 是基础服务。在找软件的时候,最先找这个文件。

一般都是国外的需要更新成国内的 :


1.先打开源所在目录

cd /etc/yum.repos.d/

2. 备份原来的yum源

mv CentOS-Base.repo CentOS-Base.repo.backup

3.使用阿里源替换原来的源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

4.清除yum缓存并更新

yum clean all
yum makecache

一般安装软件时不一定都在CentOS-Base.repo,它是官方的稳定的、老的软件;有一些非官方的,新的,不太稳定的在epel下,所以安装扩展源:

yum install -y epel-release

需要注意:yum工作,必须要联网,centos里面,只能有一个yum在运行,装软件一个个来。

安装lrzsz,完成windows文件或数据拖拽到到Linux中:

不想拖拽可以rz,把windows文件上传到Linux。

sz+文件名,把文件传到windows上。rz和sz都是打包在lrzsz中。

2.Linux vim

2.1编写代码

在windows中的VS2019是把编写代码、编译代码、调试代码、(发布代码,运行)、代码关系的维护全部集成在了一起。

vi、vim(vim是vi的升级版):文本编辑器,从定位上,和记事本没有任何差别。是一个文本编辑器,主要用于编写代码。

vim在打开文件的时候,若是没有该文件,就会创建这个文件。

vim是多模式编辑器,主要工作模式:命令模式、插入模式、底行模式。

三、Linux环境基础开发工具使用_第6张图片

1.命令模式下的操作

光标操作:

H 光标左移   L光标右移  J光标下移    K光标上移

shift+^(光标移动到行首)     shift+$ (光标移动到行尾)

gg起始行(最开始)               shift+g结束行(最后一行)     n+shift+g(跳转到指定行)

b/w 按照单词位单位进行前/后光标移动

文本操作:

yy:复制当前行                 n(行数)+yy:复制当前行及其之后的n行,包含当前行

u:撤销       ctr+r: 撤销最近的撤销                p:粘贴, np:一次粘贴n份

dd:删除光标所在行,ndd向下n行删除,包括当前行   

dd->p(dd后使用p):剪切,支持np

shift + ~ 对文本快速大小写切换

x:删除光标后的一个字符,支持nx

X:删除光标前的一个字符,支持nX

r:替换一个字符,光标所在字符,支持nr

shift+r:替换模式(第4种模式),直接进行多个内容的替换     esc退出

2.底行模式下操作

进入底行:shift + :

set nu:    调出行号

ser nuno:取消行号

分屏操作:vs+文件名   比如:我当前打开的是test.c,分屏打开file.c ,输入vs file.c

                  光标在文件之间的切换ctrl+ww ,光标在哪就操作那个文件。

w:保存        q:退出       

! 强制

vim配置

vim配置在自己的配置文件中,只会影响自己的操作。

root有自己的vim配置文件,只影响自己。

总结:只会影响自己

如何配置自己的vim?

在自己当前工作路径下没有 .vimrc

三、Linux环境基础开发工具使用_第7张图片

 需要自己创建 .vimrc ,最基本的配置都写在了.vimrc文件中。

三、Linux环境基础开发工具使用_第8张图片

使用vim打开.vimrc文件,进行配置vim:增加行号

三、Linux环境基础开发工具使用_第9张图片

再使用vim打开文件就有了行号:

三、Linux环境基础开发工具使用_第10张图片

其他的vim配置可以在百度上找,自己配置它麻烦了,知道怎么配置就行了。这里提供一个自动配置的vim的链接仅支持centos7,直接复制到命令行就行了,然后输入root密码,自己就配置了:

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

三、Linux环境基础开发工具使用_第11张图片

安装完成需要重启:

如何添加用户信任:

用户换为root

打开以下文件:

三、Linux环境基础开发工具使用_第12张图片

找到100行左右:在这里添加相应用户的信任

三、Linux环境基础开发工具使用_第13张图片

2.2编译代码

Linux 编译器-gcc/g++使用:

使用vim编写一段代码:

三、Linux环境基础开发工具使用_第14张图片

对代码直接编译:gcc test.c 但是出来都是a.out,自定义名字:gcc test.c -o test :

三、Linux环境基础开发工具使用_第15张图片

gcc test.c -o test  在翻译时,主要分为预编译,编译 ,汇编,链接的过程:

1.对代码进行预编译(预处理) .i :gcc -E test.c -o test.i ,打开test.i文件。头文件的展开,宏替换,以及注释使用空行代替:

三、Linux环境基础开发工具使用_第16张图片

三、Linux环境基础开发工具使用_第17张图片

2.对代码编译 .s:gcc -S test.i -o test.s 形成汇编代码,以及语法错误检查:

三、Linux环境基础开发工具使用_第18张图片

计算机是不可以直接执行汇编语言的,需要继续转换成二进制代码

3.汇编  .o文件:将代码转换成二进制指令(机器识别代码) gcc -c test.s -o test.o

汇编形成的二进制文件,但是并不可以直接执行,叫作可重定向目标文件。还差链接,在使用C语言的时候,会使用库函数(比如:printf),语言也是有库的,库主要是一套头文件和一套库文件(libc.a(静态库),libc.so(动态库)),需要链接将我们自己的代码中的函数调用,外部数据,和库关联起来。

4.链接:形成可执行程序 gcc test.o 或gcc test.o -o test

如何理解链接?

ldd可以查看文件依赖的第三方动态库的命令:

test就是依赖libc.so第三方库的,C语言的标准库。

在Linux中分为静态库( .a)和动态库( .so),都和程序成功运行有关。所以链接是:自己写的C程序和语言上或第三方提供的方法,关联起来。

链接分为:静态链接动态链接

动态链接:在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时的链接文件加载库,这样可以节省系统的开销。

静态链接:编译连接时,把库文件的代码全部加入到执行文件中,因此生成的文件比较大,但在运行时也就不在需要库文件了。

三、Linux环境基础开发工具使用_第19张图片

Linux中,gcc默认情况下是动态链接,生成的可执行程序:

三、Linux环境基础开发工具使用_第20张图片

 使用file也以看到文件属性:

我想可执行程序静态链接:gcc test.c -o test_static -static

发现报错了,因为gcc是没有安装静态库的,需要自己安装:

需要安装gblic-static:

sudo yum install -y glibc-static.x86_64

静态链接可执行文件与动态链接可执行文件:动态库是依赖库,库丢了就不能执行了。静态库不依赖库,可以移植性好。

三、Linux环境基础开发工具使用_第21张图片

静态链接的时候,需要.a静态库,动态链接的时候,需要.so动态库,默认的是动态链接。

编译c++程序使用g++,g++也可以编译C语言,gcc不能编译c++代码,最好C语言就是用gcc,C++就使用g++,g++的指令和gcc没有太大的区别,基本一样。

三、Linux环境基础开发工具使用_第22张图片

 g++ test.cpp -o test:

2.3调试代码 

linux调试器-gdb的基本使用

三、Linux环境基础开发工具使用_第23张图片

退出ctrl+d 或 输入指令quit。

进入gdb后执行指令,会提示没有符号加载。

三、Linux环境基础开发工具使用_第24张图片

使用readelf -S +文件 :可以查看可执行程序的段构成,一个可执行程序由那些构成。如果一个程序可以被调试,该程序的二进制文件一定加入了一些debug信息。程序的发布方式有2种:debug和release模式。在vs中,在debug加入了一些debug的信息,所以是可以调试的,release没有加载,因此是不能调试的。在Linux gcc/g++出来的二进制程序,默认是release模式,因此是不能调试的。如果想要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g 选项。

加上debug信息:debug比release可执行文件大,因为加入了debug信息。

三、Linux环境基础开发工具使用_第25张图片

 使用readelf -S +可执行文件:发现加入了debug的信息。

三、Linux环境基础开发工具使用_第26张图片

三、Linux环境基础开发工具使用_第27张图片

gdb基本调试指令:

调试代码:

三、Linux环境基础开发工具使用_第28张图片

 这里支持在for循环里建立变量for(int i=0;i<= top;i++),必须使用C99:

三、Linux环境基础开发工具使用_第29张图片

r/run运行程序:

三、Linux环境基础开发工具使用_第30张图片

list/l 列出代码:每次l都是接着上一次向下列出代码

break/b +行号:在某一行设置断点:

继续run,发现在断点停下来了

三、Linux环境基础开发工具使用_第31张图片

step/s :进入函数内部,相当于VS的 F11

 n/next 单步执行 相当于F10

三、Linux环境基础开发工具使用_第32张图片

 display +变量名:跟踪查看一个变量,每次停下里都显示它的值

三、Linux环境基础开发工具使用_第33张图片

 print/p+变量名:打印变量值对应的变量值,只显示一次

 undisplay+编号:取消对先前设置的那些变量的跟踪。不监控变量了。

 finish:执行到当前函数返回,然后停下来等待命令

continue:代码继续执行,执行到下一个断点停下来。

until+行号:程序执行到指定行停下来,程序正常执行。

delete breakpoints n  或  d n:删除序号为n的断点

三、Linux环境基础开发工具使用_第34张图片

 disable breakpoints n/disable n 禁用断点:y(yes) 变为了n(no)

三、Linux环境基础开发工具使用_第35张图片

enable n / enable breakpoints n 启用断点:

三、Linux环境基础开发工具使用_第36张图片

break+函数名:在函数代码第一行打断点:

 在int sum =0;处打了断点。

 l+函数名:查看函数代码

breaktrace/bt:查看各级函数调用及参数,就和VS中查看调用堆栈一样。

set val 修改变量值:

三、Linux环境基础开发工具使用_第37张图片

3.自动化构建工具-make/Makefile

1.make是一条命令,makefile是一个文件

2.文件和文件之间的互相依赖关系  比如一个项目有很多.c文件,先编译那个文件,后编译那个文件。还有.h文件。

3.makefile文件内包括:依赖关系和依赖方法。

4.make和makefile 配合形成可执行程序的目的。

1.创建文件makefile/Makefile

三、Linux环境基础开发工具使用_第38张图片

2.编辑makefile文件,使得test.c编译为可执行

3.make一下,自动执行makefile,直接生成test

5.对项目的清理

三、Linux环境基础开发工具使用_第39张图片

6.删除可执行文件

为什么我编译文件的时候直接make,而清理文件需要make clean?

make扫描makefile文件的时候,默认只会形成一个目标依赖关系,一般是第一个。

三、Linux环境基础开发工具使用_第40张图片

 我再执行make,就会执行clean

三、Linux环境基础开发工具使用_第41张图片

 建议生成文件的依赖放前面。

.PHONY是什么?

.PHONY修饰对应的符号,伪目标的概念,伪目标:总是可执行的

三、Linux环境基础开发工具使用_第42张图片

当我一直make时,源文件没有做过修改不需要重复编译。 

三、Linux环境基础开发工具使用_第43张图片

 而make clean 是伪目标,因此总是可执行的,即使test文件没有了

三、Linux环境基础开发工具使用_第44张图片

当使用.PHONY修饰test时: 总是可以被执行的 ,一般目标可执行程序不需要这样写,只是举例:

三、Linux环境基础开发工具使用_第45张图片

三、Linux环境基础开发工具使用_第46张图片

对makefile文件进行改进:

三、Linux环境基础开发工具使用_第47张图片

$^表示的是冒号右边的文件列表(test.c)。   $@表示依赖关系中的目标文件 (test)

也可以这样写(但是不推荐)

三、Linux环境基础开发工具使用_第48张图片

4.Linux第一个小程序:进度条

1.理解回车和换行:

在语言上回车换行是:\n

在实际当中,回车:回到当前行的起始位置。 换行:位置不变新起一行。

此代码执行时,会先打印出hello world 的字符串,3秒后程序结束显示命令行。

三、Linux环境基础开发工具使用_第49张图片

若是不带\n:会发现过了3后才显示hello world 并且程序结束了。

三、Linux环境基础开发工具使用_第50张图片

这里的原因是什么?

这里是sleep先于hello world 吗,绝对不是的。printf是先运行的,但是数据没有被立即刷新到显示器上,没有\n,字符串会暂时保存起来,存在了缓冲区(用户C语言级别的缓冲区)。显示器的刷新策略就是行刷新\n即进行刷新

C语言程序,默认会打开三个输入输出流 stdin(键盘)、stdout(显示器)、stderr

man stdin 查看:都是FILE* 类型的

其实,凡是显示到显示器上面的内容都是字符,凡是从键盘读取的内容都是字符。显示器和键盘叫做字符串设备。比如scanf("%d",&a),这里会把键盘的输入的字符转换为10进制,存入内存中。

刷新一下缓冲区,结果一下在屏幕上直接打印了hello word, 3s后程序结束

三、Linux环境基础开发工具使用_第51张图片

实现进度条程序:

1.理解\r 只回车,不换行

三、Linux环境基础开发工具使用_第52张图片

会在同一个位置打印 5 4 3 2 1.

2.进度条程序:

三、Linux环境基础开发工具使用_第53张图片

5.使用git命令行

查看git的版本:

若是没有就安装:yum install git

使用码云创建仓库:

.gitignore可以忽略编译时产生的一些临时文件。许可证不用选。
三、Linux环境基础开发工具使用_第54张图片

复制仓库的链接:

三、Linux环境基础开发工具使用_第55张图片

 

把远程仓库克隆到本地:git clone

三、Linux环境基础开发工具使用_第56张图片

.git 是本地仓库,这个文件不要乱动。
 

三、Linux环境基础开发工具使用_第57张图片

 把文件添加到本地仓库:

三、Linux环境基础开发工具使用_第58张图片

 

 git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

三、Linux环境基础开发工具使用_第59张图片

git 三板斧

1.add

三、Linux环境基础开发工具使用_第60张图片

2.commit ,必须带-m 添加日志信息,否则会报错

三、Linux环境基础开发工具使用_第61张图片

3.push

三、Linux环境基础开发工具使用_第62张图片

最终远程仓库更新完成:

三、Linux环境基础开发工具使用_第63张图片

git log 可以查看日志信息

.gitigonre文件:

打开文件,在上传到远程仓库时,会忽略这些后缀的文件。这就是.gitigonre文件的作用。

三、Linux环境基础开发工具使用_第64张图片

 

你可能感兴趣的:(linux)