Linux——开发工具的使用

目录

Linux软件包管理器 yum

rzsz

Linux编辑器——vim

        vim的使用

        vim的基本操作

        命令模式的常见命令

        底行模式的常见命令

         vim是需要配置的

Linux编译器——gcc/g++

        预处理

        编译

        汇编

        链接

函数库

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

make原理

项目清理

Linux调试器gdb


Linux软件包管理器 yum

简单的把它理解为“应用商店”就可以,我们可以来安装第一个软件。

rzsz

        这个工具用于windows机器和远端的linux机器通过xshell传输文件,可以通过拖拽的方式将文件传上去。

通过yum list命令可以看到所有的软件包。

yum list | grep lrzsz

使用下面这个指令就可以下载它了。

sudo yum install lrzsz -y 

想要卸载的话,使用这个就可以了。

sudo yum remove lrzsz

Linux编辑器——vim

       我们在网上随便一找就可以找到这张键盘图,这就是大部分的vim的使用方法,但也没有必要全记住,用哪个记哪个就可以了。

       vim它是一个编辑器,换言之它只能写代码,和我们平常用的编译器还是有差别的,我用的vs编译器它是一个集成的开发环境,它既可以编写代码、调试代码,也可以运行程序等,但是vim它只能写代码,就像记事本一样。

       那它只能写代码,我们为什么还要用它呢?在linux下的编辑器还是很多的,但是对于初学的时候,vim还是能在众多编辑器中脱颖而出的,它是许多系统默认装机数最高的,虽然学习成本有一点高,但是不要灰心,并没有那么难学,在linux下我们还是要编写代码的,所以vim是比较优的选择。

        vim的使用

首先要进入vim

#vim //会出现一些版本信息等
#vim [文件名] //如果这个文件没有就创建并进入vim

想要退出vim,首先按下键盘的Esc,输入(:q)(这是一个整体)就可以退出。

这个只是测试vim能不能使用。

        vim的基本操作

vim是一款多模式的编辑器,它有命令模式、编辑(插入)模式和底行模式。

       首先输入vim [文件名]命令进入vim,这是一个全屏幕编辑画面,进入vim默认的就是命令模式,我们需要进入到插入模式才可以编写代码。

开始进入默认的命令模式的左下角就是这样的,或者什么都没有。

[命令模式]切换至[插入模式]
输入a
输入i
输入o
输入过后左下角就会变成这样,这就进入到了插入模式。

[插入模式]切换至[命令模式]
直接按下键盘左上角的Esc
输入后屏幕左下角就变成了空白。
 
那我们想要退出vim,就可以进入到底行模式
[命令模式]切换至[底行模式]
输入:也就是冒号
再输入命令

:w   (保存当前文件)

:q    (退出)

:wp (保存并退出)

:!     (加上 ! 就代表强制,出现问题的时候可以加上!)

 

 由图可知,插入模式和底行模式不能切换。

        命令模式的常见命令

yy:将当前光标所在行进行复制,nyy可以复制多行

p  :将复制的内容进行粘贴,np可以粘贴多次

dd:将当前光标所在的行,进行剪切(删除),也可以使用ndd

u  :撤销

ctrl + r:撤销u的操作

shift + g(G):将光标定位到文件的结尾

gg:将光标定位到文件的最开始

n + shift + g:将光标定位到文件的第n行

shift + 6(^)  :将光标定位到当前行的最开始

shift + 4($)  :将光标定位到当前行的结尾

w、b:以单词为单位进行光标的向后、向前移动,也可以nw、nb使用

h、j、k、l:向左、向下、向上、向右移动光标

shift + ~:大小写的切换

shift + r :进入替换模式,可以替换光标指向的内容

r :替换光标所在的字符,同样可以使用nr

x or shift + x(X):删除光标所在的字符,之后or之前,也支持nx

        底行模式的常见命令

:set nu:显示行号

:set nonu:取消显示行号   

:vs (文件名):分屏操作

ctrl + ww:分屏下切换操作的文件

:! + 指令:在vim的底行模式下执行linux下的指令

         vim是需要配置的

       如果你现在正在使用原生的vim来写代码,那么第一个感觉应该就是很麻烦,那是因为vim是需要配置的,我们需要配置一个好用的环境来写代码。

       首先我们要在当前的用户目录下要有一个.vimrc的文件,我们需要在这个文件中添加vim的配置项,那有哪些配置项呢,那可以百度一下,想要什么样的效果就添加什么效果的配置项到文件.vimrc中;如果嫌麻烦,也可以找一些插件,这里我就不过多介绍了。


