Linux开发工具使用

一、Linux软件包管理器 yum

软件包和软件包管理器, 就好比 "App" 和 "应用商店" ,我们现在要安装的yum就是相当于在我们的Linux终端安装一个"应用商店"。
但使用yum时,我们一定要保证主机(虚拟机)网络畅通!这点也非常好理解,因为在日常操作中我们的手机进入应用商店也是必须要联网的。
我们可以通过 ping 指令检验网络的速度:

ping [网址]

我们这里以www.csdn.com为例:

1.搜索软件

在软件商城里下载软件我们一定要进行相关的搜索对不对?我们现在来看看使用yum如何进行相关软件的搜索:

yum list | grep [软件名]

[| grep]是以列表的形式列出,[软件名]可以是你想要的软件全名或者部分名。

这里以 yum list | grep nb 来演示一下:

2.下载软件

我们想来下载一下软件,我们输入一下 yum install nb ,现在我们来看一下操作系统给我们的提示
注意到最后一行,需要我们是 root 才可以下载软件(软件需要下载到root用户目录下的某个文件,然后拷贝到系统中),而之前我们又学过一个指令,让我们能直接行使 root 的权力而不切换到 root 用户—— sudo ,下面我们来看看完整指令:

sudo yum install [软件名]

 但是当我们执行sudo语句时,可能会产生以下的报错,这是因为系统检测到我们当前用户并没有在 sudoer 这个文件中配置(好比我访问你的私有成员但是我不是友元函数),这个问题我们在上一篇博客中也讲过,或者可以直接跳转到本篇博客的 vim 中会教大家配置。

3.卸载软件

卸载软件和下载软件其实都是差不多的,我们还是要以root的身份卸载。

sudo yum remove [软件名]

执行 remove 时,系统还会询问是否删除[yes/No]:

我们还有办法让系统不再询问:sudo yum -y remove [软件名]
其中,-y 就是直接回答了yes

4.实践一下

如果当前用户没有在sudoer文件中,可以直接用root登录,给大家介绍一个好玩的软件:
sudo yum install sl
下载好后我们输入sl运行,就会有一辆小火车从屏幕前走过。

二、Linux编辑器 vim

我们在windows下编译有VS,而我们之前在Linux下只是学了一个记事本Nano,不禁好奇Linux下没有什么更高级的语言编辑器了吗?当然有,我们先来学习一下vim

1.认识vim

vim不只是简单的指令,我们先要来学习一下什么是vim呢?
vim是一款多模式的编辑器,但是我们只需要学习它的三个模式就好了:

命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入[插入模式]下,或者进入[末行模式]
插入模式:只有在[插入模式]下,才可以做文字输入,按[ESC]键可回到命令行模式。
末行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,[shift+:]即可进入该模式。

2.vim的基本操作

进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:

vim test.c

当我们用vim打开一个文件时,
1.首先进入的是[命令模式],我们需要手动输入[i]进入[插入模式]。
2.最后编辑完文本按[Esc]就可以回到命令模式,再按[shift+;]可以进入[底行模式](此时光标也是在最后一行)。
3.再输入wq(保存并退出)或q!(强制退出,某些时候wq不管用时可用)即可退出文件。、

3.vim正常模式命令集

我们再来多讲一些批量化注释和批量去注释化的操作:

批量化注释:

批量化去注释:

4.vim配置sudoers

5.vim插件

在VS中我们有自动纠错或者自动补齐等功能,但是我们的vim编辑器就好像最原始的Dec-C++一样,什么功能都没有,这里就要用到我们的一些插件啦,类似游戏里的mod一样,这里我们提供一个链接,但是只能centos7的用户使用,也可以自己去网上搜罗顺手的插件。

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o./install.sh && bash ./install.sh

三、Linux调试器 gbd

程序的发布方式有两种,我们在使用VS时也可以看到,分为release版本和debug版本,其中release版本一般是发行版本,而debug版本是程序员进行程序编写测试时的版本。
在Linux中,gcc/g++编译出的自动是release版本,如果想让其生成debug版本,需要加-g。

现在我们要聊的就是Linux下进行程序调试的操作,也就是VS中的F10或F11。

进入调试:gdb binFile (binFile即此次要调试的文件名)
(gdb都支持简写,以下命令可以写全也可以写首字母)

退出调试:[ctrl+d]或[quit]调试命令

list/l [行号]:显示binFile源代码
(会记录上次显示的末尾,若继续使用则会接着上次的末尾继续往下列,每次列10行)。
list/l [函数名]:列出某个函数的源代码。
r / run:运行程序。
n / next:单条执行(类似于F11)。
s / step:进入函数调用。
break / b 行号:在某一行设置断点(类似于F9)。
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
break [函数名]:在某个函数开头设置断点。
info break :查看断点信息。
finish:执行到当前函数返回,然后停下来等待命令。
print / p:打印表达式的值,通过表达式可以修改变量的值或者调用函数。
p 变量:打印变量值。
set var:修改变量的值
continue / c:从当前位置开始连续而非单步执行程序
run / r:从开始连续而非单步执行程序
info / i breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace / bt:查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb

