yo!这里是Linux基础开发工具介绍

news2024/11/23 22:41:39

目录

前言

基础开发工具

yum

vim

1.基本介绍

2.基本操作

3.正常模式常用命令

4.底行模式常用命令

gcc/g++

gdb

1.基本介绍

2.常用操作

make/Makefile

1.背景

2.介绍

3.使用

git 

1.介绍

2.操作 

进度条程序简单实现

后记


前言

        在学完初步的基础指令及权限控制之后,在Linux环境下写一个c/c++程序才是重中之重,这里就要介绍到Linux的基础开发工具了,包括软件包管理器yum、编辑器vim、编译器gcc/g++、调试器gdb等等,在Linux前期的学习过程中,这些开发工具的使用还是比较频繁的,或者是面试官们会问到地方,虽然用起来很不方便,所以后面进一步的实际开发中会被平替掉,但还是要了解一下,知识点简单粗暴,并不复杂,在文章的最后,也会通过一个列子将这些开发工具综合练习一下。

基础开发工具

  • yum

        Yum(Yellowdog Updater, Modified)是一个开源包管理系统,可以自动在您的系统中下载和安装软件包,并管理依赖关系。与其他包管理系统相比,Yum的优势在于它可以自动处理依赖关系的安装。这意味着它可以自动下载并安装所需的库和其他软件包,以满足您需要安装的软件包的所有依赖关系。Yum还可以自动升级已安装的软件包,以确保您的系统始终是最新的。    

①yum list installed :列出已安装的软件包

②yum list | grep "关键字":列出存在"关键字"的软件包

③yum install package :安装软件包

④yum update package :更新软件包

⑤yum remove package :卸载软件包

eg:

注意:从上述例子可以看出,安装软件和删除软件需要向系统目录中写入内容,所以需要root身份或者sudo指令 。

  • vim

1.基本介绍

        Vim是一款基于Vi编辑器的文本编辑器,是Linux和Unix系统上最受欢迎的文本编辑器之一。它具有强大的功能和丰富的插件生态系统,也非常适合程序员和系统管理员使用。

        Vim具有很多特点,其中最重要的是其模式。Vim有三种模式:命令模式(也叫正常/普通模式)、插入模式和底行(末行)模式。在命令模式下,用户可以执行各种命令,如控制光标的移动来跳转文本,删除文本,查找和替换,在插入模式下,用户可以像在常规文本编辑器中一样输入文本。在底行模式下,用户可以保存、退出文件,也可以查找关键字、列出行号等操作。

2.基本操作

1)进入vim:vim 文件名

注意:一开始进入vim默认是命令模式

eg:

2)退出vim:底行模式下输入

【:w】保存当前文件

【:wq】保存并退出文件

【:q!】不保存强制退出

eg:

3)模式切换

a:append 在光标后面追加内容;

i:insert 在光标前面插入内容;

o:other 另起一行输入。

3.正常模式常用命令

1)移动光标

vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格,

「 $ 」:移动到光标所在行的“行尾”

「^」:移动到光标所在行的“行首”

「w」:光标跳到下个字的开头,即以单词为单位右移

「e」:光标跳到下个字的字尾

「b」:光标回到上个字的开头,即以单词为单位左移

「#l」:光标移到该行的第#个位置,如:5l,56l

[gg]:进入到文本开始

[G]:进入文本末端,eg:50G是移动到第50行

「ctrl」+「b」:屏幕往“后”移动一页

「ctrl」+「f」:屏幕往“前”移动一页

「ctrl」+「u」:屏幕往“后”移动半页

「ctrl」+「d」:屏幕往“前”移动半页

注意:加粗部分为本人认为常用的命令,下同

2)删除文字

「x」:每按一次,删除光标所在位置的一个字符

「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符

「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符

「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符

「dd」:删除光标所在行,相当于剪切,可粘贴

「#dd」:从光标所在行开始删除#行

3)复制

「yw」:将光标所在之处到字尾的字符复制到缓冲区中。

