yo!这里是Linux基础开发工具介绍
目录
前言
基础开发工具
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,需要记住的指令很多,但本文没有面面俱到,只列举了大部分常用的部分,先熟悉这些,其他的慢慢拓展,加油,拜拜!
相关文章:

yo!这里是Linux基础开发工具介绍
目录 前言 基础开发工具 yum vim 1.基本介绍 2.基本操作 3.正常模式常用命令 4.底行模式常用命令 gcc/g gdb 1.基本介绍 2.常用操作 make/Makefile 1.背景 2.介绍 3.使用 git 1.介绍 2.操作 进度条程序简单实现 后记 前言 在学完初步的基础指令及权限控…...

本地组策略编辑器找不到怎么解决?| 解决windows home 版本隐藏本地组策略编辑器的问题 | 简单的介绍本地组策略编辑器
一般的 Windows 非家庭系统中,本地组策略编辑器不会被隐藏,但在某些特定情况下,可能会受到限制或不可用。如果你无法访问本地组策略编辑器,并且认为应该可以访问,请确保你拥有管理员权限,并检查是否有任何系…...

将Spring boot 项目部署到tomcat服务艰难
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z X Y Z...
第十二章 ObjectScript - 命令
文章目录 第十二章 ObjectScript - 命令命令熟悉的命令用于多维数组的命令 第十二章 ObjectScript - 命令 命令 本节概述了在 ObjectScript 常用命令。其中包括与其他语言中的命令相似的命令,以及其他语言中没有等效项的其他命令。 命令名称不区分大小写…...
在 CentOS 7 / RHEL 7 上安装 OpenSSL 1.1.x
OpenSSL 是一个开源软件库,由用于实现传输层安全 (TLS) 和安全套接字层 (SSL) 协议以及其他加密功能(例如签名、加密、解密和验证)的工具和库组成。操作系统和许多应用程序使用 OpenSSL 通过互联网提供安全通信。 CentOS 7 / RHEL 7 操作系统…...

论文阅读_模型结构_LoRA
name_en: LoRA: Low-Rank Adaptation of Large Language Models name_ch: LORA:大语言模型的低阶自适应 paper_addr: http://arxiv.org/abs/2106.09685 date_read: 2023-08-17 date_publish: 2021-10-16 tags: [‘深度学习’,‘大模型’] author: Edward J. Hu cita…...
uniapp获取 pdf文件流 并展示
1、流数据 uni.request({ url: this.$config.apiUrl“/api/report/content/fill?codebv.mf.refund.pay.voucher&busiNo00201323051500148949”, header: { ‘content-type’: ‘application/json;charsetutf-8’, ‘X-App-Code’: ‘weixin’, ‘X-Source’: ‘program’,…...
Linux(进程间通信)
目录 一、通信概念 二、进程间通信机制 1、管道 1.1 匿名管道(Anonymous Pipe) 1.2 命名管道(Named Pipe) 2、信号量 2.1 概念 2.2 API详解 2.3 使用示例 3、消息队列 3.1 概念 3.2 API函数 3.3 应用代码 4、共享内…...
Go的Gorm数据库操作错误WHERE conditions required
这是我在写这个代码处出现的问题 result : db.Save(&emergency) 这个错误是由于在提交保存数据时,GORM 需要指定 WHERE 条件,确保能够正确执行数据库操作。要解决这个问题,可以尝试使用 Create 方法替换 Save 方法,同时将创…...

基于java swing和mysql实现的仓库商品管理系统(源码+数据库+运行指导视频)
一、项目简介 本项目是一套基于java swing和mysql实现的仓库商品管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经…...

6、css学习6(表格)
1、指定CSS表格边框,使用border属性。 2、表格双边框是因为th/td有各自独立的边框。 3、boder-collapse设置表格边框是否被折叠成一个单一的边框。 4、width和height属性定义表格的宽度和高度。 5、text-align属性设置水平对齐方式。 6、vertic-align属性设置垂…...

Ceph源码解析:PG peering
集群中的设备异常(异常OSD的添加删除操作),会导致PG的各个副本间出现数据的不一致现象,这时就需要进行数据的恢复,让所有的副本都达到一致的状态。 一、OSD的故障和处理办法: 1. OSD的故障种类: 故障A:一…...

解决jupyter notebook可以使用pytorch而Pycharm不能使用pytorch的问题
之前我是用的这个目录下的Python 开始更新目录 1、 2、 3、...
对建造者模式理解
当对象成员变量太多时,使用建造方法给变量赋值往往变得很臃肿,所以可以这样做 public class Something {private String a;private String b;private String c;private String d;private String e;public Something(Builder builder) {this.a builder.…...

回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现CSO-ELM布谷鸟算法优化极限学习机多输入单输出回归预测(多指标,多图)效果一览基本介…...
静态链接库和动态链接库的区别
C静态链接库(Static Linking)和动态链接库(Dynamic Linking)的主要区别在于代码的组织和加载方式。 静态链接库 在编译时将库的代码和应用程序的代码合并在一起,生成一个单独的可执行文件。执行文件独立包含所需的库…...
使用 python 源码搭建 conda 环境
今天需要使用 python 2.6.8 的环境,发现 conda 设置成清华源后,没有旧版本了。所以打算从官网上下载一份 python 进行安装, 结果发现,conda 不能直接安装离线包(也可能我没找到方法),经过一番尝…...
dart 学习之 异步操作
import package:dio/dio.dart;// 定义一个异步函数,用于获取 URL 的内容 Future<String> getUrl(String url) async {Dio dio Dio();Response response await dio.get(url);return response.data; }void main() async {// 在主函数中执行异步操作var conten…...

《Flink学习笔记》——第二章 Flink的安装和启动、以及应用开发和提交
介绍Flink的安装、启动以及如何进行Flink程序的开发,如何运行部署Flink程序等 2.1 Flink的安装和启动 本地安装指的是单机模式 0、前期准备 java8或者java11(官方推荐11)下载Flink安装包 https://flink.apache.org/zh/downloads/hadoop&a…...
网易新财报:游戏稳、有道进、云音乐正爬坡
今年以来,AI大模型的火热程度屡屡攀升,越来越多的企业都加入到了AI大模型的赛场中,纷纷下场布局。而在众多参与者中,互联网企业的身影更是频频浮现,比如,百度、阿里巴巴、腾讯等等。值得一提的是࿰…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...