当前位置: 首页 > news >正文

Linux环境基础开发工具使用

🧑‍💻Linux环境基础开发工具使用🧑‍💻

文章目录

  • 🧑‍💻Linux环境基础开发工具使用🧑‍💻
  • 一、Linux编辑器——vim
    • 1.1 vim的基本概念
    • 1.2 vim的基本操作
    • 1.3 vim命令模式命令集
    • 1.4 vim底行模式命令集
  • 二、Linux编译器——gcc/g++使用
    • 2.1 预处理
    • 2.2 编译
    • 2.3 汇编
    • 2.4 链接
  • 三、Linux项目自动化构建工具——make/Makefile
    • 3.1 make/Makefile是什么❓
    • 3.2 make/Makefile的作用:
    • 3.3 为什么要有make/Makefile❓
    • 3.4 Makefile怎么去写❓
    • 3.5 Makefile中.PHONY的作用:
  • 四、Linux 软件包管理器——yum
    • 4.1 什么是软件包?
    • 4.2 yum三板斧
  • 五、git——版本控制器
    • 5.1 什么是版本控制?
    • 5.2 git三板斧
    • Linux调试器-gdb使用

一、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转换为计算机的二进制,需要四个过程:

  1. 预处理
  2. 编译
  3. 汇编
  4. 链接

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 ” 从现在开始进行程序的翻译,如果汇编完成,就停下来。

🎈总结:

选项文件格式
Ei
Ss
co

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(静态库)

一般链接的过程,是有两种方式的:

  1. 动态链接——需要动态库,将库中我要的方法的地址,填入我的可执行程序中,建立关联!

  2. 静态链接——需要静态库 ,将库中方法的实现,真的拷贝到我们的可执行程序中!

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,但是占用资源。其后缀名一般为“.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 //gcc -o $@ $^  
  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三板斧

  1. yum list|greap 软件名 查找软件
  2. sudo yum install (-y) 软件名 安装软件 -y表示全部同意
  3. 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 变量=大小设置变量值

相关文章:

  • IDEA使用swing创建应用程序
  • 22.0、C语言数据结构——二叉排序树
  • GSW同态加密方案学习
  • Java -- 每日一问:Exception 和 Error 有什么区别?
  • 使用 Typora 画图
  • Gradle 入门说难也不难,说简单吧也不简单~
  • 层次聚类分析及代码实现
  • 学生选课系统 前后端分离 vue springboot
  • 网络安全比赛A模块任务书
  • IP报文在阿里云上的神奇之旅:同地域内云上通信
  • 基于网络安全的Docker逃逸
  • Android——一个简单的音乐APP(二)
  • 在Eclipse 中使用 Maven 创建雅加达 EE 应用程序
  • 112-JavaSE基础进阶:XML的创建、文档约束、文件的解析技术-Dom4J、解析案例、文件的数据检索技术-XPath
  • 计算机网络 第3 章 数据链路层
  • css选择器
  • echarts花样作死的坑
  • Git初体验
  • Go 语言编译器的 //go: 详解
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • maya建模与骨骼动画快速实现人工鱼
  • PHP 小技巧
  • PHP的类修饰符与访问修饰符
  • React-redux的原理以及使用
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 前端存储 - localStorage
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 一个项目push到多个远程Git仓库
  • 用mpvue开发微信小程序
  • 在Mac OS X上安装 Ruby运行环境
  • Java总结 - String - 这篇请使劲喷我
  • zabbix3.2监控linux磁盘IO
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (搬运以学习)flask 上下文的实现
  • (第二周)效能测试
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (六)激光线扫描-三维重建
  • (十六)一篇文章学会Java的常用API
  • ***测试-HTTP方法
  • ... 是什么 ?... 有什么用处?
  • .form文件_SSM框架文件上传篇
  • .Mobi域名介绍
  • .NET : 在VS2008中计算代码度量值
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net程序集学习心得
  • .NET和.COM和.CN域名区别
  • .NET框架
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET应用架构设计:原则、模式与实践 目录预览