• 第三章Linux环境基础开发工具使用(yum+rzsz+vim+g++和gcc+gdb+make和Makefile+进度条+git)


    🏆个人主页企鹅不叫的博客

    ​ 🌈专栏

    ⭐️ 博主码云gitee链接:代码仓库地址

    ⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!

    💙系列文章💙


    【Linux】第一章环境搭建和配置

    【Linux】第二章常见指令和权限理解



    💎一、yum(软件管理器)

    🏆1.介绍

    Linux的几种安装方式

    1. 源码安装:源码安装会带来交叉编译的问题,源码在不同的环境下可能会有不同的效果,导致安装十分麻烦。这种安装方式用的比较少。
    2. rpm安装:rpm安装相对上面的方式比较友好,这些软件会被提前编译好,然后打包成一个软件包放在服务器上,然后通过指令就可以安装。它最大的缺陷就是不会解决依耐性的问题,一旦遇到依耐性问题,它会把问题反馈给用户,让用户自己解决。
    3. yum管理器:yum是Linux下非常常用的一种软件包管理器,它本身会考虑软件的依赖关系,会利用第三方库帮用户解决依耐性的问题,这样就比rpm更友好一些。

    🏆2.使用方法

    查看软件包

    //罗列出所有的软件包
    yum lish
    
    • 1
    • 2
    //通过grep来过滤出自己想要的软件
    yum list | grep lrzsz
    
    
    • 1
    • 2
    • 3

    安装软件包

    sudo yum -y install lrzsz
    
    
    • 1
    • 2

    卸载指令

    sudo yum -y remove lrzsz
    
    
    • 1
    • 2

    🏆3.rzsz工具

    这个工具可以用于windows机器和远程的Linux机器通过Xshell远程传输文件,可以通过拖拽的方式上传文件,十分的方便。

    rz // 上传文件  
    sz 文件// 发出文件
    
    • 1
    • 2

    在这里插入图片描述

    💎一、vim使用

    🏆1.基本概念

    命令模式:刚进入到vim中默认的模式,该模式可以控制屏幕的光标的移动,来对一些字符进行删除和复制等

    底行模式:当输入[shift]+:的时候,会回到底行,:q(退出),:wq(保存退出),按下ESC回到命令模式,

    插入模式:当按下 i / o / a 时就可以写代码了,推出按下Esc回到命令模式

    🏆2.vim命令模式下的命令

    进入插入模式的命令

    • 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件
    • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字
    • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字
    • 按ESC键切换为命令模式

    移动光标

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

    删除文字

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

    复制粘贴

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

    替换

    • [ r ] :替换光标所在处的字符
    • [shift] + r : 批量化替换

    撤销

    • [ u ] :撤销
    • [ ctrl + r ] : 撤销上一次的撤销

    跳转到指定行

    • 「ctrl」+「g」列出光标所在行的行号。
    • 「#G」:例如,「15G」,表示移动光标至文章的第15行行首
    • [shift]+g : 光标快速定位到文本末尾
    • [gg] : 将光标定位到文本的最开始

    🏆3.vim底行模式命令

    • 列出行号: set nu

    • 分屏:vs 文件,底行模式使用[ctrl]+w可以切换窗口

      vs test.cpp
      
      • 1
    • 保存文件:输入w保存

    • 退出vim: 按q直接退出,按wq是保存并退出,加一个‘!’就是强制的意思。

    🏆4.vim配置

    • 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
    • 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建这个文件。
    • 切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~
    • 打开自己目录下的.vimrc文件,执行 vim .vimrc

    我用的vim环境安装 传送门

    安装指令

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

    卸载指令

    bash ~/.VimForCpp/uninstall.sh
    
    • 1

    🏆5.视图模式

    注释代码和取消代码注释

    注释代码

    1. 在命令模式当中,[ctrl]+v 进入视图模式
    2. 之后使用h j k l 分别控制指针左上下右移动,选中区域,可以用[shift] + g直接切换到底部
    3. 将输入法切换成大写,输入I,输入’/',按Esc

    取消注释

    1. 在命令模式当中,[ctrl]+v 进入视图模式
    2. 之后使用h j k l 分别控制指针左上下右移动,选中区域
    3. 将输入法切换成小写,输入d

    🏆6.vim编写代码突然中断处理

    当我们编写代码中断后再次进入文件编写会出现以下错误,原因是vim帮我们备份了一个,但是每次进来都有这个界面选择很烦,怎么去掉呢?

    在这里插入图片描述

    rm 路径,删除备份路径即可

    rm /home/Jungle/.local/share/nvim/swap//%home%Jungle%lesson15_进程控制%main.c.swp
    
    • 1

    💎三、gcc/g++使用

    🏆1.gcc/g++命令

    程序编译的知识,程序从.c文件到.exe文件有预处理、编译、汇编和链接四个过程,具体讲解传送门

    编译文件的指令

    //gcc只能编译C文件,g++可以编译C文件和C++文件
    gcc test.c
    g++ text.cpp
    //-o是自己命名的可执行程序
    gcc mytest.c -o test
    //加上-static表示生成文件连接的是静态库,不加默认生成动态库
    gcc mytest.c -o test -static
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    gcc命令:

    • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面。从现在开始进行程序翻译,当预处理完成就停下来
    • -S 编译到汇编语言不进行汇编和链接,从现在开始进行程序的翻译,当我们编译完成后就停下来
    • -c 编译到目标代码,从现在开始进行程序的翻译,当汇编结束后,就停下来
    • -o 文件输出到 文件
    • -static 此选项对生成的文件采用静态链接
    • -g 生成调试信息。GNU 调试器可利用该信息。
    • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
    • -O0
    • -O1
    • -O2
    • -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
    • -w 不生成任何警告信息。
    • -Wall 生成所有警告信息

    🏆2.动态库和静态库

    动态库:Linux(.so) windows(.dll)

    静态库:Linux(.a) windows(.lib)

    🏆3.动态连接和静态连接

    • 动态链接:运行时链接文件加载库,节省系统开销
    • 静态链接:编译链接时,将库中的代码拷贝进可执行文件中,直接使用,之后都不依赖这个库

    动态连接

    优点:大家共享一个库,可以节省资源

    缺点:一旦库缺失,会导致几乎所有程序失效

    静态连接:

    优点:不依赖任何库,程序可以独立执行

    缺点:浪费资源

    💎四、调试器gdb使用

    Linux gcc/g++出来的二进制程序,默认是release模式

    //以下指令生成debug程序(-g),gcc是编译,mytest.c是文件,-o是重命名,mytest_g是重命名后的名字
    gcc mytest.c -o mytest_g -g
    
    • 1
    • 2
    //查看程序符号表
    readelf -S test
    
    • 1
    • 2

    开始调试

    //开始调试程序(注意必须是debug版本).gdb+文件
    gdb mytest_g
    
    • 1
    • 2
    //查看源码
    l
    //b+行号,打断点
    b 15//15行打断点
    //查看断点
    info b
    //运行程序
    r
    //打印值
    p sum//打印sum中的值是多少
    //逐语句
    s
    //逐过程
    n
    //退出gdb
    quit
    //删除断点
    d 1//删除的断点编号是1
    //跳转到指定行
    until 15//跳转到15行
    //常显示或者取消常显示
    display && undisplay
    //从一个断点运行到另一个断点
    c
    //执行完成一个函数就停下来
    finish
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    💎五、项目自动化构建工具make/Makefile

    🏆1.介绍

    make是一条指令,Makefile是一个文件

    • 在一个项目中,Makefile定义了一系列的规则来指定文件编译的先后顺序,还有文件是否需要重新编译,甚至还会进行更复杂的功能操作
    • make是一个命令工具,是一个解释makefile中指令的命令工具
    • makefile最大的好处就是自动化编译。写好后只需要一条make指令就可以对整个功率进行完全自动编译,极大地提高了开发效率。
    • 默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件

    🏆2.依赖关系和依赖方法

    依赖关系:依赖关系指明了两个文件之间的依赖性。例如:生成可执行程序需要依赖源码

    依赖方法:依赖方法就是怎么做。例如:用gcc编译

    🏆3.make/Makefile的使用

    1.创建文件makefile和源文件test.c

    2.在源文件中写下以下代码

    #include
    int main ()
    {
    printf("hello1");
    return 0;                                                                                          
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.再makefile文件中写下以下代码

    test:test.c
    	gcc test.c -o mytest 
    .PHONY:clean
    clean:
    	rm -r test 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. test是目标文件
    2. :是依赖关系
    3. test.c原本的文件名字
    4. 第二行按下[TAB]后写上两个文件的依赖方法
    5. .PHONY是makefile语法格式中的一个关键字,后面clean是一个伪目标,clean被.PHONY修饰时,表示总是被执行的(无论目标文件是否新旧,每次都会执行),伪目标后面是没有依赖文件的

    4.使用,退出vim编写后使用make编译项目,make clean清除项目

    make//编译项目,多次使用make,只有第一次有用
    make clean//清除项目
    
    • 1
    • 2

    多文件操作:

    1.创建三个文件main.c hello.c hello.h

    在Makefile文件中写下以下,hello是目标文件,由文件hello.o和main.o编译得来,main.o和hello.o分别由他们对应的.c文件编译过来,rm -f *.o是删除.o文件,hello是删除目标文件

    hello:hello.o main.o
    	gcc -o hello hello.o main.o
    main.o:main.c
    	gcc -o main.o main.c
    hello.o:hello.c
    	gcc -o hello.o hello.c 
    .PHONY:clean
    clean:
    	rm -f *.o hello 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    多文件操作2:

    (使用时删除两者之间的空格)$ @对应目标文件(myproc),$ ^对应依赖文件内容(myproc.c),如果有多个文件则写在myproc.c后面用空格分开

    myproc:myproc.c 1.c 2.c
      	gcc -o $@ $^
    .PHONY:clean
    clean:
    	rm -f myproc
    
    • 1
    • 2
    • 3
    • 4
    • 5

    多文件操作3:
    生成两个可执行程序

    .PHONY:all
    	all:myexec mycmd
    myexec:myexec.c
    	gcc -o $@ $^
    mycmd:mycmd.cpp
    	g++ -o $@ $^
    .PHONY:clean
    clean:
    	rm -f myexec mycmd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    替换:将部分代码替换成我们自定的代码

    CC=gcc 
    bin=myexec
    src=myexec.c
    $(bin):$(src) 	
    	$(CC) -o $@ $^
    .PHONY:clean 
    clean: 
    	rm -f $(bin) ```
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    💎六、进度条小程序

    • 回车: 回到行首
    • 换行: 列不变,进行下一行
      \r与\n
    • \r: 这是一个回车的转义符号,回到行首
    • \n: 回车+换行,回到行首,然后列不变进行下一行的行首
    #include
    #include
    #include//睡眠函数
    #define NUM 101
    void process()
    {
      int cnt = 0;
      char bat[NUM];
      const char* lable = "|/-\\";
      //初始化为空
      memset(bat, '\0',sizeof(bat));
      while(cnt<=100)
      {
        //预留100个位置,并且从左向右移动,并且回车不换行
        printf("[%-100s][%2d%%][%c]\r", bat, cnt, lable[cnt%4]);
        //输出缓冲区内容
        fflush(stdout);
        bat[cnt++] = '#';
        usleep(50000);
      }
      printf("\n");
    }
    int main ()
    {
      process();
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    💎七、git

    🏆1.基本创建和使用

    使用,在gitee创建一个仓库(默认私有),创建完后改成了公有

    用以下操作实现仓库克隆到本地,并且上传文件

    git clone 仓库地址//地址用HTTSP的仓库地址,如果是私有仓库需要输入gitee账户和密码
    git status//查看本地文件提交情况
    git log//查看每次文件的描述(日志)
    git add test.c//test.c为需要提交的文件
    git add .//提交所有文件
    git commit -m "测试程序"//-m用于提交缓存区文件,“测试程序”是日志,此时本地git存在新增文件,但是gitee还没有
    git push//之后需要输入账号密码,此时gitee上也有文件了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    🏆2.问题解决

    当本地仓库和gitee仓库代码不一样时,我们需要进行以下操作

    git pull//将gitee仓库拿到本地来
    :q!//如果发现本地文件上传不了,在报错后直接这样即可,之后再git push即可
    
    • 1
    • 2

    下面这个文件是用来存储类似黑名单的东西的,如果相关后缀文件在这个文件当中就不能提交到gitee

    .gitignore
    
    • 1

  • 相关阅读:
    Java面试题:细数ThreadLocal大坑,内存泄露本可避免
    短视频矩阵系统源码/技术应用搭建
    SQLServer过滤数据
    11_html
    SpringBoot整合Easy-ES实现对ES操作
    基于springboot的信息化药品管理系统
    ssm毕设项目新华书店o2o服务系统89nml(java+VUE+Mybatis+Maven+Mysql+sprnig)
    CentOS 7 离线安装nginx1.18
    yolov5使用最新MPDIOU损失函数,有效和准确的边界盒回归的损失,优于GIoU/EIoU/CIoU/EIoU(附代码可用)
    CY3-peg-海藻酸钠|海藻酸钠-荧光染料CY3|alginate-Cyanine3
  • 原文地址:https://blog.csdn.net/YQ20210216/article/details/127337078