• Linux 环境基础开发工具


    目录

    一.软件包管理器yum

    1.软件安装

    2.查看软件包、lrzsz

    3.安装和卸载

    二.vim编辑器

    1.vim的模式

    (1)正常模式

    (2)插入模式

    (3)底行模式

    (4)替换模式

    2.vim的基本操作

    3.vim正常模式命令

    4.vim底行模式命令

    5.vim配置

    三.gcc/g++

    1.gcc/g++如何生成一个文件

    2.函数库

    四.gdb调试工具

    1.介绍

    2.使用

    五.Linux项目自动化构建工具make/Makefile

    1.介绍

    2.使用

    依赖关系:

    依赖方法:

    3.make原理

    4.项目清理

    六.进度条

    1.行缓冲区

    2.倒计时

     3.进度条

    七.git

    1.clone

    2.status

    3.add

    4.commit

    5.push

    6.pull

    7.log

    8.gitignore


    前言:这一篇将会开始学习yum安装工具,以及vim开发工具等工具,学习之后,我们将可以使用Linux进行代码编写、调试等操作。

    一.软件包管理器yum

    1.软件安装

    Linux安装软件分为3种:

    ①源码安装:下载到程序的源代码,并进行编译,得到可执行程序。

    ②rpm安装:只下载一个程序,而不包括该软件所需要的各种库,这些库需要自己安装。

    前两种安装起来都很麻烦,因此有了第三种yum。

    ③yum安装:不用编译源码(①),也不用解决依赖关系(②)

            有些人把一些常用的软件提前编译好,做成软件包放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。

    2.查看软件包、lrzsz

            通过yum list可以罗列出当前一共有哪些软件包,由于包的数目很多,这里需要使用grep命令来筛选我们想要的包。

    yum list | grep lrzsz

            lrzsz是一个用于window机器和远端的Linux机器通过XShell传输文件的工具,安装完毕之后可以通过拖拽或指令的方式传文件。 

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

    3.安装和卸载

    安装:

    sudo yum install lrzsz

    yum 会自动找到都有哪些软件包需要下载 , 这时候敲 "y" 确认安装 .
    出现 "complete" 字样 , 说明安装完成 .
    注意事项 :

    安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.

    yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.

    卸载:

    sudo yum remove lrzsz

    二.vim编辑器

    1.vim的模式

    (1)正常模式

            控制光标的移动,字符、字或行的删除,移动复制某区段及进入其它模式。

    (2)插入模式

            进行代码输入的模式,是用的最频繁的编辑模式。

    (3)底行模式

            文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。

    (4)替换模式

            可以替换当前字母,进行批量化替换。

    2.vim的基本操作

    ① 刚进入vim时,处于正常模式。

    ② [正常模式]切换至[插入模式]

            输入i:在当前位置进入插入模式

            输入a:在下一个字符位置进入插入模式

            输入o:在下一行位置进入插入模式

    ③ [正常模式]切换至[底行模式]

            shift + :

    ④ [正常模式]切换至[替换模式]

            shift + r

            就是R

    ⑤ [其它模式]切换至[正常模式]

            按Esc键即可

    ⑥ 退出vim及保存文件,是在底行模式下

            w(保存当前文件)

            wq(保存并退出)

            !q(强转退出)

            !wq(强转保存并退出)

    3.vim正常模式命令

    ① 复制、粘贴

            yy:复制当前行

            nyy:从当前行开始复制n行

            p:粘贴在当前行的下一行

            np:粘贴n个在当前行的下一行

    ② 剪切、删除

            dd:剪切(删除)当前行

            ndd:剪切(删除)从当前行开始的n行

    ③ 撤销操作

            u:撤销刚刚的操作

            shift+r:针对u操作,进行撤销

    ④ 光标移动到末尾行、开头行

            shift+g:光标快速移动到文本末尾行

            gg:光标快速移动到文本开头行

            n+shift+g:光标快速定位到文本的任意一行

    ⑤ 光标移动到行末尾、开头

            shift+4:光标快速移动到文本行末尾

            shift+6:光标快速移动到文本行开头

    ⑥ 向后、向前以单词为单位进行光标移动

            w:向后以单词为单位移动

            b:向前以单词为单位移动

    ⑦ 上下左右移动

            h:左

            l:右

            j:下

            k:上

    ⑧ 大小写快速切换

            shift+~:快速切换当前字符大小写

    ⑨ 替换、删除

            r:替换光标所在字符(输入r之后再输入其它字符,会用该字符替换当前字符)

            nr:替换光标所在字符后面n个

            x:删除光标所在字符

            nx:删除光标所在字符后面n个

    4.vim底行模式命令

    ① 保存文件

            w:输入w可以保存文件

    ② 退出vim

            q:直接退出,若无法退出,可以加上一个 ! 强制退出

            wq:退出的时候保存文件

    ③ 列出行号

            set nu:输入后,可再每一行前面列出行号

    5.vim配置

            vim最开始只是像记事本一样,很难用,因此需要我们自己去配置,通过配置就可以让vim有很多功能,例如自动补齐,语法高亮,自动缩进等等。

    三.gcc/g++

    1.gcc/g++如何生成一个文件

    gcc test.c -o mytest

    通过上面的指令可以直接生成一个可执行文件mytest。

    如何不加-o生成的可执行文件叫a.out,这里的-o相当于给这个可执行文件重命名。

    (1)预处理

    ① 预处理主要包括宏定义、宏替换、包含文件、条件编译、去掉注释

    ② 得到预处理之后的文件:gcc -E test.c -o test.i

    ③ 一般把预处理之后的文件后缀加.i

    (2)编译(生成汇编)

    ① 编译是检查代码的规范性,是否有语法错误等,检查无误后,把代码翻译为汇编语言

    ② 得到编译之后的文件:gcc -S test.i test.s

    ③ 一般把编译之后的文件后缀加.s

    (3)汇编(转换为二进制代码)

    ① 编译是把汇编语言转换成二进制代码

    ② 得到汇编之后的文件:gcc -c test.s test.o

    ③ 一般把汇编之后的文件后缀加.o

    (4)链接

    ① 链接是去静态库或动态库中找到对应的函数,进行链接。

    ② 链接之后的文件就是可执行文件,既可以通过.o文件得到:gcc test.o -o test

         也可以通过.c文件直接得到:gcc test.c -o test

    2.函数库

            说到链接,就跟函数库有关,函数库分为静态库和动态库。

            我们所实现的C程序没有定义”printf“的函数实现,并且在预处理中包含的”stdio.h“中也只有该函数的声明,而没有定义的函数的实现,那么是在哪实现类似”printf“这样的函数呢?

             在linux中,这些函数被放到了libc.so.6的库文件中去了,在没有特殊指定时,gcc就会去进行查找,也就是链接到了libc.so.6的库函数中去了,这样就可以实现像”printf“这样的函数了,这就是链接的作用。

            

            这里的函数库分为静态库和动态库。

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

            动态库:与静态库相反,动态库在链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为.so,前面的libc.so.6就是动态库。gcc在编译时默认使用动态库。

    四.gdb调试工具

    1.介绍

            gdb是一个调试工具。

            在linux中生成的可执行文件默认是release版本,是不支持调试的,因此想要使用gdb调试,就要加上-g,让生成的可执行文件是debug版本的。

    2.使用

    (1)l:显示代码

    (2)b:打断点

    (3)d:输入断点编号,取消该断点

    (4) s:step 逐语句(会进入函数)

    (5) n:next 逐过程(不会进入函数)        

    (6)display:常显示某个变量

    (7)undisplay:取消常显示

    (8)    p:显示一次某个变量值

    (9)until:跳转到某个指定的行

    (10)r:运行程序

    (11)c:从一个断点跳转到另一个断点

    (12)finish:执行完成一个函数后就停下来

    五.Linux项目自动化构建工具make/Makefile

    1.介绍

            在一个工程中,源文件不计其数,要是通过我们自己挨个去gcc/g++会非常的麻烦,因此可以使用Makefile,Makefile定义一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,或者进行更复杂的功能操作。

            Makefile的好处就是——自动化编译,在Makefile中写好之后,至需要一个make命令,整个工程就可以自动编译,极大的提高了软件开发的效率。

            make是一个命令工具,是一个解释Makefile中指令的命令工具。Makefile是一个文件两个搭配使用,来完成项目自动化的构建。

    2.使用

            我们用一个很简单的代码作为例子。

    1. #include
    2. int main()
    3. {
    4. printf("hello Makefile!\n");
    5. return 0;
    6. }

    我们创建一个文件test.c。

    如果对test.c进行预处理、编译、汇编、链接操作就会得到test.i、test.s、test.o、可执行文件test

    这里要说一下依赖关系和依赖方法:

    依赖关系:

            test,依赖test.o

            test.o,依赖test.s

            test.s,依赖test.i

            test.i,依赖test.c

    依赖方法:

            gcc test.c -o test

    Makefile文件中写:

    1. mytest:test.c
    2. gcc test.c -o test
    3. .PHONY:clean
    4. clean:
    5. rm -f test

    然后输入make命令就可以直接生成可执行文件test,输入clean就可以删掉可执行文件test。

    3.make原理

    ① make会在当前目录下找名字为“Makefile”或“makefile”的文件

    ② 如果找到,它会找文件中的第一个目标文件,上面的例子是test

    ③ 如果test文件不存在,或者test所依赖的后面test.o的文件修改时间要比test这个文件新,那么它就会执行后面所定义的命令来生成test这个文件。

    ④ 如果test所依赖的文件不存在,那么make会在当前文件中找目标为test.o所依赖的文件,如果找到则根据那一个文件的规则生成test.o文件。

    ⑤ make会一层一层的去找文件的依赖关系,直到最终编译出第一个目标文件。

    ⑥ 在找寻的过程中,如果出现错误,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make不会管。

    ⑦ make只管文件的依赖性,如果在找了依赖关系之后,冒号后面的文件还是不再,那么make就停止运行了。

    4.项目清理

            工程是需要被清理的。

            像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显式要make执行,即命令make clean,依次来清除所有的目标文件,以便重新编译。

            但是一般clean的目标文件,我们将它设置为伪目标,用.PHONY修饰,伪目标的特性是:总是被执行的

    六.进度条

    1.行缓冲区

    1. #include
    2. int main()
    3. {
    4. printf("hello Makefile!\n");
    5. sleep(3);
    6. return 0;
    7. }
    1. #include
    2. int main()
    3. {
    4. printf("hello Makefile!");
    5. sleep(3);
    6. return 0;
    7. }

            这两个一个有\n,一个没有,而且结果的现象也不同,上面有\n的先打印出结果,然后等了一会。下面没有的则是先登了一会才打印出结果。这个就与缓冲区有关了。

            缓冲区就是一段内存空间,遇到\n就会让数据立刻刷新出来(行刷新),如果不想用\n,也可以用fflush。

            这里我们注意区分 回车换行的区别,回车是将光标回到当前行的最开始,换行是新起一行。

            回车是\r,而回车+换行是\n。

    2.倒计时

            这里我们先实现一个倒计时程序。

    1. #include
    2. #include
    3. int main()
    4. {
    5. int cnt = 9;
    6. while(cnt)
    7. {
    8. printf("%d\r", cnt--);
    9. fflush(stdout);
    10. sleep(1);
    11. }
    12. return 0;
    13. }

            这个就是靠fflush的刷新来实现。

     3.进度条

            然后我们再来实现进度条:

    1. #include
    2. #include
    3. #include
    4. #define NUM 101
    5. #define STYLE '#'
    6. void process()
    7. {
    8. char bar[NUM];
    9. memset(bar, '\0', sizeof(bar));
    10. const char *lable = "|/-\\";
    11. int cnt = 0;
    12. while(cnt <= 100)
    13. {
    14. printf("加载中:\033[34m%-100s\033[0m[%d%%][%c]\r", bar, cnt, lable[cnt%4]);
    15. fflush(stdout);
    16. bar[cnt++] = STYLE;
    17. //bar[cnt] = '>';
    18. usleep(200000);
    19. }
    20. printf("\n");
    21. }
    22. int main()
    23. {
    24. process();
    25. return 0;
    26. }

    效果: 

             这里我们先给进度条预留空间,然后依次从左往右依次存入数据,并且预定好%的位置,以及后面跟随变化的数组。这里的颜色是可以随便调整的,可以上网搜索。

    七.git

            git:版本控制器

    1.clone

    git clone

     作用:把远端仓库克隆到本地

    2.status

    git status

    作用:显示本地仓库和远端仓库之间的关系

    3.add

    git add

    作用:添加文件

    4.commit

    git commit -m "提交日志"

    作用:将文件添加到本地仓库

    5.push

    git push

    作用:将本地仓库代码提交到远端仓库

    6.pull

    git pull

    作用:当前代码和远端代码不同时,无法提交,pull之后使当前代码与远端代码相同

    7.log

     git log

    作用:查看提交日志

    8.gitignore

    gitignore

    作用:黑名单,属于gitignore中结尾的文件不提交

  • 相关阅读:
    【Java八股文总结】之Linux常用指令
    【审视】Scrum Master的检查清单
    5个设计类宝藏网站分享
    迁移vm到pve
    Docker容器的5个实用案例
    C++ 语法基础课1 —— 变量、输入输出、顺序语句
    EventLoop
    数据结构 - 逻辑结构和物理结构
    msfvenom制作主控与被控端
    C++基础
  • 原文地址:https://blog.csdn.net/qq_60750110/article/details/125680023