Linux环境基础开发工具使用

目录

前言

一、Linux软件包管理器yum

1.什么是软件包?

2.查看软件包

2.1 关于lrzsz

2.2 搜索软件包

3.安装与卸载软件

3.1安装软件

3.2 卸载软甲

二、Linux编辑器-vim使用

1.vim的基本概念

2.vim的基本操作 

2.1命令模式基本操作

2.2 底层模式基本操作

三、Linux编译器,gcc/g++的使用

1.如何进行编译

​编辑

 2.编译的四个过程

2.1预处理(-E)

2.2编译(-S)

​编辑 2.3汇编(-c)

​编辑

 2.4链接

3.函数库

3.1函数库的概念

3.2 动态库与静态库

3.3动态库和静态库的转变

四、Linux调试器-gdb的使用

1.背景

2.基本操作 

五、Linux项目自动化构建工具——make/makefile 

1.什么是make/makefile?

2.依赖关系与依赖方法 

3.一些特殊符号

六、Linux第一个小程序——进度条

1.\r&&\n

2.缓冲区

3.倒计时代码和进度条代码


前言

hello,小伙伴们大家好。今天这篇文章,主要带大家学习一下Linux操作系统下一些开发工具的使用,学习完这篇内容后,我们将基本具有在Linux环境下写代码的能力,然后就可以开始愉快的写代码啦。


一、Linux软件包管理器yum

1.什么是软件包?

  • 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。
  • 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。
  • 软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系。
  • yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat,Centos等发行版上。

2.查看软件包

2.1 关于lrzsz

这个工具用于windows机器和远端Linux机器通过Xshell传输文件。

安装完毕之后可以通过拖拽的方式吧文件拽过去。

2.2 搜索软件包

yum list为软件包列表,可以列出有哪些软件包,由于软件包很多,我们需要通过grep筛选出我们想要的软件包。下面我们以lrzsz举例子。

yum list | grep lrzsz

结果如下:

lrzsz.x86_64 0.12.20-36.el7 @base

注意事项:

  • 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构。
  • "x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配。
  • "el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示centos6/redhat6。
  • 最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念。

3.安装与卸载软件

3.1安装软件

sudo yum install lrzsz

yum 会自动找到都有哪些软件包需要下载, 这时候敲 "y" 确认安装。出现 "complete" 字样, 说明安装完成。

注意事项:

  • 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成。
  • yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错。
  • 如果 yum 报错, 请自行百度。

3.2 卸载软甲

sudo yum remove lrzsz 

二、Linux编辑器-vim使用

1.vim的基本概念

