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 :光标换屏,换到哪个屏操作哪个文件

离开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一个库的状态,可以想象静态链接的文件是巨大的。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值