【Linux】谈谈vim, gdb,yum,gcc&g++的使用

这篇具有很好参考价值的文章主要介绍了【Linux】谈谈vim, gdb,yum,gcc&g++的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一, yum ——linux软件包管理器

 1. 软件包是啥子?

 2.  yum基本使用 

1. 步骤: 

2. 开发工具推荐(centos 7.6)

二,vim —— linux文本编辑器

1. Normal mode  ——  命令模式(记不住没关系,多练就行)

2.  last line  mode——   末行模式 (如何进入;shift :)

3. Insert mode ——插入模式(同之前的编写代码方法类似,略)

4. vim 简单配置

步骤:

5. sudo 指令

 三. gcc & g++使用

1. gcc 编译器

2. 静态库 & 动态库

3. g++ 编译器

四,gdb —— linux 调试器

1. 安装 gdb   (centos7)

2. 背景        

3. 开始使用 

五, make  &  Makefile  ——自动化构建工具

1. 背景

2. 构建

六,手搓小程序——进度条 

1.   回车 &  换行的概念

2. 行缓冲区

3.  再聊输入输出流

4. 手搓一个倒计时

5. 手搓进度条


一, yum ——linux软件包管理器

1. 软件包是啥子?

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

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

 2.  yum基本使用 

1. 步骤: 

查找: 

yum   list   |   grep   ‘软件名’  (先从软件包目录中查找)

yum   list   'sl.x86_64'              (也可以直接文件名查找)

安装: 

yum   intstall  sl.x86_64        (安装对应文件)    

卸载:

yum   remove  '软件名'

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

 补充一下:【Linux】谈谈vim, gdb,yum,gcc&g++的使用

2. 开发工具推荐(centos 7.6)

man手册:

安装指令:yum intstall -y  man-ages

windows与Linux下的拖拽工具:

yum install lrzsz.x86_64

二,vim —— linux文本编辑器

用法:vim  text.c  (如果未存在此文件,则会创建一个新文件) 

vim 存在三种模式:  