「#yw」:复制#个字到缓冲区

「yy」:复制光标所在行到缓冲区。

「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。

「p」:将缓冲区内的字符贴到光标所在位置,相当于粘贴

注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

4)替换

「r」:替换光标所在处的字符

「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

「~」:大小写切换

5)撤销

「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回 复。

「ctrl + r」: 撤销的恢复

6)更改

「cw」:更改光标所在处的字到字尾处

「c#w」:例如,「c3w」表示更改3个字

7)跳至指定行

「ctrl」+「g」列出光标所在行的行号。

「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

4.底行模式常用命令

「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。

「set nonu」:取消行号

「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n」会往后寻找到您要的关键字为止。

「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。

注意:两者区别在于“/”是从上向下找,“?”是从下向上找。

「vs 文件名」:分屏,使用「ctrl+w+w」切屏

「wq」:退出分屏

「!指令」:不退出vim情况下执行指令

  • gcc/g++

        gcc/g++是GNU编译器集合的一部分,gcc针对与C语言,g++针对于c++语言,编译器集合提供了一个完整的工具套件,可以将源代码转换为机器语言,让程序可以在计算机上运行。它包含了一些工具,例如预处理器、编译器、汇编器、链接器等,可以根据需要将这些工具组合使用,进行一系列的编译操作,得到可执行文件或共享库等目标文件。(后仅讲解gcc,g++情况一致)

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

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

        gcc可一步将.c文件直接生成可执行文件,见下方列子,也可以使用相关选项在四个步骤中停止,生成对应文件。

eg:

gcc hello.c -o hello
//或者
gcc -o hello hello.c

1)预处理

功能:宏替换、文件包含展开、条件编译、去注释等

选项:

“-E”:该选项的作用是让 gcc 在预处理结束后停止编译过程。

“-o”:是指目标文件,

注意:

“.i”文件为已经过预处理的C原始程序。

eg:

gcc –E hello.c –o hello.i

2)编译

功能:首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。

选项:

“-S”:只进行编译而不进行汇编,在编译完停止,生成汇编。

eg:

 gcc –S hello.i –o hello.s

3)汇编

功能:把编译阶段生成的“.s”文件转成目标文件

选项:

“-c”:汇编完停止,生成“.o”的二进制目标代码

eg:

gcc –c hello.s –o hello.o

4)链接

功能:生成可执行文件

eg:

gcc hello.o –o hello
  • gdb

1.基本介绍

        gdb是调试器,用于C、C++、其他一些编程语言的调试工具。它是一个功能强大的调试工具,可以帮助程序员分析和调试程序,以便更快地发现和解决软件缺陷。gdb可以与多种编程语言和操作系统配合使用,并提供广泛的调试功能。

2.常用操作

        在Linux环境下gcc/g++出来的二进制程序默认是release模式,是发布模式,故无法调试,如图一,只有debug模式下才可以调试,所以要在gcc命令下加上-g选项,如图二。

1)进入gdb:gdb 文件名

2)退出:ctrl+d 或 quit

3)调试命令(括号内为简写)

list(l) 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

注:l 0:从头显示

list(l) 函数名:列出某个函数的源代码。

run(r):运行程序。

注:若有断点,就断点处停止

next(n):单条执行。

step(s):进入函数调用

break(b) 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点

info break :查看断点信息。

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

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

p 变量:打印变量值。

set var:修改变量的值

注:在跟踪查看某变量时,可修改变量值定向查看

continue(c):从当前位置开始连续而非单步执行程序

注:跳至下一个断点处,若后无断电则跳至结束

delete breakpoints:删除所有断点

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

disable breakpoints n:禁用序号为n的断点

enable breakpoints n:启用序号为n的断点

info(i) breakpoints:参看当前设置了哪些断点

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

undisplay n:取消对先前设置的序号为n的变量的跟踪

until X行号:跳至X行

breaktrace(或bt):查看各级函数调用及参数