四、Linux项目自动化构建工具 make/Makefile

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率,其中make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

1.简单认识makefile

首先我们先来见一下什么是makefile:
然后我们再随便创建一个C语言文件:

我们在makefile中编写如下代码:

然后我们退出以后直接使用命令[make],我们发现系统直接帮我们执行了代码的编译,并形成了名为mytest的可执行文件:

然后我们再执行[make clean],我们发现,我们刚才生成的可执行程序被删除了:
有了这些初步认识,我想我们对make和makefile也有了一定的了解,下面我们来讲讲它的结构。

2.makefile基本结构

我把makefile文件中分了模块,我们现在逐个来说明。

依赖关系:依赖方法要对应的若干文件,mytest:test.c

依赖方法:必须以[Tab]开头(不能是4个空格)对依赖关系进行的相关操作,
                   gcc -o mytest test.c

目标文件:通过依赖方法生成的文件名称,mytest

依赖关系列表:test.c,可以为空,若多个文件可用空格分隔(test1.c test2.c)

.PHONY:其后面的内容会被强制执行

一些特殊符号的含义:@指代目标文件,^指代依赖关系列表,$可以理解为读取符号

类似于宏操作:bin目标文件,src依赖关系列表,可直接替换

3.makefile原理

初识makefile原理

1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2. 如果找到,它会找文件中的第一个目标文件,在上面的例子中,他会找到“mytest”这个文件,并把这个文件作为最终的目标文件。
3.makefile会自上而下根据依赖关系执行。

4.如果有多条依赖关系,makefile会依次执行每条关系,如图(类似递归调用)
这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

makefile对最新的可执行程序默认不会再重新生成:
为什么会这样?提高编译效率。

那么makefile如何得知这个程序已经被编译过了呢?

makefile会对比可执行文件的最近修改时间和源文件最近的修改时间。

makefile是不是很聪明呢?

——The End——

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

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

相关文章

分类问题经典算法 | 二分类问题 | Logistic回归:公式推导

目录 一. Logistic回归的思想1. 分类任务思想2. Logistic回归思想 二. Logistic回归算法:线性可分推导 一. Logistic回归的思想 1. 分类任务思想 分类问题通常可以分为二分类,多分类任务;而对于不同的分类任务,训练的主要目标是…

001-CSS-水平垂直居中布局

水平垂直居中布局 方案一:弹性盒子布局方案二:绝对定位 transform方案三:margin 绝对定位,四个方向为零方案四:绝对定位 margin方案五:绝对定位 calc 方案一:弹性盒子布局 💡 T…

【Python 常用脚本及命令系列 6 -- python 读取C文件中数组中的数据】

文章目录 python 读取C文件中数组中的数据 python 读取C文件中数组中的数据 例如可以使用 python 将 test.c 文件中数组: unsigned short image[] { 0x125, 0x123, 0x88, 0x99 }中的所有数据生成到一个列表 list_num 中,并将其打印出来。 …

RabbitMQ(三):AMQP协议

