Linux 的软件生态 - 软件包管理器(yum)- 编译器 vim

目录

 Linux的软件生态

LInux生态

Linux 软件包管理器(yum)

在 Linux 当中安装rzsz 软件

Linux 编译器 - vim 

 vim 当中底行一些模式命令

 vim 命令模式当中的命令

vim的 插入模式的命令

 vim的配置


 Linux的软件生态

 在 手机 ipad 笔记本等等我们使用的产品当中,会有应用商店等等可以下载软件的 软件包管理器,当我们想要下载某一款软件的时候,就去这个应用商店当中搜索,或者是去寻找,找到之后,进行下载,安装;但是我们下载是在通过我们使用的这个应用商店的官方,维护的一个服务器当中进行下载的。

这个服务器当中会提前准备很多的软件,比如:抖音,bilibili等等软件。那么我们通过在手机当中的 “应用商店” 这样的 APP  来进行下载 和 安装软件,这个 其实也是一个客户端。比如我们现在下载 bilibili 这个软件,其实这个 bilibili 并不在本地,而是在远端的,只是在手机 APP 上给你 拉取一个 软件列表,给你搜索,在真正需要装的时候,是需要通过网络,从服务器当中 下载 这个软件到你 的本地,然后你在进行安装。

那么在 应用商店 当中 软件肯定不都是 维护这个 应用商店的人写的,其他人(公司,个人组织,处于某种目的,或者活动给我们提供软件服务)写的软件要通过 提交到服务器上,然后通过 应用商店进行 上线这个APP。上线之后 客户才能搜到,在手机的 应用商店当中,内置了服务器,所以我们能在其中找到软件下载。

如果实在windows 当中,我们是要自己寻找下载位置的,比如我想下载 vscode ,那么一般是在网上找到 其官网,然后在官网当中下载安装包,然后进行安装。

当然,现在 笔记本提供商已经内置了和手机一样的应用商店,也可以像手机一样进行下载安装。

那么在Linux当中也就相当于是 应用商店。

 那么在 LInux 当中的 yum 是谁来维护,谁来提供软件呢?

因为 LInux 是一个开源的操作系统,而且 LInux 的使用群体也不同!!! 在 Windows 当中我们所下载 游戏 等等这些娱乐项目,是提供给 小白用户的 ,这些在 LInux 当中都用不了,比如 lol,csgo 等等;但是在 LInux 当中的很多软件在 Windows 当中也是用不了的,因为 LInux 的用户一般是职业程序员。所以一般是客户需要什么,那么软甲的生产者,就生产什么。

LInux生态

 开源不是圣母,开源是一种商业战略,这就导致不同的版本都有不同的生态。而生态好就是:

  • 这个操作系统当中,获取的来源多,获取的来源官方;
  • 这个操作系统的版本是否是一个足够稳定的版本,在行业内共识,他是一个比较好的软件;
  • 这个操作系统是否有非常成熟,活跃的社区,这些社区当中有 很多问题,这些问题都被暴露出来,并且得到了解决;
  • 其中的软件的开放文档,是否丰富;
  • 这个操作系统的背后是否有非常多的软件生态,各种各样的软件的解决方案;

 而站在 OS 的开发者 ,推动者,设计者,的角度,他们要解决的是 更好的和用户互动,积极地推动使得生态更加完整,就花钱搞服务区,推广,让更多的自己OS 写的程序员来写软件。

那么一直使用免费的操作系统的人,就会对这个操作系统产生依赖,因为他已经在这个操作系统的基础之上做出了一些成就,或者是成果,那么此时,不仅仅是 这个操作系统的 提供者 不愿意像看到这个操作系统 ,或者这个操作系统的社区夸掉,其中的用户也不希望这个操作系统或者是操作系统的社区垮掉。

有句话说的就是 : 免费的才是最贵的。

Linux 软件包管理器(yum)

 在Linux 当中安装软件,一般情况是 有人写好了一段源代码,然后再 Linux 当中进行编译,编译之后得到了 可执行文件,这个可执行文件就是我们可以使用的软件了。

上述方法会出现一些问题,比如,某人写的源代码,用到了别人写的代码,或者是其他的 工具等等,那么其他人如果像使用它的 源代码 编译出 可执行文件的话,就必须把对应的 代码 或者是其他 东西 下载下来,然后经过一些操作,才能编译出 可以用的可执行文件。

而且像上述一样实现太麻烦了,所以有人就直接把 一些 编译好的可执行文件(软件)做成了 软件包(这里的软件包可以理解为 Windows 当中的 安装程序)放在一个服务器上,这就是在线的软件包。然后我们通过 软件包管理器 就可以很方便的获取到这个已经编译好的软件包,就直接可以进行安装。

