Linux·权限与工具-yum与vim

1. Linux软件包管理器 yum

1.1 什么是软件包

        在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但这样做太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成Windows中的软件安装包)放在一个云服务器上,通过包管理器yum就可以获得这些编译好的软件包,直接进行安装。

        yum (Yellow dog Updater , Modified) 是Linux下非常常用的一种包管理器,主要应用于Fedora,RedHat,Centos等发行版本上。

关于rzsz

        这个工具用于Windows机器和远端Linux机器通过Xshell传输文件,安装完毕之后可以通过拖拽的方式将文件上传过去

注意事项

        关于yum的所有操作必须保证主机网络畅通,可以用ping指令验证

        

查看软件包

        通过yum list可以罗列出当前一共有哪些软件包,由于包的数目可能非常多,因此我们可以用grep或less命令查看

        注意:

                软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
                "x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配.
                "el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6.
                最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念

1.2 如何安装软件

        安装软件我们都会,但是这里要提醒一下,因为软件一般都是安装到 /usr/ 的某个路径下,而这个路径是只有root有权限写入的,因此安装软件时要以root身份安装,可以选择sudo或直接使用root账号安装

                                        ··············································

        出现 complete 字样,说明安装完成

        如果安装命令中不带 -y 选项,安装时可能就需要我们手动按 y 确认哪些软件包要安装。

1.3 如何卸载软件

        一句命令

        

        这个也可以加 -y 选项,防止询问

1.4 yum下载原理及yum源配置

        yum 在下载的时候我们并没有去指定下载源,所有Linux软件都是在不同的云服务器上,那yum命令是如何知道到底该去哪个服务器上找这个软件呢?

        这是因为yum背后有它的一个配置文件,这个配置文件中会记录这些软件的下载路径。就像我们更新某些手机软件的时候,这个软件并不是通过应用商店更新的,而是直接弹到浏览器上给你下载安装,那这个软件的更新系统怎么知道要从哪个网址上下载新版本的呢,也是因为有配置文件的存在,这个配置文件中记录了要更新的地址。

        yum的配置文件路径一般在 /etc/yum.repos.d/

        这些都是yum的配置文件,我们只需要看第一个 -Base 的那个。

        这里我们进这个配置文件看看

        可以看到这里面都是些网址,这就是各个软件的下载地址了。

        因为我的这个系统是在华为云上买的云服务器,所以这些网址也都是华为云服务器中提供的。这些网址的提供商可能因为你这个系统从不同的地方搞到的,网址的提供商都会有所不同。

        这个 CentOS-Base.repo 叫 yum源文件 ,里面的这些内容叫 yum源 因为yum要通过这些内容找到并下载软件,过程就是yum会根据自己系统的版本在那些蓝色的语句中一替换,然后在跟上白色的下载路径,最后形成一条下载链接,于是就可以把对应的软件从云上下载下来了。

        如果不喜欢现在的yum源可以进行切换。

        首先搜一下都有啥yum源,这个要选择国内的源,要是国外的可能下载特别慢或下载不了的问题。这种东西一搜就能搜到。

        这里用阿里云的yum源举例,我的系统是CentOS-7的所以就选择对应的yum源

        复制链接地址,然后进入Linux系统

        把刚刚的链接wget弄进去,回车下载就有了这样一个文件,我们可以vim打开它看看

        这里就是阿里云的yum源了,但是现在它们还没有生效,我们可以把之前的yum源文件备份一下防止出问题,然后把新yum源mv过去,再把名字改成老yum源的名字,就比如我这里就是CentOS-Base.repo 然后使用 yum clean all 清理一下缓存 yum makecache 重建yum缓存

        

        然后我们下载东西就是用阿里云的镜像源下载了。

        


2. Linux编辑器 - vim的使用

2.1 vim的基本概念

        vim有三种常用模式,分别是 命令模式(command mod) 、插入模式(insert mode) 、底行模式(last line mode) ,各模式的功能区分如下:

        命令模式:

        控制屏幕光标的移动,行或字符的删除,移动复制某区段。刚进入vim时默认在命令模式的,在命令模式下按 "i" 进入插入模式,按 ":" 进入底行模式

        插入模式:

        输入文字,用于编写代码,按 "ESC" 返回命令模式

        底行模式:

        文件保存或退出,也可以进行文件替换,找字符串,set nu展示行号。在命令模式下敲出 ":" 即可进入底行模式,要查看所有模式可以输入 :help vim-modes