info(i) locals:查看当前栈帧局部变量的值

eg:

 

  • make/Makefile

1.背景

        Makefile是项目自动化构建工具,从侧面说明了一个人是否具备完成大型工程的能力,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

        make是一个命令工具,是一个解释Makefile中指令的命令工具,make是一条命令,Makefile是一个文件,两个搭配使用,完成项目自动化构建。

        Makefile还可以帮助进行增量编译和自动化测试。如果一个文件已经被编译过了,而且没有被修改,那么Makefile就可以跳过这个文件的编译过程,从而节省大量的时间,它的灵活性和可扩展性使得它成为了软件开发过程中不可或缺的一部分。

2.介绍

        太多的概念比不过一个例子更好理解,下面用一个例子来说明使用方法,比如:

有某工程test_os_8_1,如图:

 里面是我们写的c文件test.c、头文件Add.h以及Add.c文件,如下图:

        针对于Makefile文件,如图:

依赖关系:

        指的是两个或多个事物之间的互相依存或相互影响的关系。在计算机科学中,依赖关系通常用于描述程序中各个模块之间的相互依赖。一个模块可能依赖于其他模块或库文件中的函数或类,这些依赖关系可以用来确定编译或执行程序的顺序,以确保程序能够正确地工作。

依赖方法:

        指一个方法依赖于另一个方法的结果。在编程中,我们经常会使用依赖方法的思想来构建复杂的程序逻辑。

.PHONY:

        是一种关键字,表明clean是伪目标,意思是总是被执行的,因为没有被第一个目标文件直接或间接关联,所以它后面所定义的命令将不会被自动执行,不过,我们可以使用指令“make clean”显式执行,以此来清除所有的目标文件,以便重编译。 一般像这种clean的目标文件,我们.PHONY 修饰,表示总是被执行。

3.使用

1)make指令

 原理:

        ①首先找到文件中的第一个目标文件,如mytest文件,并把这个文件作为最终的目标文件,就会执行后面所定义的命令来生成mytest这个文件。

        ②如果mytest所依赖的test.o文件、Add.o文件在当前目录中不存在,那么make会在当前文件中找目标为test.o文件的依赖关系,根据依赖方法生成test.o文件和Add.o文件。

        ③以此类推,一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

注意:

        在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错, 而对于所定义的命令的错误,或是编译不成功,make根本不管,只管文件的依赖性,即如果在make找了依赖关系之后,冒号后面的文件还是不在,那么直接退出。

2)make clean (清理工作)

  • git 

1.介绍

        Git是一个为了管理Linux内核开发而创建的分布式版本控制系统。它可以帮助开发者在不同的开发环境中协同工作,协助版本控制、代码合并等功能,支持非线性开发、分支处理等强大特性。

Git的主要优点:

1. 分布式版本控制系统,仓库拷贝自由。
2. 速度快,耗费资源少。
3. 全局版本号,标记版本历史。
4. 强大的分支管理,支持多分支开发。
5. 数据一致性高,内容的完整性和可追溯性强。

2.操作 

        目前,在学习开发的过程中,不太需要将git所有功能全部了解,只需要学会将自己的代码练习git到第三方平台上(如gitee、github),将平时的学习过程记录在上面即可,步骤如下。

准备一:Linux下安装git软件包

yum install git

准备二:克隆远程仓库链接

git clone 链接

注意:本平台上的gitee或github托管代码教学很多很详细,搜一下,下面针对Linux环境下如何提交代码。

1)git add [文件名]

eg:

2)git commit -m "提交日志"

eg:

3)git push

eg:

补充:

①git log:查看提交记录

②git pull:同步仓库,在提交过程中出现报错,无脑git pull

③.gitignore文件:相当于黑名单,里面记录的文件后缀的文件在上传过程中会被忽略。

④git rm 文件 + 上面的三部曲:删除远程仓库的文件