这里的软件包和 软件包管理器 就好比手机当中的 " APP " 和 "  应用商店 "这样的关系。

而 yum 就是一种 软件包管理器,是在 Linux 当中常用的一种软件包管理器,主要是在 Fedora, RedHat,Centos等发行版本上应用。

yum,可以帮我们解决,安装源的问题,安装版本,安装依赖。这些问题。

 需要注意的是,yum只有 root 用户才能使用,普通用户是不能使用的,除非是 Linux 信任的白名单用户可以使用 sudo + 命令 来强制执行 这个命令。

在 Linux 当中安装rzsz 软件

在windows 当中,如果我们使用 云服务器来使用 Linux 系统的话,那么我们就会使用 Xshell 这个软件,而 rzsz  这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件。

 安装完毕之后可以通过拖拽的方式将文件上传过去

 使用 如下 命令可以查看当前 Linux 操作系统下 安装了多少 软件,他可以把所有的都列举出来:
 

yum list

但是一般软件都比较多,所有都列举出来我们不好找,所以我们使用 如下 命令来结合 " | "  管道来查看某一个 软件是否安装:

yum list | grep 软件名

使用一下 search 就可以 搜索包含指定关键字的软件包remove 卸载指定的软件包。

yum工具在每次安装指定软件包的时候,都会检测源服务器上的软件包信息,为了便捷不用每次都去搜索软件包信息,因此使用 yum makecache 命令 将软件包信息缓存到本地,使用 yum clean all 清理老旧的缓存信息

yum -y update:升级所有包同时,也升级软件和系统内核;

yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。

 yum就是 一个应用商店,那么他是如何找到 对应软件的 在哪儿呢?

 我们一般在手机当中的应用市场下载软件的时候,他是应用商场当中内置了这个软件的下载链接。

在Linux当中这个下载链接就存储在一下路径当中:
 

/etc/yum.repos.d/

 目录当中有 CentOS-Base.repo 的这个文件,而且我们之前在安装 lrzsz 的时候,后面就有 @base 这个文件属性,这就表示这个软件的下载是来自哪里的,如上,就是来自 Base的,当我们进入这个 CentOS-Base.repo 文件之后,就可以看到下载链接了:

 这些都是下载链接。

而使用 yum ,他就可以自动的在这些链接当中去寻找这个软件,然后下载安装。这些链接我们也是可以手动打开的。

 那么在上述 CentOS-Base.repo 这个文件当中可以下载的软件都是 认可的 yum源,那么肯定也有不被官方认可的 yum源,也就是应用市场当中没有的。也就是说,有准官方,和非官方的 yum源(扩展源)。

比如现在我们安装 epel 这个扩展源:

yum install -yepel -release

 其中有些一些比较好玩的 软件: cowsay     sl     。

可以使用 yum remove 来卸载一个软件。

 而一般的Linux操作系统,默认安装的都是国外的 yum 源,可能访问的时候比较慢,可能需要更新yum源-- 替换 yun 源文件。而云服务器,一般是已经替换为国内的yum源了。

Linux 编译器 - vim 

 vim 他是一个 编辑器,用于文本的编写,我们一般用于写代码

vim 是一个 多模式的 编辑器:命令模式,插入模式,底行模式等等

 也就是说,当我们用vim 打开一个 文件进行编辑的时候,它有多种模式对这个文件进行 编辑

 如上图,我们vim 这个  text.c  文件,然后就会进入如下界面:

这时候,我们敲键盘,像写代码的话是没有什么反应的,因为 vim 进入 文件的话默认是 命令模式。

 在命令模式当中,用户所有的输入都被当做是 命令一般不会作为文本输入

 所以,如果我们想要在 vim 当中对文件 ,写代码,那么就要进入插入模式,我们按下 i ,就可以进入插入模式

 此时左下角变成 如上图所示,表示是 插入模式。这时候我们就可以 以文本方式输入了:

 那么如果我们想要退出这个插入模式,只需要无脑按下 esc 就行了,就会退回到 命令模式:

 此时左下角不做显示了。

如果我们想退出这个vim 编辑器,那么需要从 命令模式 进入 底行模式

 在命令模式下,按下 shift + :  就可以进入底行模式,此时在底部显示如下图所示:

 我们输入 wq 就可以退出这个 vim 编辑器。这里的 w 表示的意思是 保存的意思,q 代表的是 退出vim的意思。

 此时查看 text.c  文件;

 那么由底行模式退回到 命令模式,还是无脑 esc

 注意:我们一般在操作 vim 退出的时候,还是使用  上述 底行模式 输入 wq 的方式退出,如果使用 一些快捷方式来退出的话可能会出现一些问题,比如  一些快捷方式退出的话,不会结束掉 vim编辑器,时间久之后,可能会开 上百个 vim 从而导致 服务器挂掉。所以我们,一般建议用 底行模式 输入 wq 的方式来退出 vim。

 插入模式底行模式之间 只能通过 命名模式来转换