我们重点讲解三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式 (command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

末行模式(last line mode) 

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes

2.vim的基本操作 

2.1命令模式基本操作

  • shift+$,shift+^ :锚点,左右定位
  • gg,shift+g,n+shift+g :上下定位
  • yy,p,nyy,np :拷贝粘贴
  • u :撤销
  • ctrl+r :取消刚才的撤销
  • dd,ndd:删除光标所在行
  • ndd+p,dd+p:剪切
  • shirt+~ :大小写切换
  • w,b:按照单词为单位进行光标跳转
  • x,nx :删除光标所在字符和光标之后的字符
  • X , nX :删除光标位置之前的字符,不包括光标当前位置
  • r,nr对光标位置的字符进行替换
  • shift+r(R):进入替换模式
  • k,j(jump),k(king),l:左,下,上,右

2.2 底层模式基本操作

  • set nu: 调出行号
  • set nonu:取消行号
  • w,q,!:保存,退出,强制
  • !+命令:不退出vim执行命令行命令
  • vs filename  :分屏(依旧用wq!退出,光标在哪个退出哪个文件)
  • ctrl+ww:光标在多屏幕下进行切换

三、Linux编译器,gcc/g++的使用

1.如何进行编译

在Linux下,我们通常用gcc和g++编译器进行编译,命令如下:

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

在编译完成后生成a.out可执行文件,./a.out执行该文件。 

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

 2.编译的四个过程

2.1预处理(-E)

功能:头文件展开,去注释,进行宏替换,条件编译。

gcc默认打印到屏幕上,如果要指定路径,后面加上-o选项。

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

 可以看出没有mytest.i文件比mytest.c文件大很多,原因是在预处理阶段进行了头文件展开。

2.2编译(-S)

功能:c代码编译成汇编

Linux环境基础开发工具使用_第3张图片 2.3汇编(-c)

功能:把汇编翻译成二进制语言

 2.4链接

功能:目标文件,只有函数的调用,没有函数的实现。链接的本质是将函数的调用和函数的实现结合起来。

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

3.函数库

3.1函数库的概念

  • 我们刚才编写的c成语中,并没有printf函数的实现,且预编译中包含的"stdio.h"也只有该函数的声明,那么printf的实现放到哪里了呢?
  • 最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。

3.2 动态库与静态库

库的使用时需要链接(Link),而根据链接方式的不同,把库分为两种,动态库和静态库。

静态库(静态链接库):编译链接时,把库文件的代码全部加入到可执行文件中。

优点:可移植性强,不依赖第三方库,不会因为库的损坏导致程序无法运行。

缺点:浪费空间。

动态库(动态链接库):编译链接时,不会把库文件拷贝进来,只会存储库指向动态库的引用,等程序真正运行时,才会加载。

优点:省空间(磁盘的空间,内存的空间),体积小,速度快。

缺点:依赖动态库,可移植性较差,会因为库的损坏或者版本不合无法运行程序。 

3.3动态库和静态库的转变

gcc生成的可执行程序,默认是动态的。

gcc 带上- staic就会变成静态。

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

可见静态链接生成的文件比动态链接生成的文件要大很多。 

四、Linux调试器-gdb的使用

1.背景

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

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

debug方式会加入更多的调试信息,方便调试,所以体积更大。

2.基本操作 

  • l(行号):显示代码
  • r:运行代码
  • b 行号:打断点
  • info b:查看断点
  • d 行号:删除断点
  • n:逐过程
  • s:逐语句
  • finish:直接运行完毕对应的函数
  • until:跳转至任意行
  • continue:跳转到下一个断点处
  • p:查看变量内容活地址
  • display 变量:变量常显示
  • undisplay 行号:去掉常显示的变量

五、Linux项目自动化构建工具——make/makefile 

1.什么是make/makefile?

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

2.依赖关系与依赖方法 

依赖关系主要表明需要依赖的对象,而依赖方法主要描述需要依赖的对象做什么。比如在上学期间,家里都会给我们打生活费。我们没钱了就会联系父母,因为我们和父母之间具有依赖关系。而联系父母是为了让他们给我们打生活费,打生活费这个具体行为这称为依赖方法。

我们要创建一个makefile文件,依赖关系和依赖方法都写在里面。

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

.PHONY表示伪目标,依赖方法总是被执行,可以重复执行。 

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

如图make clean可以重复执行,而在文件不发生改变的情况下make只能执行一次。 

3.一些特殊符号

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

$@代表目标文件,$^代表依赖文件列表,$<代表依赖关系中的一个一个依赖文件。 

合理使用这些符号可以使操作更加方便。

六、Linux第一个小程序——进度条

1.\r&&\n

\r:回车,回到本行的行首

\n:换行,光标向下平移,换到下一行

\r\n:回车换行,换到下一行再使光标回到行首,相当于我们平常用的Enter。而且c/c++等语言中,\n通常和\r\n等价。

2.缓冲区

分别运行下面两个代码,会发现运行时有很大的区别。

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

运行结果:五秒之后才输出hello world。

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

 运行结果立刻输出hello world。

原因:在用显示器打印的时候,并不是直接把数据写到显示器上,而是先写进缓冲区里。缓冲区分为无缓冲,行缓冲和全缓冲。而显示器默认的是行刷新,每过一行会刷新一次,把缓冲区里的数据清空。所以不加换行符时,数据会在保存在换成区中,五秒过后,程序结束时才会被打印到显示器上。而加了换行符,显示器刷新,清空缓冲区,直接把缓冲区中的数据并打印出来。

3.倒计时代码和进度条代码

学习了这么多内容,我们赶紧写个代码练练手吧。

我们经常在屏幕上看到倒计时,并且我们在下载一些软件时,一般都会出一个进度条。有了上面换行符和缓冲区的知识做基础,我们就可以动手实现一下倒计时和进度条的代码。

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


 总结

本文主要介绍了Linux环境下的常用开发工具,小伙伴们有没有学会呢?纸上得来终觉浅,绝知此事要躬行,事不宜迟,赶紧去试试吧!如果觉得本文有帮助的话不妨点个赞支持一下博主,你们的支持就是我创作的最大动力。

你可能感兴趣的:(Linux基本操作,linux,服务器,后端)