Linux编译器——gcc/g++

        前面的vim满足我们写代码的要求,gcc和g++就可以帮我们编译代码,gcc这个软件可以说是大部分操作系统自动默认安装的,g++可能没有,不要担心,就算是gcc没有我们也可以下载。

       在这之前,我们也可以先来讨论一下程序的翻译过程,编译器做的工作不就是把我们认识的语言转化成计算机认识的语言吗。下面我们就来介绍我们写的代码是怎么一步步的翻译成了计算机认识的语言也就是二进制的指令。

        预处理

在这一部分要处理的就是:

1.去注释 2.宏替换 3.头文件展开 4.条件编译

下面我们介绍一下简单的选项:

-E:让gcc在预处理结束后停止翻译过程

-o:让.c文件编译成指定名字的文件

因为在Linux下直接gcc -E .c文件,他会把内容直接打印出来,所以我们用gcc -E .c文件 -o 指定的文件。

//我的.c文件就是mytest.c,里面有简单的代码
# gcc -E mytest.c -o mytest.i//指定的文件就是指定文件名

       然后就可以看到目录下有一个mytest.i的文件,我们用vim打开,G选项直接到最底可以看到原来的代码变成了800多行的,这就是把头文件全展开了,进行了宏替换,注释都没有了,条件编译执行了,所以这就是预处理的操作。

       最后在说一下,我们写代码的时候,在头文件中的开头都会写上#pragma once,这句代码就是让我们的头文件不要重复编译,以免代码过长。

        编译

编译就是把C语言转换为汇编语言。

# gcc -S mytest.i -o mytest.s

选项-S:让gcc在编译结束后停止翻译过程,生成汇编语言

这里用.i或者.c都可以都是到编译就停止

        汇编

把汇编语言变成可重定位目标二进制文件

# gcc -c mytest.s -o mytest.o

这个.o文件和我们Windows下的obj文件是一样的

选项-c:让gcc在汇编结束后停止翻译过程,生成可重定位目标二进制文件

        链接

# gcc mytest.o -o mytest

执行这个命令就可以生成可执行程序

函数库

       在链接的过程还可以再说一点其他的,一般的链接过程有两种方式,动态链接静态链接

       动态链接需要动态库,静态链接需要静态库。这也是我们一直默默在用的,只是我们自己可能不知道。

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件当中,因此生成的文件比较大,但在运行时也就不再需要库文件了,静态库一般以.a为后缀。
  • 动态库不是这样的,在编译链接时并没有把库文件的代码加入到可执行文件当中,而是在程序运行时由链接文件加载库,这样可以节省系统的开销,动态库一般以.so为后缀。

动态链接:
 优点:省空间(磁盘的空间,内存的空间),bin体积小,加载速度快。
 缺点:依赖动态库,程序可移植性较差。
静态链接:
 优点:不依赖第三方库,程序的可移植性较高。
 缺点:浪费空间。

gcc和g++生成的文件默认就是动态链接,使用file指令就可以查看。

使用ldd指令可以查看动态链接的可执行文件所依赖的库。

这个/lib64/libc.so.6就是c标准库,linux下的很多指令也是用c语言写的,使用ldd /user/bin/ls也可以看到这条依赖关系。

        可执行文件就是把函数和库中的实现链接起来,你写的C语言的printf函数,它到最后也是要和库中链接起来的。gcc和g++默认采用的是动态链接,但如果我们需要使用静态链接,带上-static选项即可。有的云服务器可能没有一些静态库,这时候就需要你自己去下载了。

由此可见,动态和静态链接的内存还是差别很大的。


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

        简单来说,make是一个命令makefile是一个文件,以后的工程的源文件会有很多个,文件的编译顺序也是有要求的,而make和makefile写好就可以帮助我们自动化构建项目。

        想要编写makefile就要知道两点:依赖关系依赖方法。

依赖关系:文件1改变会影响文件2,这就是文件2依赖于文件1。

  • 比如,.o文件是由.c文件通过预处理、编译、汇编之后生成的文件,.c文件就会影响.o文件,所以.o文件依赖于.c文件。

依赖方法:文件2依赖于文件1,那么由文件1生成文件2的方法就是依赖方法。

  • .o文件依赖于.c文件,那么gcc -c -o test.c test.o这条命令就是.o依赖于.c的依赖方法。

        那么下面就来用一下make和makefile。

        在目录下随便写了一段代码,下面这张就是makefile文件,写完了之后就可以使用make来生成可执行程序。

make原理

  • make会在当前目录下找名字为“Makefile”或“makefile”的文件
  • 如果找到,它会找文件中的第一个目标文件,也就是上图中,会找到mytest这个文件,并把这个文件作为最终的目标文件。简单来说就是看看makefile中的第一个目标文件是否存在,也就是mytest是否存在。
  • 但是一开始这个文件是不存在的,或者mytest的所依赖的文件被修改了或者说根据文件的修改时间,那就会通过依赖方法生成这个文件,也就是gcc编译生成一个文件。

