• 【Linux】常用工具的使用


            像vs2019这样的编译器是集成编译器,是集合了编辑器,编译器,和Debug为一身的工具,但是在Linux是分开的,编辑器就是编辑器,编译器就是编译器,和Debug的工具。虽然不好用,但是要学会如何使用。


    一、vim(编辑器)

            vim有三种比较基础的模式:普通模式、插入模式、低行模式

            在普通模式下按 i 进入插入模式,只有在插入模式下才能进行文字的输入,按ESC可以返回普通模式。

            在普通模式下 按 shift+: ,进入低行模式,可以进行文件的保存和退出,也可以进行文本的替换,查找字符串

            底行模式跟平时在Linux下写指令一样,也可以记住历史输入过的指令。

    vim常见命令:

            打开一个文件直接使用 vim + 文件名,如果没有此文件也可以进入!保存退出后会自动生成这个文件,所以要注意有时候打开文件的时候,发现是空的要去看看是不是文件名打错了!!!

            打开文件后非常常用的两个操作:w(保存),q(退出),!(强制)。可以单个操作也可以一起使用,需要在插入模式下才能使用。

    光标:        

            

            光标的移动可以使用键盘上的方向键,但是vim默认的移动键是 h(左),j(下),k(上),l(右)。

    PS:巧记键盘最左 h,键盘最右 l,jump(往下落),king(王在上)。

    gg:光标定位到文件最开始。

    shift + g(大写的G):光标定位到结尾。

    PS:这两个命令很有用,这里要说明一下,在vim编辑文件的时候,是不能用鼠标滚轮来翻页的!

    shift + 6 (^):将光标定位到当前行的最开始。

    shift + 4 ($):将光标定位到当前行的结尾。

    w,b:以单词为单位进行光标的前后移动。  

    yy:从光标开始的位置,复制光标所在行。在命令前面加上数字可以进行多行复制,比如 6yy 就是从光标位置复制6行。

    p:把复制的数据粘贴到光标所在位置。

    dd:将当前光标位置的行剪切(也可以当删除使用)。

    shitf + ~:把选中的字符进行,大小写切换。

    shift + r(大写的R):替换模式,在不删除字符的情况下,输入新的来替换,按ESC退出。(不是很好用,还要切换模式,不如删了重写)

    单输入一个 r:单替换光标处的一个字符。前面输入数字,可以多个字符一起替换,6r就是替换6个字符。

    x 或者 (shift+x):小写的x是删除光标当前字符,大小的X是删除光标前面的字符。前面可以加数字删除多个字符。

    u:撤销操作,可以当做平时用的Ctrl+z。

    ctrl + r:撤销 u 的操作。(撤销撤销操作,但是注意不能撤销自己的操作,撤销自己的操作还是用 u )

    底行命令:

    set nu/nonu:开启行号,或者取消行号。

    vs:开启对比模式(分屏,光标在哪里操作就在哪里),输入q可以退出分屏。 

    ctrl + ww:分屏模式下跳转光标。      

    拓展:

            vim的操作指令非常多,死记的话也比较难记,建议熟练掌握增、删、改、查就可。 

             vim需要在文件进行配置,像输入一个字符就给出可能要的函数这种辅助功能,都需要自己设置。

             不过这里设置起来很麻烦,学习成本也高,而且没多大用,可以使用网上已经有的开源配置。

    VimForCpp: 快速将vim打造成c++ IDE

            只需要输入一行命令即可, 方便快捷,记得给星给好评。

    二、g++(编译器)

            这里要注意gcc是一个专门用来编译连接C语言程序的编译器。而g++是c++的,g++可以用来编译c语言,反之则不行。

            gcc -v,g++ -v 查看版本

    程序的编译流程:

    程序的翻译:

        

    gcc mytest.c -o test 

            这里是直接把源文件生成一个可以执行文件test,省略了其他步骤。也可以分解开来观察区别。

    gcc -E mytest.c -o mytest.i

            把代码预处理的结构生成到 mytest.i 文件里面

    -E:从现在开始进行程序的翻译,如果预处理完成就停下来。

             这里是预处理后的文件,完成了头文件展开、去注释、宏替换

    gcc -S mytest.i -o mytest.s

    -S:从现在开始开始进行程序的翻译,如果编译完成就停下来。

            生成一个代码转化为汇编的文件。

    gcc -c mytest.s -o mytest.o     //.o是可重定位目标文件

            进过汇编后,生成的二进制文件。这个文件不能直接运行。

    -c:从现在开始进行程序的翻译,如果汇编完成就停下来。

     

             全是一堆看不懂的二进制代码。

    gcc mytest.o -o mytest

            程序的链接,生成可执行程序mytest。

     PS:巧记方法ESc是键盘最左上角的按键,iso是镜像文件后缀。

    makefile:

            在Linux下如果每次编译一个文件,都要输入如此多的指令,麻烦而且效率低下,那么这里可以使用makefile来帮忙减少劳动量。

            make是一个命令,makefile是一个文件,里面写的就是上面编译连接的指令。一般用的少,主要要学习自动构成makefile的工具,比如Cmake。

    编写makefile:a、依赖关系 b、依赖方法

            可以直接使用vim来编辑Makefile。 

            

            mytest:mytest.c 就是依赖关系gcc mytest.c -o mytest 就是依赖方法。下面的clean是伪目标,一般写的是删除文件的指令。

            

            这里输入make命令就相当于输入了编译链接的指令,会进行程序的编译链接。而输入make clean就可以执行删除的指令,来删除生成的可执行文件。

    拓展:

            但是要注意,伪目标总是被执行的,每次make clean都会执行方法。而make指令,如果没有发现程序有改动是不会执行方法的。

    makefile是如何知道可执行程序改动过?      

            根据ACM来判断的:A:访问时间 M:修改时间 C:修改属性的时间

            makefile检查源文件和可执行程序的时间,如果源文件时间比可执行程序晚了,说明改过源代码,这时候就可以重新生成可执行程序。

            如果检查到可执行程序的时间比源文件要晚,说明现在就是最新的,就不能重新生成。

    多文件编写:

            这里生成两个文件test.c、test.h,然后生成一个文件main.c在里面调用test.c里面的函数。

     

     

            编写Makefile,这里不用注意顺序,会自己去先执行能执行的。这里生成先生成二进制文件,再链接到一起生成可执行程序mytest。

             执行检查一下没有问题。

    拓展:动静态库

            在CentOS7里面,库文件在/lib64目录下面,一般访问库有两种方式:1、动态库。2、静态库。

            在Linux系统中的文件后缀,.so(动态库) 、 .a(静态库),而在windows系统性中,.dll(动态库)、.lib(静态库)

    动态链接:使用动态库里面的方法的时候,需要库文件。占用资源少。

    静态链接:将库中的方法的实现,拷贝到我们的可执行程序中!编译好就可以不库文件了。但是占用资源比较多。

            Linux一般默认使用的是动态链接生成可执行程序。如果要变成静态链接,生成可执行程序的时候,加上-static:使用静态链接的方式生成可执行程序。

    gcc test.c -o mytest-s -static

    PS:一般云上的机器不带静态库,要自己去下载。

    1. sudo yum install -y glibc-static #C静态库
    2. sudo yum install -y libstdc++-static #C++静态库

    三、gdb(调试器)

            写代码难免会发生错误,在vs2019中有报错信息,还可以进行调试,但是在Linux下想调试要单独调试,这里使用的调试器就是gdb。

    PS:程序的发布方式有两种debug和release,gcc/g++编译出来的程序默认是release模式的,如果要进行程序的调试,要使用debug模式。

    gcc mytest.c -o mytest -g     //加上-g就是以debug方式发布的
    readelf -S mytest|grep -i debug   //查看程序是不是debug模式的

             如果是release模式不会出现信息,如果是debug模式会出现以下信息。

     

            使用 gdb+程序名 直接开始调试程序。

     常用命令:

    q(quit):退出调试。直接使用快捷键ctrl+d也可以退出。

    l(list):可以加数字,list 0就从0行开始打印10行代码。

    r(run):开始调试,如果没有设置断点,会走完程序(真在调试的时候,再次按r会重新回到打断点的地方重新开始调试) 。

    b(break):可以加数字,b18就是在18行打断点。不过这里不能看到在哪里打上了断点。

     

    info b:查看断点。

    PS:这里断点是有编号的,好用来区分。这里打了一个断点,编号就是1。

    d (delete) :d 1,就是删除编号为1的断点。注意后面跟的数字是断点的编号。

    n(next) :调试程序,单步步过。(就像vs2019里面的F10)

    s(step):调试程序,单步步入。(就像vs2019里面的F11)

    p + 变量名:打印变量内容。()

    finish:将当前函数跑完,然后停下来。进入到一个函数内部的时候,可以使用这个指令快速走完这个函数。

    display:设置长显示,跟踪一个变量,每次停下来都显示一下变量内容。(作用比较像vs2019里面的监视变量。每设置一个变量也会给一个编号,跟断点一样。)

    undisplay + 编号:取消长显示。

    until + 行号:跳转程序到指定行。

    c (continue):运行之下一个断点处停下来。(如果打了多个断点)

    disable/enable + 断点编号:关闭或开启指定编号的断点。(不删除断点)

     

            gdb非常不好用,看个代码还有长度的限制,如果一个项目代码多,使用起来非常麻烦和不方便,

    四、yum(下载器)

            前面几个软件,有的在别的版本的系统上可能没有,所以要去自己下载,那么就跟平时在windows系统下下载软件一样,需要下载的工具,而在Linux下可以使用yum。

            然后yum有时候下载软件会发现没有下载速度,有时候始终为0,这是因为yum的源使用了外网的源,而中国网络上有墙没法很好的访问外网,这个时候就要把源设置为国内一些开源的源。

            而yum的源就是一个配置文件,位置:/etc/yum.repos.d

            

    sudo vim /etc/yum.repos.d/CentOS-Base.repo

     

             我这里就是腾讯的源,也可以使用其他的源。

    yum三板斧:

    1. yum list //把能下载的软件罗列出来。
    2. yum search sl //把有sl的字符的软件搜索出来
    3. yum list|grep sl
    1. yum install //下载软件
    2. yum install -y sl.x86_64 //加个-y,表示不要询问
    yum remove //移除软件

    五、git(版本控制器)

            非常常用且好用的工具,可把写的代码保存到网上的仓库中,方便方便代码的保存和下载。        

            为何叫版本控制器呢?这是因为在工作中,需要多人协作修改编写代码的,而git这个工具可以把一个项目分成多个分支,最后检查代码没问题后,再把代码合并到主分支里面去,而且如果代码还是有错误,还可以进行版本的回溯。

            这里可以使用Github来保存项目,也可以使用gitee(码云)。去注册好账号后,新建一个仓库。

     

     

     

            然后要需要这里仓库的地址

            最后在git里面添加码云的邮箱和密码。

    1. //设置用户名
    2. git config --global user.name "username"
    3. //设置邮箱 (没有双引号)
    4. git config --global user.email useremail@qq.com
    5. //查看用户名和密码
    6. git config user.name
    7. git config user.email
    8. //查看其他配置信息(git设置列表)
    9. git config --list

    打开.gitconfig增加配置信息:

     

    1. [credential]
    2. helper = store

    在项目根目录执行命令:

    git config --global credential.helper store

            执行git需要输入账号密码的命令时会提示输入密码,此时密码会记住,以后再执行类似操作则不需要输入。

    git clone + 自己仓库的地址        //下载仓库到本地

            再把刚刚新建的仓库下载到系统下,把自己写的代码放到仓库里面就可以上传保存了。

    git三板斧:

    git add + 你的软件     //添加文件到你的目录 

            提交项目。

    git commit -m "这里必须写提交日志"

            提交改动到本地,日志一定要写清楚,不用在乎长度,写上改动的详细内容和日期,方便别人看你项目的时候知道你干了什么。

     

    git push   //提交

            同步到远端服务器。

             第一次要输入账号密码。

     

    拓展:

    git log //提交记录  

     

             注意要在仓库文件夹里面才能查看提交记录。

    git pull   //有时候无法提交,会出现提交冲突

            把远程仓库里面的代码与本地的代码进行合并。

    git rm +你的软件   //删除文件,但是git仓库里面不会删除

     

    .gitignore        这个文件里面写的不会被提交到仓库里面,项目里面有些文件不是必须上传的,所以这里添加上不需要上传文件的后缀,减少要上传的空间压力。

    ​​​​​​​


  • 相关阅读:
    扩散模型 - Diffusion Model【李宏毅2023】学习笔记 数学原理篇
    各地区收入差距不平等、基尼系数、省级层面(分城镇和乡村)
    elasticSearch 接口实现查询热词统计
    「聊设计模式」之中介者模式(Mediator)
    centos7 下使用docker安装常见的软件:Redis
    SpringBoot整合MongoDB
    在直播系统中使用RTSP协议传递视频
    C++ 多态
    《互联网的世界》第五讲-信任和安全(第一趴:物理世界的非对称加密装置)
    Echarts绘制地图,且可以下钻到省区
  • 原文地址:https://blog.csdn.net/weixin_45423515/article/details/126713660