Linux---(五)三大工具yum、vim、gcc/g++

news2024/11/25 1:07:06

在这里插入图片描述

文章目录

  • 一、yum工具
    • 1.Linux中安装软件的方法:
    • 2.什么是yum?
    • 3.yum源更新
  • 二、Linux编辑器--vim
    • 1.IDE例子
    • 2.vim
      • (1)vim的常用模式及切换模式
      • (2)底层模式常用命令
      • (3)插入模式常用命令
      • (4)视图模式常用命令
      • (5)补充内容
      • (6)vim的配置
  • 三、Linux编译器-gcc/g++的使用
    • 1.适用于什么语言
    • 2.快速查看
      • (1)命令
      • (2)注意点
    • 3.回忆一下,程序的翻译
      • (1)须知
      • (2)先有编译器还是先有语言?
      • (3)程序的翻译过程

一、yum工具

1.Linux中安装软件的方法:

(1)源代码安装(不推荐):把源代码编译,形成可执行,编译太麻烦
(2)rpm软件包安装(不推荐):安装的本质就是拷贝,把可执行程序拷贝到指定路径下即可(不知道下载哪个软件包,不知道哪个软件包是对的,不知道某个软件是否还依赖其他软件)
(3)yum一键式安装

2.什么是yum?

类似于手机上的软件商店或者应用管家。

🎗️应用商店中的特定的App没有被我安装的时候,在哪里?
在服务器端。
🎗️安装软件的本质是下载和安装
🎗️应用商店实质是一种客户端软件
🎗️在这里插入图片描述
🎗️评判一款操作系统好或不好的标准:
每一款操作系统都匹配上它的社区、官方文档、配套软件,叫做对应的生态。
例如:
某款操作系统社区非常活跃,各种不一样的版本和历史上暴露出来的Bug已全部被修正,这个软件配套的我们所用的监视软件、开发软件、各种库支持的非常好,他的生态非常完整,社区非常活跃,文档非常全面,所以我觉得这个操作系统比较好,更重要的是很多公司都在用。)
🎗️很多大公司在用这款操作系统是它的生态好的表现。为什么呢?
(1)大公司的技术团队总是在筛选
(2)大公司是问题复现的高频场景。所以大公司在用,操作系统的问题很快就会暴露,尽快暴露就能被尽快修复。
(3)Linux操作系统本身是开源的,其社区会吸引一大批使用操作系统的人,有的搞内核,有的做应用开发,一定会有一大批人基于应用开发在Linux中开源一大批对应的开源软件,这些开源软件一定会为Linux操作系统提供软件功能支持。
🎗️当使用应用商店时,他怎么知道到对应的服务器上下载app呢?
因为客户端软件中内置了域名、IP地址这样的概念。
🎗️yum相关的文件中,一定有文件里面保存的是:我要去哪里下软软件。
在这里插入图片描述
🎗️在这里插入图片描述

3.yum源更新

其实就是用包含国内下载链接的仓库文件,替换同类型文件即可。

二、Linux编辑器–vim

1.IDE例子

IDE是指集成开发环境。
比如VS就是集编译、调试、编写、运行、支持多语言为一体,这样的环境可称为IDE(集成开发环境)。

2.vim

🎗️vi /vim 就是一款文本编辑器。
🎗️vim是一款多模式的文本编辑器。
🎗️文本编辑器的核心工作:对文本进行增删查改。

(1)vim的常用模式及切换模式

一共有12种模式:6种基本模式和6种附加模式。
在这里插入图片描述

(2)底层模式常用命令

🎗️:wq 保存并退出
🎗️:w! 立马强制写入
🎗️q! 强制退出

🎗️:set number或者:set nu 可调出行号
🎗️:set nonu 不要行号

🎗️:! 命令(不退出vim运行命令,可以在不退出vim情况下进行查看、编译、运行等动作)
🎗️:/ 要查找的关键字(可进行搜索关键字,按键n可以跳转到下一个搜索该关键字的结果)

(3)插入模式常用命令

移动光标
🎗️英文字母H、J、K、L分别控制光标的左、下、右、上移动一格。
🎗️$(也就是shift+4)移动到光标所在行的结尾
🎗️^(也就是shift+6) 移动到光标所在行的行首
🎗️w 以单词为单位进行向后移动,支持跨行
🎗️b 以单词为单位进行向前移动,支持跨行
🎗️gg 定位到代码第一行
🎗️G(也就是shift+g) 定位到代码最后一行
🎗️n+G 定位到代码的第n行

删除文字
🎗️x 每按一次,删除光标所在位置的一个字符
🎗️nx 删除光标所在位置包括自己在内的后面的n个字符
🎗️X 向前删除光标所在位置的一个字符
🎗️nX 向前删除光标所在位置的n个字符
🎗️dd 删除光标所在行;剪切功能(dd完再p,可完成剪切功能)
🎗️ndd 从光标所在行开始删除n行;剪切功能(ndd完再p,可完成多行剪切功能)