2.2 vim的基本操作

        我们创建一个文件,然后用vim进入它

                

        刚进入时是这个状态,现在就是命令模式

        我们按 i 进入插入模式

        这个时候我们才能输入文字

        然后按 ESC 退出插入模式,回到命令模式,再输入 : 进入底行模式

        输入 w(保存)q(退出) 回车就可以保存并退出了

        出来之后我们可以cat看一下文件确实被写入了

                        

2.2.1 vim命令模式命令集

插入模式

        i 进入插入模式,从光标当前位置开始输入文件

        a 进入插入模式,从目前光标的下一个位置开始输入文字

        o 进入插入模式,在下一行插入新的一行并开始插入文字

移动光标

        vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
        按「G」:移动到文章的最后
        按「 $ 」:移动到光标所在行的“行尾”
        按「^」:移动到光标所在行的“行首”
        按「w」:光标跳到下个单词的开头
        按「e」:光标跳到下个单词的字尾
        按「b」:光标回到上个单词的开头
        按「#l」:光标移到该行的第#个位置,如:5l,56l
        按[gg]:进入到文本开始
        按[#+G]:进入第#行,如50G
        按「ctrl」+「b」:向“上”移动一页
        按「ctrl」+「f」:向“下”移动一页
        按「ctrl」+「u」:向“上”移动半页
        按「ctrl」+「d」:向“下”移动半页

删除文字

        x :每按一次,删除光标所在位置的一个字符
        #x :例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
        X :大写的X,每按一次,删除光标所在位置的“前面”一个字符
        #X :例如,「20X」表示删除光标所在位置的“前面”20个字符
        dd :删除光标所在行
        #dd :从光标所在行开始删除#行

复制

        yw :将光标所在之处到字尾的字符复制到缓冲区中。
        #yw :复制#个字到缓冲区
        yy :复制光标所在行到缓冲区。
        #yy :例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。                                                dd :剪切光标所在行
        #dd :从光标所在行开始剪切#行
        p :将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

替换

        r :替换光标所在处的字符。
        R :替换光标所到之处的字符,直到按下「ESC」键为止         (替换模式)

        ~ :大小写快速切换

撤销上次操作

        u :如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回退。
        ctrl + r : 撤销的恢复

更改

        cw :更改光标所在处的字到字尾处
        c#w :例如,「c3w」表示更改3个字

跳出指定的行

        ctrl + g :列出光标所在行的行号。
        #G :例如,「15G」,表示移动光标至文章的第15行行首。

2.2.2 vim底行模式命令集

列出行号

        set nu : 输入「set nu」后,会在文件中的每一行前面列出行号。

跳到文件中的某行

        # :「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行

查找字符

        /关键字 : 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
        ?关键字 :先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

保存文件

        w : 在冒号输入字母「w」就可以将文件保存起来

分屏操作

        vs + 文件名:分屏操作
        Ctrl + w + w :光标换屏,换到哪个屏操作哪个文件

离开vim

        q :按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
        wq :一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
        ZZ :wq快捷键

        q! : 强制退出
        ! + 命令 :暂时出vim执行命令,执行好之后回到vim

                         

        我们将vim编辑好之后,回车在外面执行一下编译

                

        此时出现回车继续的提示,我们就回车继续编写vim

        可以查看到这个新编译出来的文件,然后我们继续回车

        成功执行了代码。

        也就是说我们可以在不退出vim的情况下对代码进行编写,编译,运行。

2.2.3 vim视图模式命令

        试图模式就是进行批量操作,或者说块操作

        Crtl + v :进入视图模式

        h j k l :移动光标框选区域

        I(大写i) :块填写

        d :块删除

2.3 简单vim配置

        我们回到家目录,查看隐藏文件,查看一个叫 .vimrc 的文件,如果没有就自己新建一个

        然后我们vim进这个配置文件

                        

        在里面设置一下set nu然后保存退出

                        

        现在我们再进vim的时候就不用我们手动呼出行号了。

        vim在启动的时候会默认先读取一下这个 .vimrc 配置文件,也就是说,如果我们想给vim配置什么就往这个文件中添加就好了。

        因为这个配置文件是配置在每个人的家目录下的,所以谁用vim打开的文件,那么就会去读谁的配置文件,就比如张三还没有配置vim,但是我用vim去打开他家中的文件时也是有行号的,但是他来打开我的文件就不会有行号。

        关于vim再配置点啥的可以上网上看看。

这里提供一份vim配置成C++IDE的方法

        使用普通用户输入以下指令,不要使用root账户:

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

        卸载方法:

        bash ~/.VimForCpp/uninstall.sh

        配置好了之后被配置的这个用户的家目录下会有一个 install.sh 的文件这个文件不要删。

3. Linux编译器 gcc / g++ 的使用

        gcc和g++的选项操作都是一样的,我之后统一使用gcc举例。

        如果没有安装g++就在root身份下安装 gcc-c++ 软件即可

3.1 背景知识

        一个程序从代码变成可执行程序中间要经历下面四个步骤:1. 预处理(进行宏替换)    2. 编译(生成汇编)    3. 汇编(生成机器可识别的代码)    4. 链接(生成可执行文件)

        预处理阶段编译器主要进行,宏替换,文件包含,条件编译,去注释的处理,预处理指令都是 # 开头的代码行。选项 -E 会使gcc在预处理结束后停止编译过程

        编译阶段编译器首先要检查代码的规范性,是否有语法错误等,无误后gcc把代码翻译成汇编语言。选项 -S 只进行编译而不进行汇编,只生成汇编代码

        汇编阶段把编译阶段生成的.s文件转成目标文件。选项 -c 可以看到汇编代码将会转化成 .o 的二进制目标代码了

        链接阶段最后生成可执行程序,选项 -o 为生成的文件命名

3.2 语法与选项

        语法:

                gcc [选项] 要编译的文件 [-o] 完成编译后的新文件

                g++ [选项] 要编译的文件 [-o] 完成编译后的新文件

        -o选项的用途就是为编译出来的新文件重命名的,如果不需要重命名的话 -o 和它后面的东西就都不用写了。

        我们先用vim写个code.c文件出来

                

        我这个vim就是已经用上面那个链接配置好了的

3.2.1 -E 预处理生成 .i文件

        我们使用-E选项,命令编译器拿着代码只完成预处理就停下来生成一个 .i 文件。

        这一步需要我们自己-o设定新文件的名字,否则直接 gcc -E code.c 是不会生成文件的,而是将预处理的整个过程刷屏。

                        

        下面我们vim进这个文件看看预处理之后的代码长什么样子

                ​​​​​​​        

        上面都是声明、typedef等预处理内容,并且这些还都是c语言,我们直接翻到最后可以看到宏已经被替换了。

3.2.2 -S 编译生成汇编 .s 文件S

        使用 -S(大写) 选项让编译器完成编译后就停下来,生成一个 .s 文件

        这里我们可以不用指定新文件名称了,编译器会自己搞

        ​​​​​​​                

        我们直接把预处理好的文件拿给编译器去编译,省的编译器再从头来一遍。

        下面我们 vim 打开 这个新文件

        ​​​​​​​                

        可以看到现在已经变成汇编代码了。

3.2.3 -c 汇编生成二进制 .o 文件

        使用 -c 选项让编译器完成汇编后就停下来,生成一个 .o 文件

                        

        vim打开看看

        ​​​​​​​                

        现在就是一堆乱码了,也就是说这已经是个二进制文件了。

        但此时这个二进制文件是不可执行的,不仅仅是因为权限,就算更改了权限这个文件也无法执行,因为它还没有和库链接,这个程序还不完整。

3.2.4 链接生成可执行文件

        链接是没有选项的,gcc会自己完成这个操作,我们只需要给新文件改个名就行,甚至不改名让它自己生成一个名字也行

        ​​​​​​​        ​​​​​​​        

        现在彻底完成了广义上的编译器的编译生成可执行文件的过程,但是在实际应用的时候不用我们这样一个一个文件的生成,直接用最后这句 gcc code.o -o code.exe 一部到位。

3.3 链接的过程

        我们可以通过 ldd 命令看到一个可执行程序需要链接的库

        第一个和第三个不用看,我们直接看第二个库,这个可执行程序依赖一个叫 libc.so.6 的库,然后我们进入这个库的目录看看,可以看到这个库是C标准库中的内容。

        上我们还可以去看看Linux命令需要的库

        ​​​​​​​        

        可以看到 ls命令 这里也链接了这个C的库,其他命令也是如此,由此我们可以得知Linux中的命令都是由C语言写的了。

3.3.1 动态库与静态库

        静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此在运行的时候就不需要链接别的库了,但如果这么做生成的文件就会比较大。其后缀名一般为 .a

        动态库在编译链接时,不将库文件代码加入,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销,同时生成的可执行文件较小,但是一旦动态库出现问题那所有链接这个库的文件都要出问题。动态库后缀名一般为 .so

        在windows中,动态库链接出来的文件一般以 .dll 结尾,静态库链接出来的文件一般以 .lib 结尾。

        链接动态库的行为叫动态链接,链接静态库的行为叫静态链接

        我们可以通过 file 文件名 指令查看到文件的链接属性

        可以查看一下刚刚我们生成的code.exe文件,这里可以看到是动态链接属性

        gcc编译器是默认进行动态链接的,如果想要静态链接需要在链接命令后面加 -static 选项

        如果链接失败了说名没有装静态库,用两句代码装上就好

                sudo yum install -y glibc-static        sudo yum install -y libstdc++-static

        装好后我们再用静态链接生成一下

        可以看到静态链接的文件比动态链接的文件大了很多,这还只是链接了stdio.h一个库的状态,可以想象静态链接的文件是巨大的。

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

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

相关文章

超有性价比深度学习卡特斯拉 P100,16G大显存,Stable Diffusion AI 绘画利器

超有性价比深度学习卡特斯拉 P100,16G大显存,Stable Diffusion AI 绘画利器 在当今数字化创作的时代,AI 绘画技术正以惊人的速度发展,为艺术家和创作者们带来了全新的可能性。而要实现高效的 AI 绘画,一款性能卓越的显…

Camera基础知识系列(5)——景深

目录 一. 前言 二. 景深 2.1 弥散圆 2.2 容许弥散圆 2.2 景深(DoF) 三. 如何控制景深 1. 光圈因素 2. 容许弥散圆因素 四. 总结 一. 前言 在摄影中,我们有时会有模糊背景、突出主体的需求,即背景虚化。如下图所示,左边是没有做背景虚化…

序列建模之循环和递归网络 - 递归神经网络篇

序言 在序列建模的广阔领域中,递归神经网络( Recursive Neural Network, RNN \text{Recursive Neural Network, RNN} Recursive Neural Network, RNN),注意此处的 RNN \text{RNN} RNN与常用于序列处理的循环神经网络在命名上有所…

打包时未添加camera模块,请参考https://ask.dcloud.net.cn/arss/1ooticle/283

今天在app打包使用的时候突然发现app在拍照上传照片的时候遇到这个问题 遇到这种情况通常是因为app打包的时候manifestjson文件中App模块配置中的Camera&Gallery配置没有打开,点击相应选项勾选即可 然后再上传打包就好了! 哈哈哈好久没写博客了最近太忙了&…

使用 Hugging Face 和 Milvus 构建 RAG 系统

Milvus 是一个广受欢迎的开源向量数据库,为人工智能应用提供高性能和可扩展的向量相似性搜索。在本教程中,我们将向您展示如何使用 Hugging Face 和 Milvus 构建 RAG(检索增强生成)流程。 RAG 系统将检索系统与 LLM 相结合。该系统…

android13 禁用wifi

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 3.代码分析 3.1 代码位置1 3.2 代码位置2 3.3 代码位置3 4.代码修改 5. 彩蛋 1.前言 这个文章讲的是,在frameworks里面禁止打开wifi。 2.情况分析 我们打开wifi一般是 public static void turnOnWifi(Co…

x64汇编语言与逆向工程实战指南(四)

目录 1. 数组的存储与遍历1.1 编写数组数据写入内存1.2 汇编循环遍历数组元素 3. Lea指令4. mul指令与imul指令4.1 mul 指令4.2 imul 指令总结 5. div指令5.1 div 指令的基本原理5.2 8 位除法5.3 16 位除法5.3 32 位除法特点和要求 1. 数组的存储与遍历 1.1 编写数组数据写入内…

day28-lsync服务+scp命令

假设nfs服务器挂了,就要走backup服务器也部署nfs 这种情况下,rsync和nfs要用到同一个文件夹, 所以他俩管理文件夹权限必须一样 1. lsyncrsyncnfs rsync服务 10.0.0.41 1.安装rsync [rootbackup:~]#yum -y install rsync 2.配置rsync[root…

2024年8月18日历史上的今天大事件早读

648年8月18日 唐初名相房玄龄逝世 1850年8月18日 法国作家巴尔扎克逝世 1868年8月18日 英法天文学家发现“氦”元素 1905年8月18日 反清革命组织共进会成立 1914年8月18日 美国总统宣布在“一战”中保持中立 1925年8月18日 国民革命军正式组建 1926年8月18日 北伐军攻克汀…

Open3D 格网法计算点云的占地面积

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2数据显示 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概…

详解语义安全(semantically secure)

目录 一. 引入 二. 密文与明文 2.1 通俗性理解 2.2 定理 2.3 定理理解 三. 语义安全的第一个版本 3.1 基本理解 3.2 定理 3.3 定理理解 四. 语义安全的第二个版本 4.1 直观解释 4.2 小结 一. 引入 密码学中安全加密要求:敌手(adversary&…

串(4/6)

目录 1. 串的概念及应用实例 1.1 串的定义 1.2 应用实例 2. 串的基本操作 2.1 创建和读取 2.2 串的拼接 2.3 串的比较 2.4 插入和删除 2.5 查找子串 3. 串的存储结构及实现 3.1 顺序存储结构 3.2 链式存储结构 3.3 存储结构的选择 4. 串的模式匹配算法 4.1 朴素匹…

Hive3:常用的内置函数

1、查看函数列表 -- 查看所有可用函数 show functions; -- 查看count函数使用方式 describe function extended count;2、数学函数 -- round 取整,设置小数精度 select round(3.1415926); -- 取整(四舍五入) select round(3.1415926, 4); -- 设置小数精度4位(四…

应急响应-DDOS-典型案例

某单位遭受DDoS攻击事件如下 事件背景 2019年2月17日,某机构门户网站无法访问,网络运维人员称疑似遭受DDoS攻击,请求应急响应工程师协助。 事件处置 应急响应工程师在达到现场后,通过查看流量设备,发现攻击者使用僵…

汇编语言:call、call far ptr、call word ptr、call dword ptr、call 寄存器

引言 call指令是转移指令,CPU执行call指令,进行两步操作: (1)将当前IP或当前CS和IP压入栈中 (2)转移。call指令不能短转移,除此之外,call指令转移的方法跟jmp指令的原理…

Java流程控制09:练习题:打印三角形

本节视频链接:https://www.bilibili.com/video/BV12J41137hu?p44&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p44&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 通过嵌套for循环可以实现打印三角形&#xff…

使用C#禁止Windows系统插入U盘(除鼠标键盘以外的USB设备)

试用网上成品的禁用U盘的相关软件,发现使用固态硬盘改装的U盘以及手机等设备,无法被禁止,无奈下,自己使用C#手搓了一个。 基本逻辑: 开机自启;启动时,修改注册表,禁止系统插入USB存…

银河麒麟服务器操作系统Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤

银河麒麟服务器操作系统 Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤 一、准备工作1. 下载ISO镜像2. 制作安装介质3. 设置BIOS 二、安装过程1. 启动系统2. 选择安装语言3. 选择安装配置4. 配置root密码与创建用户5. 开始安装6. 重启系统7. 同意许可协议 三、系…

通义千问( 四 ) Function Call 函数调用

4.2.function call 函数调用 大模型在面对实时性问题、私域知识型问题或数学计算等问题时可能效果不佳。 您可以使用function call功能,通过调用外部工具来提升模型的输出效果。您可以在调用大模型时,通过tools参数传入工具的名称、描述、入参等信息。…

C语言(16)——初识单链表

1.链表的概念及结构 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 结构图: 补充说明: 1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续 2、…