在退出文件时候,如果出现下述错误:

 错误原因:

  • 当前用户没有对这个文件进行修改的权限。
  • 该文件没有正常的保存退出,如果这个文件处于正在打开的状态,那么我们再次用vim进入这个文件,就报错。
  • 如果这个文件都正常关闭,提示有人没有正常关闭,则删除这个文件的临时文件就可以,继续打开进行操作。

 此处参考引用博客;(2条消息) Linux修改文件出现错误E45:“readonly” option is set(add ! to override)退出不了vim_e45 readonly_jgm20475的博客-CSDN博客

 vim 当中底行一些模式命令

 如果我们在用 vim 创建一个文件并写入的时候,没有对这个文件进行保存,那么这个文件不会创建在 路径下。因为 vim 它默认不会创建文件,只有当你 在底行模式下,输入 w 保存之后,才会创建。

 在底行模式当中输入 ,

vs 文件名

 可以进行多个文件同时用vim 来编辑,进行分屏操作;那么光标所在哪一个屏当中,就是对哪一个文件进行操作,我们可以使用 ctrl + ww 来进行换屏操作!!

 在 vim 编辑的 text.c,文件同时,用vim编辑 text1.c  文件 :

 此时就可以分屏:

 使用 ctrl + ww 来切屏;

 !:表示强制的意思,w!就是强制保存;q!就是强制退出;wq!就是强制保存并退出。

 !+ 命令:可以在命令行当中直接执行这些命令。如:! ls,在不退出vim的情况下,浏览当前目录下文件。同样,gcc xxxxx       ./a.out  就可以直接编译这个源文件,并执行对应的可执行文件,同时不会退出vim

 如下例子,直接用 gcc 编译器 编译这个 text.c 源文件。(需要注意的是,执行之前,需要保存执行源文件

 

 

 执行可执行文件:

输出: 

 

 set nu:调出 文本行的行号;输入之后 效果如下:

 set nonu:删除 文本行的行号;输入之后 效果如下:

vim 当中小例子:

怎样将字符AAA全部替换成yyy?

在vim的底行模式中,

        :s 表示substitute,也就是替换, 格式为以下

        :[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

                range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行

                {pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串

                {string} 表示要将匹配到的字符串替换为的新的string字符串

                [flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次

                [count] 表示在一行中匹配多少次,很少会用到....

如果想要将文件中所有 nihao 替换为 hello 则命令为: %s/nihao/hello/g

        :p 用于打印指定区间的行

                :[range]p[rint] [flags]

        :i 在指定行上方添加文本

                :{range}i[nsert][!]

 vim 命令模式当中的命令

 在 vim 当中有如下的命令:

gg:把光标定位到 整个文本行的第一行;

G(shift + g  或者是  使用 Caps 大写锁定):把光标定位到 整个文本行的最后一行;

nG: 先输入一个数字,然后 输入 G,就可以移动到这个文本当中的 第n行。如下我们移动到第5行。

 yy:复制光标所在行;

p: 把复制的内容粘贴到光标的下一行:

 (n)p :在光标所在行的下一行粘贴n个复制的内容;如下复制了1000行 printf("hello world");

 (n)yy:复制光标所在行开始的 n 行内容。如下述输入 2 yy p :

 u:表示撤销,同 windows 当中 ctrl + z。

ctrl + r : 反撤销,相当于 撤销撤销,同 windows 当中的 ctrl + z。

(n)dd:剪切光标所在的行开始的n行。或者说是删除,也为剪切也就同时把这一n行所删除了。

 $:定位到光标所在行 的最右侧(结尾);

^:定位到光标所在行 的最左侧(开头),需要注意的是由字符的最左侧:

 w:按照单词为单位向后移动;

b:按照单词为单位向前移动;

我们可以使用 上下左右 方向键来进行一个字符一个字符的移动,同时为了方便,还有 对应 h j k l的方式来移动,分别对应的是 做 下 上 右。

 shift(按住不动)+ ~  :可以从光标开始,按一次 “ ~ ”  就往后 修改一个字符大小写,如果这个字符是大写的,就改成小写的;如果这个字符是大写的,就把这个字符改成小写的;

 (n)r  + 字符:把光标所在字符开始之后的n个字符,修改为 r 之后跟这个的那个字符;如下我们输入 4 r x :

 R:从光标开始的字符,往后我们输入的字符都会替代原本的字符;当我们按下 R 之后,在屏幕的左下角就会出现 一下字样:

 如果需要退出 R 的界面可以 按下 esc。下面例子是修改当中的输入:

 如上述当中  R 也属于 vim 当中一种模式,如果需要退出可以无脑 esc。

(n) x:向右删除一(n)个字符;相当于 windows 当中的 delete。

 还有一些命令如下所示:

 「x」:每按一次,删除光标所在位置的一个字符

「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符

「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符

「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符

「dd」:删除光标所在行

「#dd」:从光标所在行开始删除#行

「yw」:将光标所在之处到字尾的字符复制到缓冲区中。

「#yw」:复制#个字到缓冲区

按「e」:光标跳到下个字的字尾;

按「#l」:光标移到该行的第#个位置,如:5l,56l;

按「ctrl」+「f」:屏幕往“前”移动一页;

按「ctrl」+「u」:屏幕往“后”移动半页;

按「ctrl」+「d」:屏幕往“前”移动半页;


 

vim的 插入模式的命令

按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;

 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;

按「o」进入插入模式后,是插入新的一行,从行首开始输入文字;

 vim的配置

 默认的 vim 都是裸的vim,没有经过配置,不太好用。我们可以配置我们的 vim 从而 让 vim 更加好用。

配置 vim 需要在 家目录(/home)下 ,创建一个 隐藏文件 (vimrc):
 

 我们想要配置的配置项,就是在 .vimrc  当中写的。

 

 如上,使用 vim 在其中写入 底行模式 当中的命令,输入如下内容:

 此后我们再使用 vim 编辑其他文件的时候,就有行号显示了。上述的 " : " 可以不写。

 具体的其他配置功能可以看如下资源:

Vim 配置入门 - 阮一峰的网络日志 (ruanyifeng.com)

 那么上述每一个在自己 home 下配置的 vim 只会影响自己的 vim。不会互相影响。

  不建议给root 用户做 vim 的配置,他的配置目录在 如下 路径:

/etc/vimrc

 傻瓜式一键安装:

他不是 隐藏文件。
VimForCpp: 快速将vim打造成c++ IDEicon-default.png?t=N7T8https://gitee.com/HGtz2222/VimForCpp

 或者 复制下面链接,在LInux 当中直接执行:

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

最后注意:

 Xshell 当中可以这样修改主题:

 vim 批量化注释 和 批量化解除注释

首先,在vim 的命令模式下,按下 ctrl + V 进入 V-BLOCK 模式(此时vim的左下角会有如下的提示):

在进入到 V-BLOCK 模式后  ,我们可以实现 h-j-k-l 四个按键来选中我们要注释的区域,如下所示,使用 j 的按键,向下选择行数,如果出现 如下所示的 在选中行的 第一列出现 黄色图标说明选中成功:
 

 此时只需要 按下 shift + i ,再直接输入 "//" ,然后按下 esc 就可以直接批量化注释(注意上述的步骤不能错,不需要其他操作):


如果想要 批量化解除注释的话,还是 ctrl + V ,然后,h-j-k-l 选择要注释的行数(注意,此时的黄色图标要选中全部的 "//" 不能只选择一个 "/" );然后,按下 d 就可以了:
 

向上述的正确方式选中之后,输入d就可以批量化解除注释了:
 

 

了解一下编译过程

  • 编译过程为 扫描程序-->语法分析-->语义分析-->源代码优化-->代码生成器-->目标代码优化;
  • 扫描程序进行词法分析,从左向右,从上往下扫描源程序字符,识别出各个单词,确定单词类型
  • 语法分析是根据语法规则,将输入的语句构建出分析树,或者语法树,也就是我们答案中提到的分析树parse tree或者语法树syntax tree
  • 语义分析是根据上下文分析函数返回值类型是否对应这种语义检测,可以理解语法分析就是描述一个句子主宾谓是否符合规则,而语义用于检测句子的意思是否是正确的
  • 目标代码生成指的是,把中间代码变换成为特定机器上的低级语言代码。
  • 死代码删除是编译最优化技术,指的是移除根本执行不到的代码,或者对程序运行结果没有影响的代码,而并不是删除被注释的代码。
  • 内联函数,也叫编译时期展开函数, 指的是建议编译器将内联函数体插入并取代每一处调用函数的地方,从而节省函数调用带来的成本,使用方式类似于宏,但是与宏不同的是内联函数拥有参数类型的校验,以及调试信息,而宏只是文本替换而已。
  • for循环的循环控制变量,通常被cpu访问频繁,因此如果调度到寄存器中进行访问则不用每次从内存中取出数据,可以提高访问效率。
  • 强度削弱是指执行时间较短的指令等价的替代执行时间较长的指令,比如 num % 128 与 num & 127 相较,则明显&127更加轻量。
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chihiro1122

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值