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

在这里插入图片描述

文章目录

  • 一、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.rhkb.cn/news/187676.html

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

相关文章

新零售时代,传统便利店如何转型?

在零售批发业,如何降低各环节成本、提高业务运转效率、更科学地了解客户服务客户,是每家企业在激烈竞争中需要思考的课题。 对零售批发企业来说,这些问题或许由来已久: (1)如何对各岗位的员工进行科学的考…

2023.11.10 hadoop,hive框架概念,基础组件

目录 分布式和集群的概念: hadoop架构的三大组件:Hdfs,MapReduce,Yarn 1.hdfs 分布式文件存储系统 Hadoop Distributed File System 2.MapReduce 分布式计算框架 3.Yarn 资源调度管理框架 三个组件的依赖关系是: hive数据仓库处理工具 hive的大体流程: Apache hive的…

【chat】4: ubuntu20.04:数据库创建:mysql8 导入5.7表

【chat】3: ubutnu 安装mysql-8 并支持远程访问 已经支持 8.0的SQLyog 远程访问:大神2021年的文章:sql是5.7的版本,我使用的ubuntu20.04,8.0版本:chat数据库设计 C++搭建集群聊天室(七):MySQL数据库配置 及项目工程目录配置 User表,以id 唯一标识 Friend 表,自己的id…

华硕荣获“EPEAT Climate+ Champion”永续先驱称号

华硕持续深耕永续理念,努力提供低碳排放、高效能产品,并被全球电子委员会授予“EPEAT Climate Champion”称号。这一荣誉再次表明了华硕在永续管理方面的承诺,并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…

SSL证书申请安全审核失败?

随着HTTPS普及,申请安装使用SSL证书成为了我们的必备项。但这个SSL证书申请过程中,遇到问题也是不少。今天我们来浅了解一下SSL证书为什么会出现安全审核失败? SSL证书申请会出现安全审核失败的情况可能是以下原因: 域名验证不通…

【大模型-第一篇】在阿里云上部署ChatGLM3

前言 好久没写博客了,最近大模型盛行,尤其是ChatGLM3上线,所以想部署试验一下。 本篇只是第一篇,仅仅只是部署而已,没有FINETUNE、没有Langchain更没有外挂知识库,所以从申请资源——>开通虚机——>…

SPSS曲线回归

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

error C2143的原因及解决办法

error C2143的原因及解决办法 在C编程中,经常会遇到各种错误。其中之一就是error C2143。本文将讨论error C2143的原因,并给出相应的解决办法。 error C2143通常是由于语法错误引起的。具体而言,C2143错误表示编译器无法识别代码中的某个符…

AD教程 (十二)原理图的编译设置和检查

AD教程 (十二)原理图的编译设置和检查 通过肉眼初步排查,观察一下原理图上有什么错误 工程编译排查错误 选中工程,右键,选择Compile PCB Project对工程进行编译,根据编译报错,定位错误&#…

FM9918R系列-副边同步整流芯片

产品描述: FM9918R 系列是集成了 MOSFET 的同步整流二极管,用于替换反激式转换器的整流二极管,能够显著减少发热,提升系统的转换效率。IC 通过检测集成 MOSFET 的源漏电压来决定其开关状态。 FM9918R 系列能够兼容连续模式、非连续…

使用微信小程序控制蓝牙小车(微信小程序端)

目录 使用接口界面效果界面设计界面逻辑设计 使用接口 微信小程序官方开发文档 接口说明wx.openBluetoothAdapter初始化蓝牙模块wx.closeBluetoothAdapter关闭蓝牙模块(调用该方法将断开所有已建立的连接并释放系统资源)wx.startBluetoothDevicesDiscovery开始搜寻附近的蓝牙…

初识RabbitMQ - 安装 - 搭建基础环境

RabbitMQ 各个名词介绍 Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当…

基于超宽带技术的人员定位系统源码,spring boot+ vue+ mysql定位系统源码

​UWB定位技术源码 超宽带技术的人员定位系统源码 UWB人员定位系统是一种基于超宽带技术的人员定位系统,它通过发送和接收超短脉冲信号,在测距方面可以达到微米级精度。这种系统通常需要具备高精度的定位能力,通常需要达到微米级别&#xff0…

整治PPOCRLabel中cv2文件读取问题(更新中)

PPOCRLabel 使用PPOCRLabel对ocr预标注结果进行纠正由于PaddleOCR代码库十分混乱,路径经常乱调pip和代码库的代码(pip库和源码冲突),经常报错,因此paddleocr和ppocrlabel都是使用pip包; 安装 pip install PPOCRLabel2.1.3启动 PPOCRLabel…

Azure 机器学习 - 使用自动化机器学习训练计算机视觉模型的数据架构

目录 一、用于训练的数据架构图像分类(二进制/多类)多标签图像分类对象检测实例分段 二、用于联机评分的数据架构输入格式输出格式图像分类(二进制/多类)多标签图像分类对象检测实例分段 在线评分和可解释性 (XAI) 的数据格式支持…

【算法与数据结构】93、LeetCode复原 IP 地址

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:参照【算法与数据结构】131、LeetCode分割回文串的思路,需要将IP字符串进行分割&#xff0…

Clickhouse学习笔记(4)—— Clickhouse SQL

insert insert操作和mysql一致 标准语法:insert into [table_name] values(…),(….)从表到表的插入:insert into [table_name] select a,b,c from [table_name_2] update 和 delete ClickHouse 提供了 Delete 和 Update 的能力,这类操作…

[LeetCode]-225. 用队列实现栈-232. 用栈实现队列

目录 225. 用队列实现栈 题目 思路 代码 232. 用栈实现队列 题目 思路 代码 225. 用队列实现栈 225. 用队列实现栈 - 力扣(LeetCode)https://leetcode.cn/problems/implement-stack-using-queues/description/ 题目 请你仅使用两个队列实现一个后…

另辟奚径-Android Studio调用Delphi窗体

大家都知道Delphi能调用安卓SDK,比如jar、aar等, 但是反过来,能在Android Studio中调用Delphi开发的窗体吗? 想想不太可能吧, Delphi用的是Pascal,Android Studio用的是Java,这两个怎么能混用…

SFTP远程终端访问

远程终端访问 当服务器部署好以后,除了直接在服务器上操作,还可以通过网络进行远程连接访问CentOS 7默认支持SSH(Secure Shell, 安全Shell 协议),该协议通过高强度的加密算法提高了数据在网络传输中的安全性,可有效防止中间人攻击(Man-in-th…