(1. 正常/普通/命令模式(Normal mode) ——进入vim的默认模式

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

(2. 插入模式(Insert mode)  ——  在默认模式下按下   a, i, o    键

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁
的编辑模式

(3. 末行模式(last line mode) 

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下, shift+:  即可进入该模
式。要查看你的所有模式:打开 vim ,底行模式直接输入,比如: 保存退出 wq ,其中! 是强制的意思。

1. Normal mode  ——  命令模式(记不住没关系,多练就行)

建议都自己试一遍: 

 【Linux】谈谈vim, gdb,yum,gcc&g++的使用

多行注释

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

取消多行注释: 

 【Linux】谈谈vim, gdb,yum,gcc&g++的使用

2.  last line  mode——   末行模式 (如何进入;shift :)

 【Linux】谈谈vim, gdb,yum,gcc&g++的使用

3. Insert mode ——插入模式(同之前的编写代码方法类似,略)

(注意: vim编辑器中有更多的指令,但这些指令也足够了) 

4. vim 简单配置

功能: 我们回想起我们使用vs时的,vs把帮我们自动补齐,行号,语法高亮这让我们使用很方便,高效;在vim下设置简单配置也可以达到这样的效果。

注意: 1. root有自己的vim配置    2. vim一旦配置只影响当前用户)

步骤:

1. 寻找用户中是否有  .vimrc 的隐藏文件,没有则创建一个,这个文件将是vim配置数据的集合。

2 用vim打开.vimrc 文件。

3. 去网上寻找vim的相关配置代码,即可。

(注:这里是大佬已经做好的插件vimforcpp,在使用的用户(不建议在root用户下安装)下输入下面指令:

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

重新链接服务器即可

5. sudo 指令

 前面我们了解过sudo 临时(权限提升)登陆root的操作,但会返回:不是信任关系的信息。这次我们通过修改vim修改信任关系。

在root身份下用vim 打开 /etc/sudoers路径

 vim   /etc/sudoers

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

  1. 保存文件时,如果出现“readonly”选项设置的错误,可以按照错误提示中的建议,在保存命令后加上“!”来强制保存,例如:

    :wq!

    这样就可以强制保存sudo文件并退出编辑模式。

  2. 退出终端窗口。

 三. gcc & g++使用

 1. gcc 编译器

这里不做详细解释,编译过程具体看这篇文章 详解C语言预处理&程序环境_花果山~~程序猿的博客-CSDN博客

这里只做指令截断分享,通过对过程的截断并存放至一个文件中,方便我们查看其中的操作

用法: gcc  [选项]  [目标文件]  -0  [新文件]

-o : 可以理解为产生目标

(1. 预处理

比如: 

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

(2. 编译

比如:  

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

(3. 汇编

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

(4. 链接

历史背景: 最早期的程序员大多是一群科学家,他们通过给计算机输入二进制语言进行操作(也就是机器语言),随着时间的推移发现,二进制实在太晦涩,于是科学家们将一些常见二进制指令打包成一条指令,写出了汇编语言,后来丹尼斯*里奇发明了C语言, 后来大家运用时发现,面向过程效率太低,c++, java,python等面向对象语言出现了。这一路走来,语言越来越精简,越来越封装,但计算机还是只认识二进制,语言的翻译就会沿着时间线,利用前人的努力,逐渐底层,逐渐难以理解,这是积淀的过程

2. 静态库 & 动态库

首先我们以张图来初步认识静态库&动态库 

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

那我们来测试一下一个文件,看看是否存在动态库依赖。

 【Linux】谈谈vim, gdb,yum,gcc&g++的使用

 那么如果我们想用静态库来编译呢?

使用静态库来编译用法:gcc [文件]  -o [新文件]  -static 

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

注意:如果出现下面反馈,就是静态库未安装

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

 这是centos 7.6  C语言静态库

在root身份下输入:yum install glibc-static   

3. g++ 编译器

首先我们查看我们是否拥有g++编译器

输入指令:g++  -v

出现这个表示未安装 

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

 没安装,现在安装 在centos 7 的root身份下输入以下指令:

yum install gcc gcc-c++

等待安装完成即可(注意:C++向下兼容C,所以g++可以编译C源码,但我们一般不这样用)

四,gdb —— linux 调试器

1. 安装 gdb   (centos7)

查看gdb是否安装:gdb  -v 

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

则输入快速安装指令 sudo yum -y install gdb

反之则安装成功。  

2. 背景        

(1. 程序执行有两种版本 debug 和 release 版本。

(2.  g++编译器默认编译出 release版本,所以想要编译出debug版本一定要加入debug信息。末尾加上-g

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

3. 开始使用 

gdb   [编译文件]
退出: ctrl + d quit 调试命令(我只能说慢慢来,用多了自然记住了)
指令内容:

listl 行号:显示编译文件的源代码,接着上次的位置往下列,每次列10行。

listl 函数名:列出某个函数的源代码。

run:运行程序

n next:单条执行——理解为逐过程

sstep:进入函数调用——理解为逐语句

break(b   n) 行号:在某一行设置断点

break 函数名 (b    函数名):在某个函数开头设置断点

info break (i   b) :查看断点信息

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

display 变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay  +  跟踪值代号:取消对先前设置的那些变量的跟踪

finish:执行到当前函数返回,然后停下来等待命令

continue(c):从当前位置开始连续执行程序,到达下一个断点停止

until X行号:跳至X

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

p 变量:打印变量值。

set var:修改变量的值

info breakpoints  (i  b):参看当前设置了哪些断点

breaktrace    (bt):查看各级函数调用及参数

infoi) locals:查看当前栈帧局部变量的值

quit:退出gdb

在linux下调试,可以做到快速调试,不需要移植代码,对linux调试我们需要有了解的程度,知道怎么打取消断点,跟踪变量。

五, make  &  Makefile  ——自动化构建工具

1. 背景

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
  • 在VS中编译器会帮我们做,但在Linux中我们得自己构建。 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
  • makefile带来的好处就是——“自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:DelphimakeVisual C++nmakeLinuxGNUmake。可见,makefile都成为了一种在工程方面的编译方法。
  • make是一条命令makefile是一个文件,两个搭配使用,完成项目自动化构建。

 makefile 这个文件存放文件的 依赖关系&依赖方法

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

2. 构建

1. 创建一个Makefile文件。

2. 在Makefile 文件中创建 依赖关系&依赖方法。

3. make 指令更新数据,这样我们就不需要每次gcc编译文件了,只要执行编译出的文件。

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

4. 进阶玩法(以后经常用

  Test:Test.cpp
       g++  std=c++11 -o   $@    $^ -g

  1 Test:Test.cpp
  2   g++ -o $@ $^ -g  // $@代表Test,$^代表所依赖的对象,可以是多个文件(这样可以少写文件名)。                                   
  3 
  4 .PHONY:clean
  5 clean:
  6   rm -f Test

5. 如何同时编译多个程序(重要

可以以下面这个为例:

  2 .PHONY:all
  3 all: mypro Test
  5 mypro:mypro.cpp 
  6   g++ std=c++11 -o $@ $^
  7 
  8 Test:Test.cpp
  9   g++ -std=c++11 -o $@ $^
 10 
 11 .PHONY:clean
 12 clean:
 13   rm -rf Test mypro                              
 14 

六,手搓小程序——进度条 

1.   回车 &  换行的概念

回车: 回到当前行的开头,也就是 "\r"

换行: 列不变,光标换至下一行

" \n"则是有 回车& 换行两个意思

 2. 行缓冲区

我们尝试运行运行下面代码:

#include <stdio.h>
#include <unistd.h>
int main()
{
 printf("hello Makefile!\n");
 sleep(3);  // 停止执行3秒
 return 0;
}

我们发现 ,字符串马上被打印出来,3秒后程序才执行完毕。

我们看下面的代码:

#include <stdio.h>
#include <unistd.h>
int main()
{
 printf("hello Makefile!"); // 我们将\n符去掉
 sleep(3);
 return 0;
}

 这时我们会发现,字符串并没有立刻输出,而是过3秒后才输出。

结论: printf 在打印一个字符串时,不会立即打印,会放在C语言级别的行缓存器中,当遇到"\n"符时才会刷新显示器。

(这里不仅仅有这些知识,目前只分享这些,后面会逐步加深。) 

3.  再聊输入输出流

在C语言中我们曾聊过输入输出流,见此文章详解文件操作&相关函数(超详细!)_花果山~~程序猿的博客-CSDN博客 

在C语言中,默认会打开 三个输入输出流文件分别是 stdin stdout stderr

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

 面对第2小节的行缓存,那有什么方法可以立即刷新,行缓冲区呢?有的

int fflush(FILE *stream) ——   流刷新

 代码修改:

#include <unistd.h>
#include <stdio.h>
int main()
{
 printf("hello Makefile!"); // 我们将\n符去掉
 fflush(stdout)   //刷新输出流
 sleep(3);
 return 0;
}

从结果表现来看,字符串被立即打印,fflush刷新流确实可以。

4. 手搓一个倒计时

代码:

#include <unistd.h>
#Inlcude <stdio.h>

int main()
{
 int i = 10;
while(i > -1)
{
  printf("%d\r", i);
  fflush(stdout);
  i--;
}
 
 return 0;
}

结果我们会发现这样的结果:10   90  80  70 ....  这是因为先打印的是 10占两个字符位,后面的只占一个字符位,所以只更新一个字符位且 \r是回到该行的首字符,因此会有这样的结果。(注: 显示器只会显示字符

优化方式:%d  写成 %2d

5. 手搓进度条

铺垫完成后,我们开始制作进度条

我们以 “=” 来充当进度单位,实现。思路:用一个存100+ 1个’\0‘的字符数组,存放进度条。代码如下:

#include <stido.h>
#include <string.h>
#include <unistd.h>   
int main()
{
    int n = 100;
    char str[101];
    memset(str, '\0', sizeof(str));
    for( int i = 0; i <= 100; i++ )
    {
      printf("[%-100s][%d%%]\r", str, i); 
      fflush(stdout);
      str[i] = '=';
      usleep(50000);                                                                                           
     }
    printf("\n");
    return 0;
}

【Linux】谈谈vim, gdb,yum,gcc&g++的使用

结语

本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论;如果给小伙伴带来一些收获请留下你的小赞,你的点赞和关注将会成为博主创作的动力。文章来源地址https://www.toymoban.com/news/detail-481694.html

到了这里,关于【Linux】谈谈vim, gdb,yum,gcc&g++的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】Linux工具篇(yum、vim、gcc/g++、gdb、Makefile、git)

    🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛹Linux   🛸C++ 📕 学习格言:博观而约取,厚积而薄发 🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与诸君一

    2024年02月12日
    浏览(36)
  • Linux中的工具:yum,vim,gcc/g++,make/makefile,gdb

    目录 1、yum 1.1 查看软件包:  1.2 安装软件包 1.3 卸载软件 2、vim 2.1 vim的三种模式 2.2 vim的基本操作 2.3. vim正常模式命令集 2.3.1 插入模式 2.3.2 移动光标 2.3.3 删除文字 2.3.4 复制 2.3.5 替换 2.3.6撤销上一次操作 2.3.7 更改 2.3.8 跳至指定的行 2.4. vim末行模式命令集 3、gcc/g++ 3.1 预处理

    2024年02月10日
    浏览(39)
  • [Linux][环境配置][yum][vim][gcc/g++][gdb][makefile][git]详细讲解

    本篇文章以Centos为例 通过 yum list 命令可以罗列出当前一共有哪些软件包,由于包的数目可能非常之多, 使用 grep 命令只筛选出我们关注的包 yum list | grep sl 注意事项: 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构 “x86_64” 后缀表示64位系统

    2024年04月13日
    浏览(35)
  • Linux中的开发工具(yum,vim,gcc/g++,gdb,Makefile,git)

    yum(Yellow dog Updater,Modified)是Linux下非常常用的一种 包管理器 。主要应用在Fedora,RedHat,Centos等发行版上。 和手机上的软件商店类似,我们可以使用 yum 来下载各种我们想要的软件包。使用 yum 时必须联网。 yum 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装

    2024年02月08日
    浏览(33)
  • 【Linux】vim(附配置sudo)、yum、gcc、g++、gdb、make/Makefile工具汇总

    (一)历史沉淀 我们在安装一个软件之前,需要先下载对应的软件包,但是这个软件包并不存在于我们本地的计算机磁盘,而是存在于远端服务器上;那么计算机如何知道该软件存在于具体的哪一台服务器上呢? 对于电脑来说,我们一般通过搜索对应软件的官网来得到相应

    2024年02月13日
    浏览(38)
  • 【Linux】软件包管理器 yum和编辑器-vim的基本使用

    我们在安装一个软件之前,需要先下载其对应的软件安装包,但是这个软件安装包并不存在于我们本地电脑的磁盘上,而是存在于远端的服务器上,对此,我们可能就有疑问,那么我们的计算机是如何得知我们下载的软件在哪个服务器上呢? 对于我们的电脑来说,我们可以到

    2024年02月03日
    浏览(36)
  • Linux GCC,GDB,Shell脚本,Vim的简单使用

    GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器 编译一个简单的.c程序: 四步分开写: 分成两步: 一步到位:(这个hello就是可执行文件,存放程序结果) 一下编译多个源文件 gcc -o hello hello.c这种一步到位的方法会将文本文件直接转化成可执行文件,这

    2024年02月09日
    浏览(52)
  • Linux开发工具-vim-gcc-gdb指令及使用

    目录 linux软件包管理器yum(apt) linux开发工具 linux编辑器-vim使用 linux编译器-gcc/g++使用 linux调试器-gdb使用 linux项目自动化构建工具-make/makefile linux第一个小程序-进度条 使用github创建项目 使用git命令 我们前面学了关于linux的基本指令和基本权限的一些相关知识,那么我们今天

    2024年03月10日
    浏览(47)
  • Linux:基础开发工具之yum,vim,gcc的使用

    本篇主要总结的是Linux下开发工具 yum vim gcc/g++ 什么是yum? 不管是在手机移动端还是 pc 端,不管是什么操作系统,当用户想要下载一些内容或者工具的时候,都需要到一个特定的位置进行下载,例如在手机上,要下载一些应用的时候就可以去对应的应用商店下载 而在Linux系统

    2024年02月08日
    浏览(35)
  • Linux基础环境开发工具的使用(yum,vim,gcc,g++)

    首先先说明一点: Centos系统适用于yum 而Ubanto适用于apt-get 在Linux中我们也要进行工具/程序/指令的安装,检查和卸载, 而我们安装软件的方式: 1.源代码安装-需要进行交叉编译的工作 一般那些很强的程序员中的大佬才能拿捏 2.rpm包直接安装,也很麻烦 3.yum直接安装 这就需要用到y

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包