使用stat命令就可以查看文件的修改时间。

这也是Linux下文件的ACM。

  • 如果mytest所依赖的文件(test.c)不存在,那么make会在makefile文件中寻找目标为mytest依赖的文件(test.c)的依赖关系(例如test.c: ... ),如果找到则再根据其依赖方法生成test.c文件,但是上面实例中没有可以生成test.c的依赖关系。
  • 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件
  • 在寻找的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错。

Makefile文件的简写方式:

  • $@:表示依赖关系中的目标文件(冒号左边,例如mytest)。
  • $^:表示依赖关系中的依赖文件列表(冒号右边全部,上面的例子只有一个)。

下面就是简写的样式

项目清理

  • 项目是需要被清理的。
  • clean这个就是清理的依赖关系,通常命名成clean,它不需要依赖任何文件,使用的时候直接输入make clean命令就可以执行下面的依赖方法。
  • clean通常要设置为伪目标,使用.PHONY修饰后,无论输入多少次都会执行这句,如果不修饰,就会出现这样的情况。

修饰后就会一直执行


Linux调试器gdb

        程序的发布方式有两种,分别是debug和release。Linux下gcc和g++编译出来的二进制可执行程序默认是release的,想要变成debug模式就要加-g选项。

之后就可以进入gdb调试界面了。

        gdb会记录最近一条命令,如果还想使用这个命令,可以直接使用回车。接下来就开始介绍需要使用的命令。

r/run:开始调试,类似于vs下的f5,如果没有设置断点就直接结束
b(break)+行号:在这一行打断点
i(info)+b(breakpoint):查看当前所有断点
d(delete)+断点编号:删掉这一行的断点
n(next):逐过程,类似f10
s(step):逐语句,类似f11
p(print):打印表达式的值
bt(breaktrace):查看各级函数调用及参数,相当于查看调用堆栈
finish:执行到当前函数返回
display+变量名:跟踪查看一个变量,每次停下都显示它的值
undisplay+常显示编号:取消常显示
until+行号:跳转至该行
c(continue):从当前位置开始运行到下一个断点处
disable+断点编号:禁用断点
enable+断点编号:启用断点
q(quit):退出gdb

这些就是常用的命令,熟能生巧,多多练习才可以熟练的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/394696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Home Assistant 接入小米空气净化器

一、在HACS中安装Xiaomi Miot Auto 二、Xiaomi Miot Auto配置基础信息(需要用米家APP加入该设备) 1、选择局域网集成 2、配置小米空气净化器设备基础信息 ip为小米空气净化器设备IP(可在米家app中设备详情中查看也可在Get.token中查看) Token可以使用Get…

Arduino的PWM应用:舵机控制

目录 概述 1 认识舵机 1.1 舵机分类 1.2 舵机结构 1.3 舵机工作原理 1.4 舵机控制原理 1.5 舵机工作参数介绍 1.5.1 基本参数 1.5.2 舵机扭矩 2 系统硬件 2.1 硬件模块介绍 2.1.1 SG90 9G 360舵机 2.1.2 SG90 9G 180舵机 2.1.3 Arduino UNO 主板 2.2 整体结构…

19. 【Linux教程】nano 编辑器

前面小节介绍了如何使用 vim 编辑器,相比于 vim 编辑器,nano 编辑器就比较简单了。nano 是 UNIX 系统中的一个文本编辑器,大部分 Linux 发行版本默认都安装了 nano 文本编辑器。 和 vim 编辑器相比,nano 编辑器就没有那么强大&am…

Unix I/O 模型及Java I/O 模型详解

在Unix Socket的输入操作中,可以将其分为以下几个阶段: 等待数据就绪(内核空间): 在这个阶段,应用程序通过调用阻塞式的读取函数(如recv)或非阻塞式的读取函数(如recv、recvfrom)等待…

Opencv实战(1)读取与图像操作