目录 1 AMQP协议1.1 AMQP协议介绍1、AMQP是什么2、消息代理中间件的职责 1.2 AMQP 0-9-1模型1、AMQP的工作过程2、交换器和交换器类型3、队列队列属性队列名称队列持久化 1.3 几个概念1、绑定2、消费者3、消息确认4、预取消息5、消息属性和有效载荷(消息主体&#x…

HTML5:七天学会基础动画网页7

CSS3高级特效 2D转换方法 移动:translate() 旋转:rotate() 缩放:scale() 倾斜:skew() 属性:transform 作用:对元素进行移动,旋转,缩放,倾斜。 2D移动 设定元素从当前位置移动到给定位置(x,y) 方法 说明 translate(x,y) 2D转换 沿X轴和Y轴移…

2024 极术通讯-云+大模型的2024格局

导读:极术社区推出极术通讯,引入行业媒体和技术社区、咨询机构优质内容,定期分享产业技术趋势与市场应用热点。 芯方向 FunASR 语音大模型在 Arm Neoverse 平台上的优化实践 FunASR 是阿里巴巴达摩院开发的开源的基于 Paraformer 的大模型语…

String字符串的常见方法总结

一、获取字符串的长度:str.length() String str "Hello World!";int strLength str.length(); System.out.println(strLength);//输出:12 二、字符串的比较:str.equals() //比较两个字符串是否相等String str1 "Chinese";Stri…

概率基础——极大似然估计

概率基础——极大似然估计 引言 极大似然估计(Maximum Likelihood Estimation,简称MLE)是统计学中最常用的参数估计方法之一,它通过最大化样本的似然函数来估计参数值,以使得样本出现的概率最大化。极大似然估计在各…

学习JAVA的第十三天(基础)

目录 API之Arrays 将数组变成字符串 二分查找法查找元素 拷贝数组 填充数组 排序数组 Lambda表达式 集合的进阶 单列集合 体系结构 Collection API之Arrays 操作数组的工具类 将数组变成字符串 //将数组变成字符串char[] arr {a,b,c,d,e};System.out.println(Arra…

Installing Git (安装 Git)

Installing Git [安装 Git] 1. Installing Git1.1. Description1.2. Installing on Linux (在 Linux 上安装)1.3. Installing on macOS (在 macOS 上安装)1.4. Installing on Windows (在 Windows 上安装)1.5. Installing from Source (从源代码安装) 2. sudo apt-get install …

Python常用验证码标注和识别(需求分析和实现思路)

目录 一、需求分析 图像验证码识别: 文本验证码识别: 二、实现思路 三、案例与代码 四、总结与展望 在当今的数字时代,验证码(CAPTCHA)作为一种安全机制,广泛应用于网站和应用程序中,以防…

Method Not Allowed (GET): /user/logout/

在使用 DJango 框架使用框架默认的【登出】视图时&#xff0c;发现报错如下&#xff1a; Method Not Allowed (GET): /user/logout/ Method Not Allowed: /user/logout/ 退出部分的代码原先如下&#xff08;登出部分见第6行&#xff09;&#xff1a; <p><a href"…

PySide6实现socket通信程序

目录 一:实现思路 二:实现代码 三:完整代码和界面 一:实现思路 在PySide6中,服务端可以使用QTcpServer类来实现一个Socket服务器端,这个类可以便捷地创建TCP服务器。在客户端可以使用QTcpSocket实现Socket通信,并使用QTextEdit来显示消息。

MySQL 8.0.35 企业版安装和启用TDE插件keyring_encrypted_file

本文主要记录MySQL企业版TDE插件keyring_encrypted_file的安装和使用。 TDE说明 TDE( Transparent Data Encryption,透明数据加密) 指的是无需修改应用就可以实现数据的加解密&#xff0c;在数据写磁盘的时候加密&#xff0c;读的时候自动解密。加密后其他人即使能够访问数据库…

Unity 摄像机的深度切换与摄像机画面投影

摄像机可选&#xff1a;透视、正交 正交类似投影&#xff0c;1比1 透视类似人眼&#xff0c;近大远小 摄像机投影 在项目中新建&#xff1a;渲染器纹理 将新建纹理拖动到相机的目标纹理中 新建一个平面&#xff0c;将新建材质组件放到平面中即可。 相机深度切换 使用代…

93. 通用防重幂等设计

文章目录 一、防重与幂等的区别二、幂等性的应用场景三、幂等性与防重关系四、处理流程 一、防重与幂等的区别 防重与幂等是在 Web 应用程序和分布式系统中重要而又非常常见的问题。 防重 防重是指在多次提交同样的请求过程中&#xff0c;系统会检测和消除重复的数据&#xf…

每天一个数据分析题(一百八十三)

以下哪一项不是逻辑回归模型的特点&#xff1f; A. 因变量通常为二分类型变量 B. 自变量可以是分类型或连续型变量 C. 适用于处理连续自变量与二分类型因变量之间的关系 D. 通过logit转换&#xff0c;输出结果为实数域内的数值 题目来源于CDA模拟题库 点击此处获取答案

【动态规划】45. 跳跃游戏 II

45. 跳跃游戏 II 解题思路 int[] memo;&#xff1a;定义一个数组memo&#xff0c;用来作为备忘录&#xff0c;存储从每个索引位置跳到数组末尾所需的最小跳跃次数。 Arrays.fill(memo, n);&#xff1a;在开始计算之前&#xff0c;先将memo数组的所有元素初始化为n。这里的n是…

C语言中的宏函数与宏定义

C语言中的宏函数与宏定义 从开始写C语言到生成执行程序的流程大致如下&#xff1a; 预处理工作是系统引用预处理程序对源程序中的预处理部分做处理&#xff0c;而预处理部分是指以“#”开头的、放在函数之外的、一般放在源文件的前面的预处理命令&#xff0c;如&#xff1a;包…

流密码之线性反馈移位寄存器,以习题:n=4的LFSR,输出序列满足ki-4+ki-3+ki=0,初始状态为1000,求最终输出序列 为例

文章重点 关于线性反馈移位寄存器的一些知识点本期就不详细介绍了,本期重点在于讲解习题,以使大家能顺利应对平时作业及期末考试。 习题 习题1如下:n=4的LFSR。输出序列满足ki-4+ki-3+ki=0。 初始状态为1000。求不同时刻的状态及最终输出序列。 分析思路 思路:我们知道…