进度条程序简单实现

        在Linux环境下实现一个简单进度条程序,先写好Makefile文件,再使用vim编辑器打开c文件进行编写程序,然后使用gcc编译器、gdb调试器调试编译,程序运行正确之后将此工程git到自己的第三方平台上,使用基本的开发工具开发出一个小型工程,这就是过程。

代码:

int main()
{
    int i=0;
    char arr[NUM];
    memset(arr,0,sizeof(arr));
    while(i<NUM)
    {
        printf("加载中:[%-100s][%i%%]\r",arr,i);   //%%是转义字符,表示%
        fflush(stdout);
        usleep(30000);  //sleep是秒为单位,usleep是微秒为单位
        if(i==0)
        {
             arr[i]='|';
        }
        else{
            arr[i-1]='-';
            arr[i]='|';
        }
        i++;
    }
    printf("\n");
    return 0;
}

 运行:

后记

        以上就是Linux前期学习过程中所使用到的开发工具介绍,本身很好理解,但是细节很多,特别是编辑器vim、调试器gdb,需要记住的指令很多,但本文没有面面俱到,只列举了大部分常用的部分,先熟悉这些,其他的慢慢拓展,加油,拜拜!


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

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

相关文章

Spring Boot进阶(60):5种判断线程池任务是否全部完成的方案 | 实用技巧分享!

1. 前言&#x1f525; 多线程编程在现代软件开发中非常常见且重要&#xff0c;而线程池是多线程编程的常用技术。在使用线程池时&#xff0c;通常需要判断线程池中的任务是否全部完成&#xff0c;以便决定程序继续执行的下一步操作。本文将介绍5种判断线程池任务是否全部完成的…

MySQL项目迁移华为GaussDB PG模式指南

文章目录 0. 前言1. 数据库模式选择&#xff08;B/PG&#xff09;2.驱动选择2.1. 使用postgresql驱动2.1. 使用opengaussjdbc驱动 3. 其他考虑因素4. PG模式4.1 MySQL和OpenGauss不兼容的语法处理建议4.2 语法差异 6. 高斯数据库 PG模式JDBC 使用示例验证6. 参考资料 本章节主要…

Java的正则

正则表达式 一个正则表达式&#xff0c;就是用某种模式去匹配字符串的一个公式 正则表达式不是只有java才有&#xff0c;实际上很多编程语言都支持正则表达式进行字符串操作 正则表达式语法 限定选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 元字符(Metacharact…

建议收藏:进销存系统和erp的区别是什么

阅读本文&#xff0c;您可以了解&#xff1a;1、进销存系统是什么&#xff1b;2、erp是什么&#xff1b;3、进销存系统和erp的区别 一、进销存系统是什么 进销存系统&#xff08;Inventory Management System&#xff09;是一种用于跟踪、管理和优化企业库存流动的软件工具或系…

springboot服务端接口外网远程调试,并实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

汽车电子 -- 笛卡尔坐标系和极坐标系

1.笛卡尔直角坐标系 相较于原点的两条数轴&#xff0c;构成了平面放射坐标系。如两条数轴上的度量单位相等&#xff0c;则称为放射坐标系为笛卡尔坐标系。两条数轴互相垂直的笛卡尔坐标系&#xff0c;称为笛卡尔直角坐标系。 2.极坐标 极坐标是指在平面内由极点、极轴和极径…

重大变动!亚马逊改变佣金规则

1.亚马逊将调整佣金规则 近日&#xff0c;亚马逊在发给卖家的一则邮件中&#xff0c;表示将调整佣金计算方式。根据收到邮件的卖家爆料&#xff0c;该邮件显示&#xff1a;自2023年10月24日起&#xff0c;亚马逊将按照卖家提供的报价计算推荐费&#xff0c;而不是按照消费者支…

数据库访问性能优化

在基于数据库进行业务功能的开发时&#xff0c;如何保证数据库访问的性能是区分普通程序员和高级程序员的分水岭。这里系统的梳理下如何在程序员视角下实现数据库访问性能优化。 本文是面向程序员的数据库访问性能优化法则一文的精简版&#xff0c;有兴趣的同学可以参考下原文。…