Opencv 文章目录 Opencv一、读取图片1.imshow2.namedWindow3.imshow4.效果图 二、像素操作(1).访问像素1. at()2.Mat_ (2).遍历像素1.指针遍历2.迭代器遍历 (3).threshold(4).通道分离1.split2.merge (5)Gamma矫正 三、深浅拷贝 一、读取图片 1.imshow Mat imread(const stri…

数据库所在服务器磁盘满了怎么办?

大家好,我是G探险者。 给大家拜个晚年哈,节后上班第一天,打开电脑,发现数据库服务器连不上了。 幸亏,节后第一天上班的人不太多,领导还没来,我一番鼓捣解决了这个问题。 所以做个总结&#xff0…

面试redis篇-02缓存穿透

原理 例: 一个get请求:api/news/getById/1 缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库 解决方案一 缓存空数据,查询返回的数据为空,仍把…

Visual Studio Code安装Oracle SQL Developer插件

Visual Studio Code,简称VS Code,是最流行的IDE之一。SQL Developer作为面向 Oracle 数据库专业人员的查询、开发和管理工具,现已可作为插件(Extension)在VS Code中安装。无需安装 Java, .NET, 和Oracle Client 。 数…

多线程——

一、为什么要有多线程? 1、线程与进程 进程:进程是程序的基本执行实体 举例:在任务管理器中,一个软件运行之后,它就是一个进程 线程:(简单理解,线程就说应用软件中互相独立&…

Positive SSL 证书介绍

Positive SSL 是一种受欢迎的 SSL 证书,提供了卓越的安全性、性价比和品牌信任。以下是对 Positive SSL 在这些方面的简要介绍: 1. 安全性: Positive SSL 证书采用强大的加密技术,确保网站和用户之间的数据传输是安全的。它使用…

PyCharm 取消所有断点

PyCharm 取消所有断点 1. Run -> View Breakpoints...2. Python Line Breakpoint3. Remove - DoneReferences 1. Run -> View Breakpoints… 2. Python Line Breakpoint ​​​ 3. Remove - Done References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

spring boot自动装配及自动装配条件判断

第一步需要在pom.xml文件指定需要导入的坐标 要是没有自动提示需要检查maven有没有 实现代码 /*springboot第三方自动配置实现方法 * 什么是自动配置 自动配置就是springboot启动自动加载的类不需要在手动的控制反转自动的加入bean中 * * *//*第一种方案包扫描 不推荐因为繁琐…

第三篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:pyttsx3实现语音助手经典案例

传奇开心果短博文系列 系列短博文目录Python的文本和语音相互转换库技术点案例示例系列 短博文目录一、项目背景和目标二、雏形示例代码三、扩展思路介绍四、与其他库和API集成示例代码五、自定义语音示例代码六、多语言支持示例代码七、语音控制应用程序示例代码八、文本转语音…

WouoUI-PageVersion 一个用于快速构建具有丝滑OLED_UI动画的项目

WouoUI-PageVersion 写在前面 简介&致谢 Air001的TestUI例子的b站的演示视频 Air001的LittleClock例子的b站演示视频: https://www.bilibili.com/video/BV1J6421g7H1/ Stm32的TestUI例子的b站演示视频: https://www.bilibili.com/video/BV1mS421P7CZ/ 所有演示的工程文…

黑马程序员微信小程序学习总结9.插槽(slot)、父子组件中的通信的3种方式和自定义组件behaviors

目录 自定义组件中:插槽(slot)自定义组件中:父子组件中的通信的3种方式属性绑定(总结7讲过)事件绑定(子向父传参)获取组件实例 自定义组件behaviors同名字段的覆盖和组合规则&#x…

Kotlin基础——泛型

泛型类型参数 编译器一般可以推导出类型实参 若创建空的list&#xff0c;则需要显示指定类型实参&#xff0c;可以用如下两种方式 val name: MutableList<String> mutableListOf()val name2 mutableListOf<String>()泛型函数 public fun <T> List<T&…

宝塔安装MySQL、设置MySQL密码、设置navicat连接

1、登录宝塔面板进行安装 2、设置MySQL连接密码 3、安装好了设置navicat连接 登录MySQL [roothecs-394544 ~]# mysql -uroot -p Enter password: 切换到MySQL数据 mysql> use mysql Database changed mysql> 查询用户信息 mysql> select host,user from user; ---…

生信学院|02月23日《ECAD数据到MCAD模型》

课程主题&#xff1a;ECAD数据到MCAD模型 课程时间&#xff1a;2024年02月23日 14:00-14:30 主讲人&#xff1a;陈冬冬 生信科技 售后服务工程师 CircuitWorks概述CircuitWorks工具栏&#xff1b;零部件库和属性信息&#xff1b;对ECAD数据的基本操作&#xff1b;将装配体输…

绝地求生:pubg全年活动整理

2023年整理&#xff0c;2024展望。2023年1月是4神兽&#xff0c;24年2月是西游&#xff0c;25年1月呢&#xff1f; 2023新3月4神兽结束后是AUG黑箱和6周年。 2024年3月也会出成长型武器黑箱和7周年。 4月&#xff1a;新通行证、战队联名、服装套装。 5月&#xff1a;是一些套装…

学习Android的第十六天

目录 Android 自定义 Adapter Adapter 接口 SpinnerAdapter ListAdapter BaseAdapter 自定义 BaseAdapter 参考文档 Android ListView 列表控件 ListView 的属性和方法 表头表尾分割线的设置 列表从底部开始显示 android:stackFromBottom 设置点击颜色 cacheColorH…
最新文章