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——

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

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

相关文章

【单调栈】Leetcode 739.每日温度

【单调栈】Leetcode 739.每日温度 解法:维护单调栈栈中存的是数组的索引 解法:维护单调栈栈中存的是数组的索引 栈中存的是数组的索引 当新的值比当前栈顶的大,那么就执行出栈-更新result数组-判断当新的值比当前栈顶的大?的循环…

C语言回顾学习

一、数据类型 1.常量 2.float浮点表示 3.字符型 4.char&#xff08;大小写&#xff09; #include <stdio.h> //根据数字输出字符--int值可以直接输出为char int main() {int value;while (1){scanf("%d",&value);if(value<65||value>122){printf(&…

Python的http模块requests

模块简介&#xff1a; requests 库是一个 python中比较有名的 http请求的库&#xff0c;能处理 get,post,put,delete 等 restful请求&#xff0c;能设置 header&#xff0c;cookie,session 等操作&#xff0c;也是作为爬虫的基础库&#xff0c;它目前还不能异步请求,如果要支持…

C语言 BMP图片的旋转与缩放

目录 一、bmp文件头、文件信息头、位图实际数据的数据结构定义 二、源BMP文件信息的读取 三、实际位图数据的旋转、缩放操作 四、生成转换过后的新位图文件 #include <stdlib.h> #ifndef PHOTODEAL_H #define PHOTODEAL_H #pragma pack(1) typedef struct tagBm…

力扣经典题目解析--删除链表的倒数第 N 个结点

原题地址:. - 力扣&#xff08;LeetCode&#xff09; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;h…

【韩顺平零基础学java】第12章课后题

练习题1 如果用户输入的不是一个整数&#xff0c;就提示他反复输入&#xff0c;直到输入的是一个整数为止 import java.util.Scanner;/*如果用户输入的不是一个整数&#xff0c;就反复输入&#xff0c;直到输入的是一个整数为止*/ public class TryCatchExercise04 {public s…

代码随想录算法训练营Day37 | LeetCode738.单调递增的数字、LeetCode968.监控二叉树、贪心算法总结

LeetCode738.单调递增的数字 思路&#xff1a;与分糖果的题目同理&#xff0c;因为需要与前一位数比较&#xff0c;并且修改这两个数&#xff0c;因此需要从后往前遍历&#xff0c;当前一位数比当前数大时&#xff0c;则前一个数-1&#xff0c;后一个数变为9。 代码细节&…

金三银四,程序员如何备战面试季

金三银四&#xff0c;程序员如何备战面试季 一个人简介二前言三面试技巧分享3.1 自我介绍 四技术问题回答4.1 团队协作经验展示 五职业规划建议5.1 短期目标5.2 中长期目标 六后记 一个人简介 &#x1f3d8;️&#x1f3d8;️个人主页&#xff1a;以山河作礼。 &#x1f396;️…

【数据存储】大端存储||小端存储(超详细解析,小白一看就懂!!!)

目录 一、前言 二、什么是低地址、高地址 &#xff1f; 三、什么是数据的高位和低位 &#xff1f; 四、什么是大小端存储&#xff1f; &#x1f349; 小端存储详解 &#x1f352; 大端存储详解 五、为什么会有大小端存储&#xff1f; &#x1f34d;大端存储的优点 &#…

跨境电商趋势解析:社交电商携手私域流量运营,精准触达与转化

随着全球化的深入发展&#xff0c;跨境电商逐渐成为全球贸易的重要组成部分。在这一背景下&#xff0c;社交电商作为一种新兴的商业模式&#xff0c;正逐渐在跨境电商领域崭露头角&#xff0c;并对私域流量的运营产生了深远的影响。本文Nox聚星将和大家分析社交电商在跨境电商中…

数据结构(一)综述