【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 云原生利用Docker确保环境安全、部署的…

微信小程序开发教学系列(12)- 实战项目案例

十二、实战项目案例 本章将通过一个简单的实战项目案例来帮助读者巩固之前学习到的知识。我们将搭建一个名为“ToDoList”的微信小程序&#xff0c;实现一个简单的任务清单功能。 项目介绍 ToDoList是一个用于记录和管理任务的小程序。用户可以添加、编辑、完成和删除任务&a…

迅为RK3568开发板位置提取ROI

本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\06”目录下&#xff0c;如下图所示&#xff1a; 在 2.2 小节中学习了 imread()函数用来读取图像文件&#xff0c;以下面的代码为例读取到的信息会被保存到 img 变量中。 …

mybatis:拦截器Interceptor:

Mybatis执行概要图 可以从图中看出Mybatis可以被拦截的类型按先后顺序有以下四种&#xff1a; 1.Executor&#xff1a;拦截执行器的方法。 2.StatementHandler&#xff1a;拦截Sql语法构建的处理。 3.ParameterHandler&#xff1a;拦截参数的处理。 4.ResultHandler&#xff1a…

奥迪A6 C5空调制冷效果差维修(part 1)

一台2003年出厂的一汽奥迪A6 C5 2.8L轿车&#xff0c;装备BBG发动机及双区自动空调&#xff0c;行驶约159000公里。 该车空调制冷效果差。空调面板设定22度&#xff0c;用手感知出风口温度&#xff0c;凉&#xff0c;但不够凉。 压缩机离合器正常吸合、皮带盘正常运行。 该车…

第三讲,旋转向量和欧拉角

1.旋转向量 旋转矩阵来描述旋转&#xff0c;有了变换矩阵描述一个六自由度 的三维刚体运动&#xff0c;是不是已经足够了呢&#xff1f;但是&#xff0c;矩阵表示方式至少有以下几个缺点&#xff1a; SO(3) 的旋转矩阵有九个量&#xff0c;但一次旋转只有三个自由度。因此这种…

spring之swagger接口文档

ApiOperation(value"") 用在接口方法上 ApiParam(value"") 用在具体参数上 ApiModelProperty(value"") 解释属性

RBAC实现授权

RBAC分为两种方式&#xff1a; 基于角色的访问控制&#xff08;Role-Based Access Control&#xff09; 基于资源的访问控制&#xff08;Resource-Based Access Control&#xff09; 角色的访问控制&#xff08;Role-Based Access Control&#xff09;是按角色进行授权&…

算法 -汉诺塔,哈夫曼编码

有三个柱子,分别为 from、buffer、to。需要将 from 上的圆盘全部移动到 to 上,并且要保证小圆盘始终在大圆盘上。 这是一个经典的递归问题,分为三步求解: ① 将 n-1 个圆盘从 from -> buffer ② 将 1 个圆盘从 from -> to ③ 将 n-1 个圆盘从 buffer -> to 如果…

促进企业数字化转型,数据成为新的生产要素

企业围绕运营流程&#xff0c;打造数字经营能力&#xff0c;管理模式从经验驱动向数据驱动转变。现在的企业除了引进先进的设备同时还以数据流为牵引&#xff0c;实现对生产管理、质量管理等功能的深度分析&#xff0c;生产效率提升可达30%&#xff1b;还有智能算法实现智能图形…

【Java 中级】一文精通 Spring MVC - 数据验证(七)

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

安卓手机如何使用邮箱客户端收发邮件

安卓手机品牌较多&#xff0c;设置界面都不太相同&#xff0c;部分手机常见的如vivo、小米手机都是直接填写邮箱用户名和密码&#xff0c;软件自动设置&#xff0c;即可登录邮箱&#xff0c;其他安卓手机或者第三方安卓手机软件有时候需要手动设置&#xff0c;此处以安卓手机的…