复制
🎗️yw 复制一个单词
🎗️nyw 复制n个字符
🎗️yy 复制一行
🎗️nyy 复制n行(包括当前行)
🎗️p 粘贴内容到当前行之后
🎗️np 批量粘贴,将复制的内容粘贴n次

替换
🎗️r 替换光标所在处的字符
🎗️nr 替换包含光标所在处和它后面的n个字符(之后比如按下x,可以将n个字符全部替换成x)
🎗️R(也就是shift+r)切换到替换模式。从光标所在处,将输入的字符覆盖式替换原有的字符
🎗️~(也就是shift+`) 文本大小写相互转换
🎗️#(也就是shift+3) 查找同名单词(按键n可进行单词跳转)

撤销
🎗️u 对刚刚的操作撤销
🎗️ctrl+r 撤销的恢复(如果对撤销后悔)

(4)视图模式常用命令

批量化注释
🎗️ctrl+v (进入视图模式)—>j、k按键上下选中区域(注意选中区域是光标位置之前的内容)–>shift+i(也就是I)—>输入//(在最左侧)—>esc

批量化删除注释
🎗️ctrl+v(进入视图模式)–>h、j、k、l按键选中区域(删除//时要删除两列,选中时选两列)

(5)补充内容

I.vim本身自己也可以创建文件
🎗️vim一个不存在的文件名,在vim文本编辑器中编辑文件内容或者不编辑,只要在底行模式中输入命令:w(即保存文件的意思),该文件就会被创建

II.创建文件的三种方法
🎗️touch 文件名
🎗️>文件名 (重定向符号创建文件)
🎗️vim 文件名 (:w)

III.裸的vim也支持多文件编辑
🎗️在vim的底行模式中输入**:vs 文件名** 可以以分屏的模式让我们看到两个文件的代码,两侧的代码可同时进行编辑(双屏模式下再输入命令,可分三屏)
🎗️无论你打开所少个文件,光标只有一个!
光标在哪一个区域,表示当前正在编辑哪个文件!
ctrl+ww 光标切换窗口
发现:光标在左边或右边,底行只有一个。
只要光标当前在哪个文件里,那么底行对应相应文件底行。(一切以光标为主!)

IV.vim 文件名 +n
🎗️vim编辑文件时,退出时光标在哪一行,再次进来该文件时光标还在上一次的位置
🎗️vim编辑文件,然后用gcc编译文件,出现报错信息,报错信息中会有出错的行号,想要打开编辑文件时将光标定问到该行,使用命令vim 文件名 +行数(注意这里在历史退出时光标应在第一行,其次行数这里的数值应是报错行号-1)

(6)vim的配置

🎗️基础配置—>初步理解vim配置的原理

🎐在家目录下新建一个配置文件 touch .vimrc
🎐将配置选项保存到配置文件中(比如在. vimrc中保存set nu,关闭退出. vimrc,vim别的文件,可看到里面的内容自动在前面加了行号)
🎐vim在启动的时候,会自动扫描当前用户的家目录下的.vimrc,让.vimrc内部的选项生效
🎐vim配置,其实核心就是向.vimrc里面添加更多的配置选项即可。
🎐网上搜索:vim配置选项表,根据自己的需求进行添加

🎗️直接自动化部署配置
https://gitee.com/HGtz2222/VimForCpp?_from=gitee_search
点击上面的链接在文章中找到安装方法中的安装链接,复制到命令行当中,输入root密码,进行下载,下载之后根据提示重启即可直接自动化部署

三、Linux编译器-gcc/g++的使用

1.适用于什么语言

🎗️C语言用gcc/g++编译都可以
🎗️C++语言只能用g++编译

2.快速查看

(1)命令

命令:gcc code.c
在这里插入图片描述

命令:gcc code.c -o mybin.exe

这句命令指明自定义形成的可执行程序名称为mybin.exe

(2)注意点

🎗️C++文件名有多种写法,有.cpp或者.cc或者.cxx这样的后缀
🎗️细节问题:Linux系统中文件后缀没有意义。但为什么编译gcc code.txt编译不过呢?
因为系统认为后缀无意义,不代表gcc不关心后缀。

3.回忆一下,程序的翻译

(1)须知

计算机只认识二进制,因为对应的磁盘、内存,CPU、寄存器各种各样的设备只认识二进制,构成这些设备的基本的电子元器件只认识二进制。

(2)先有编译器还是先有语言?

🎐早期人们在和计算机交互时,用的就是计算机语言
🎐二进制打孔编程对应的是全部喂给CPU的指令集
🎐编译器也是软件!
🎐事实上,编译器和语言的发展过程是一个自举的过程。
在这里插入图片描述

(3)程序的翻译过程

在这里插入图片描述
🎗️条件编译的意义(了解即可)

有很多软件,都是同一款软件,但是功能却有所差别,有的是收费的,有的是免费的。例如VS、XShell、idea、vmvare等软件,由社区版和专业版。那么问题来了,对于这两个不同版本的源代码需要维护几份?
答案:1份!
因为是软件就会有Bug,如果维护两份的话,有BUG的话两边的代码都需要修改,不好维护。而且两个版本在一定程度上有兼容性,社区版中有的专业版中一定有。同时如果只维护一份,只需要一个开发团队和测试团队。
如何做到只维护一份呢?利用条件编译,对代码进行动态裁剪。这就是条件编译的意义。

🎗️详解链接
链接过程就是把编译形成的.o文件和系统库链接起来形成可执行程序的过程。

✨为什么要用库呢?
有一些基础性工作不需要让程序员每次都要从零开始,需要有一组库文件来把公共方法抽象出来,统一以库的方式去使用,加速我们的开发效率。
✨我们现在所写的所有的代码,都是站在巨人肩膀上,已经有人给我们写好了对应的可以直接使用的函数了。
✨你所说的这批功能函数,在哪里?以什么方式呈现给我呢?
答案:在库的里面。ldd命令可用来查看一个可执行程序所依赖的第三方库的信息(在linux系统中已经提前预装了libc.so.6这样的库,并且已经提前预装了一批头文件)。
我们的代码+头文件+库=我们的可执行程序
(头文件提供方法的声明,库提供方法的实现)
✨头文件和库都是文件。所以,所谓的开发环境安装,一定要做什么工作?怎么理解?
安装下载并拷贝头文件和库文件到开发环境中的特定路径下,一定要能被编译器自己找到!

🎗️详解链接中的库

✨库的命名规则:以lib开头
例如libc.so.6,lib开头代表它是库,so代表库的类别,6代表版本号,这个库的真正名字是去掉前缀lib,去掉后缀.so.6,所以libc.so.6的库名字是C标准库。
✨库的类别:
Linux中,以.so结尾的称为动态库,以.a结尾的称为静态库。
windows中,以.dll结尾的称为动态库,以.lib结尾的称为静态库。
✨动态库vs静态库
动态库:是C/C++或者其他第三方提供的所有方法的集合。被所有程序以链接的方式关联起来。(链接方式指的是库中所有函数都有入口地址)
动态链接:就是把要链接的库中的函数地址拷贝到我们的可执行程序的特定位置。
静态库:是C/C++或者其他第三方提供的所有方法的集合。被所有程序以拷贝的方式,将需要的代码,拷贝到自己的可执行程序中。
静态链接:比如说自己写了一个文件经过编译变成了.o文件,如果在最后一步静态链接时,会把code.o和lic.a当中,源代码中用的方法的实现给你的可执行程序拷贝一份。
✨须知:库里面有很多函数,每个函数经过编译器编译之后形成库,每个函数都有地址。
✨动态链接优缺点vs静态链接优缺点
在这里插入图片描述
✨gcc默认是动态链接的,采用静态链接要在命令后加-static
在这里插入图片描述
✨默认情况下,大家的云服务器上是没有安装C静态库的,只有动态库,如果你要安装:
安装C静态库 sudo yum install glibc-static
安装C++静态库 sudo yum install -y libstdc+±static
✨为什么系统一般不自带静态库,而选择动态库呢?
因为编译器默认的链接方式是动态链接,主要是静态链接的体积太大的缺点难以接受。
✨我们的开发环境,默认都要为我们做什么?
1.下载开发环境include、lib文件
2.设置合理的查找路径(能找到对应的头文件和库)
3.规定好我们所形成的可执行程序的链接方式
(以上三点,当编译器出现问题时,可从这三方面思考)


Linux的三大工具已经为友友们进行详细解析,如果对大家有帮助的话,可以点赞收藏,关注后续的创作内容哦!请添加图片描述

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

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

相关文章

C#操作注册表的方法

注册表是Microsoft Windows操作系统中的一个重要组成部分,用于存储和管理系统和应用程序的配置信息。它是一个层次结构的数据库,以树形结构组织,类似于文件系统中的文件夹和文件。 注册表存储了许多与操作系统和软件相关的信息&#…

分享Python的十大库,这你一定得知道!

文章目录 前言关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 Python为我们提供了非常完善的基础库&#…

黑马程序员微服务SpringCloud实用篇02

SpringCloud实用篇02 0.学习目标 1.Nacos配置管理 Nacos除了可以做注册中心,同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我…

力扣876:链表的中间结点

力扣876:链表的中间结点 题目描述: 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5]…

计算机是如何进行工作的+进程和线程

一)计算机是如何工作的? 指令是如何执行的?CPU基本工作过程? 假设上面有一些指令表,假设CPU上面有两个寄存器A的编号是00,B的编号是01 1)第一个指令0010 1010,这个指令的意思就是说把1010地址上面的数据给他读取到A寄存器里面 2…

【C++】异常 智能指针

C异常 & 智能指针 1.C异常1.1.异常的抛出与捕获1.2.异常体系1.3.异常安全与规范1.4.异常优缺点 2.智能指针2.1.RAII2.2.智能指针的使用及原理2.2.1.auto_ptr2.2.2.unique_ptr2.2.3.shared_ptr2.2.4.shared_ptr的循环引用问题 & weak_ptr 2.3.定制删除器 1.C异常 C异常…

《算法通关村——二分查找在旋转数字中的应用》

《算法通关村——二分查找在旋转数字中的应用》 这里我们直接通过一个题目,来了解二分查找的应用。 153. 寻找旋转排序数组中的最小值 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如&a…

Netty入门指南之NIO 网络编程

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言基础扫…

浅聊反射系数——为何有共轭?

文章目录 1、基于行波理论的行波反射系数2、共轭匹配与功率波反射系数3、总结 不知道大家是否有和我一样,有下列疑惑:为什么反射系数定义中分子有的时候存在共轭,有的时候又没有共轭。比如: 通俗解释就是:一般来说&…

AD教程 (十一)封装的统一管理

AD教程 (十一)封装的统一管理 PCB封装添加 一个一个手动添加,效率太低,不建议使用 使用封装管理器快速添加,根据BOM表(元器件清单),修改PCB封装 点击工具,选择封装管理器,进入封装…

MSVCP140_CODECVT_IDS.dll丢失怎么办?推荐三个解决方法帮你解决

MSVCP140_CODECVT_IDS.dll是Microsoft Visual C 2015 Redistributable的一个组件,它包含了一些运行时库文件。当您在运行某些程序时,可能会遇到“msvcp140_codecvt_ids.dll丢失”的错误提示。为了解决这个问题,您可以尝试以下三种方法&#x…

Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用

Flutter笔记 绘图示例 - 一个简单的(Canvas )时钟应用 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_2855…

kubernetes istio

目录 一、部署 二、部署示例应用 三、部署遥测组件 四、流量管理 五、熔断 官网:https://istio.io/latest/zh/about/service-mesh/ 一、部署 提前准备好文件 tar zxf 15t10-1.19.3-linux-amd64.tar.gz cd 15t10-1.19.3/ export PATH$PWD/bin:$PATHistioctl install …

一篇文章让你了解Java中的继承

目录 继承一.什么是继承二.为什么要使用继承三.继承的语法四.继承中有重复怎么办?1.**访问原则** 五.super和this1.**this**2.**super**3.**super注意事项**4.**super和this异同点**六.构造方法的引入1.父类不带参数的构造方法2.父类带有参数的构造方法 七.继承中的…

基于Docker容器DevOps应用方案

文章目录 基于docker容器DevOps应用方案环境基础配置1.所有主机永久关闭防火墙和selinux2.配置yum源3.docker的安装教程 配置主机名与IP地址解析部署gitlab.server主机1.安装gitlab2.配置gitlab3.破解管理员密码4.验证web页面 部署jenkins.server主机1.部署tomcat2.安装jenkins…

计算机技术专业CSIT883系统分析与项目管理介绍

文章目录 前言一、学科学习成果二、使用步骤三、最低出勤要求四、讲座时间表五、项目管理 前言 本课程介绍了信息系统开发中的技术和技术,以及与管理信息技术项目的任务相关的方法和过程。 它研究了系统分析师、客户和用户在系统开发生命周期中的互补角色。 它涵盖…

基于SSM的中学课内小说阅读与学习系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

关于Maven中pom.xml文件不报错但无法导包解决方法

问题 我的pom文件没有报红&#xff0c;但是依赖无法正常导入。 右下角还总出现这种问题。 点开查看报错日志。大致如下 1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method <init>()V no…

【数据结构】树与二叉树(九):二叉树的后序遍历(非递归算法NPO)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

【考研数据结构代码题4】求树中度为1的结点数(递归方式)

题目&#xff1a;用C语言描述树的孩子兄弟链表结构&#xff0c;并编写递归程序求树中度为1的结点数 难度&#xff1a;★★ 算法思路&#xff1a;递归地遍历当前结点的左孩子子树与右兄弟子树&#xff0c;分别求二者中度为1的结点数记为h1,h2,若当前结点仅有1个结点&#xff0c;…