一、常见的数据结构 数据结构优点缺点数组查找快增删慢链表增删快查找慢哈希表增删、查找都快数据散列&#xff0c;对存储空间有浪费栈顶部元素插入和取出快除顶部元素外&#xff0c;存取其他元素都很慢队列顶部元素取出和尾部元素插入快存取其他元素都很慢二叉树增删、查找都快…

交叉编译qt5.14.2

qt源码下载地址&#xff1a;qt-everywhere-src-5.14.2.tar.xz 1.修改qt-everywhere-src-5.14.2/qtbase/mkspecs/linux-arm-gnueabi-g/qmake.conf文件&#xff1a; # # qmake configuration for building with arm-linux-gnueabi-g #MAKEFILE_GENERATOR UNIX CONFIG …

Guitar Pro 8.1中文版永久许可证激活2024最新24位注册激活码生成器

Guitar Pro是一款非常受欢迎的音乐制作软件&#xff0c;它可以帮助用户创建和编辑各种音乐曲谱。从其诞生以来就送专门为了编写吉他谱而研发迭代的。 尽管这款产品可能已经成为全球最受欢迎的吉他打谱软件&#xff0c;在编写吉他六线谱和乐队总谱中始终处于行业领先地位&#…

返回静态数据

在Java项目中&#xff0c;往往不会一直返回某某数据&#xff0c;而是会返回一个静态页面&#xff0c;那么&#xff0c;如何正确返回一个静态页面呢&#xff1f;&#xff1f; 要想成功的返回一个静态页面前提是必须要有一个静态页面&#xff1a; <!DOCTYPE html> <ht…

GEE 数据集 ——利用leafmap python软件包实现NASA数据的接入(colab示例)

我们如何获取我们想要的数据,这里我们通过 leafmap python软件包实现NASA数据种全球超过9000+的数据集产品的接入和使用。这里我们使用在线的colab来实现处理,因为这里我们可以很好的应用已经在线配置好的colab环境来实现,省去了安装过程的繁琐。 要下载和访问数据,您需要…

rust学习(tokio协程分析一)

代码&#xff1a; async fn doAsyncPrint(v:u32) {println!("start doAsyncPrint,v is {},tid is {:?}",v,system::myTid());//thread::sleep(Duration::from_secs(1));time::sleep(Duration::from_secs(10)).await;println!("end,v is {},tid is {:?}"…

MacOS开发环境搭建

MacOS开发环境搭建 一、MacOS二、Python三、MacOS搭建Python开发环境1.Python下载地址1.1 Python官网地址1.2 Python下载地址 2.安装Python3.安装Python4.安装PyCharm5.创建一个Python项目6.配置PyCharm7.安装Python包8.运行Python代码9.总结 一、MacOS macOS是一套由苹果开发的…

云原生数据库 GaiaDB 支持新的管理工具啦

GaiaDB 是百度智能云自研的新一代企业级关系型数据库&#xff0c;最大容量可扩展 500TB 以上&#xff0c;吞吐达到 150 万以上 QPS。 作为一款 100% 兼容 MySQL 的云原生数据库产品&#xff0c;用户可以通过多种客户端工具连接 GaiaDB 实例&#xff0c;例如 MySQL Workbench、N…

【产品经理方法论——产品的基本概念】

1. 产品学三元素 产品学有三个元素&#xff1a;用户、需求、产品 产品学的内容&#xff1a;根据用户的需求设计产品&#xff0c;使用产品服务用户 仅仅通过三个元素无法说明每个元素的概念&#xff0c;因为三个元素互为说明关系。 通过引入人/群体来说明三个元素的关系。 需…

全局渐变滚动条样式

效果如下&#xff1a; APP.vue<style> /* 整个滚动条 */ ::-webkit-scrollbar {width: 5px;height: 10px; } /* 滚动条上的滚动滑块 */ ::-webkit-scrollbar-thumb {background-color: #49b1f5;/* 关键代码 */background-image: -webkit-linear-gradient(45deg,rgba(255,…