IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux的基本开发工具(vim,gcc,gdb,make/Makefile) -> 正文阅读

[系统运维]linux的基本开发工具(vim,gcc,gdb,make/Makefile)

准备

博主:大大怪先森(记得关注哦!)
编程环境:xshell(点击下载)
所示代码:码源



前言

本文将浅谈一下在linux操作环境下一些基本开发工具的使用问题!!!


提示:以下是本篇文章正文内容

一、linux的基本工具

在这里插入图片描述

二、linux编译器

1.vi/vim的使用

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows

2.1.1基本概念

vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command >mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

  • 正常/普通/命令模式(Normal mode):
    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
  • 插入模式(Insert mode)
    只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
  • 末行模式(last line mode)
    文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入
    在这里插入图片描述

2.1.2vim的正常命令操作集

vim插入模式:

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

vim命令模式:

  • 移动光标
  • 左上下右:h(左)j(上)k(下)l(右)
  • 光标位置锚点:shift + ^(行首),shift + $(行尾)
  • 起始行:gg
  • 结束行:shift + g
  • 指定行:n +shift + g
  • 按照单次为单位向后移动:b/w
  • 文本编译
  • 复制当前行:yy
  • 复制当前行以及之后的n行,包括当前行:nyy
  • 撤销误操作:u
  • 粘贴:p,一次粘贴多行:np
  • 删除当前所在行:dd(ndd支持删除多行)
  • 剪切效果:dd -> p
  • 快速大小写切换:shift + ~
  • 从左向右删除光标之后的字符:x
  • 替换光标所在的字符: r
  • 替换模式,直接对多个模式内容进行替换:shift + r
  • 撤销最近操作:ctrl +r

vim底行操作:

  • 调出行号:set nu
  • 多文件操作:ctrl +w + w
  • 保存:w
  • 退出:q
  • 强制:!

注意:vim配置在自己的文件操作里面,只会影响当前用户的配置不会影响其他用户的配置
在这里插入图片描述

2.1.3vim总结

三种模式

  • 命令模式
  • 插入模式
  • 底行模式

当然vim模式不仅仅只是当前我们简单的讲解得三种模式,其他的模式各位大大可以自行探索,本人不再过多讲解

2.gcc/g++的使用

2.1gcc如何完成

2.1.1 基础背景

  1. 预处理(进行宏替换)
  2. 编译(生成汇编)
  3. 汇编(生成机器可识别代码)
  4. 连接(生成可执行文件或库文件)

2.1.2基础格式

gcc [选项] 要编译的文件 [选项] [目标文件]
在这里插入图片描述

2.2gcc完成过程

2.2.1预处理

预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
预处理指令是以#号开头的代码行。
实例: gcc –E test.c –o test.i
选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序
在这里插入图片描述
在这里插入图片描述

2.2.2编译

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的>工作,在检查无误后,gcc 把代码翻译成汇编语言。
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
实例: gcc –S test.i –o test.s
在这里插入图片描述

2.2.3汇编

汇编阶段是把编译阶段生成的“.s”文件转成目标文件
读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
实例: gcc –c test.s –o test.o
在这里插入图片描述

2.2.4链接

在成功编译之后,就进入了链接阶段
实例: gcc test.o –o mytest
在这里插入图片描述

2.3函数库(重要的一个概念)

函数库一般分为两种:动态库和静态库

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”
  • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc test.o –o test
  • gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证
    在这里插入图片描述

三、linux的调试器

3.1gdb基础知识

gdb调试程序必须是debug版本,然而在linux下生成的可执行程序默认是releas版本,所以需要我们自己加上 -g进行更改
在这里插入图片描述

3.2gdb的使用

  • list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:单条执行。
  • s或step:进入函数调用
  • break(b) 行号:在某一行设置断点
  • break 函数名:在某个函数开头设置断点
  • info break :查看断点信息。
  • finish:执行到当前函数返回,然后挺下来等待命令
  • delete breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • until X行号:跳至X行
  • quit:退出gdb

四、linux的自动化构造工具

make/Makefile

make是指令,Makefile是文件
文件和文件之间互相依赖关系
在这里插入图片描述在这里插入图片描述

linux的第一个小项目-进度条

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#define NUM 100
int main()
{
  char bar[NUM + 1];
  memset(bar,'\0',sizeof(bar));
  int i = 0;
  const char* lable = "|/-\\";
  while(i <= 100)
  {
    printf("[%-100s][%d%%][%c]\r",bar,i,lable[i % 4]);
    fflush(stdout);
    bar[i] = '=';
    bar[i+ 1] = '>';
    i++;
   usleep(50000);
  }
  printf("\n");
  return 0;
}

效果展示:
在这里插入图片描述

结语

希望本篇文章能给各位带来帮助,如有不足还请指正!!!
码字不易,各位大大给个收藏点赞吧!!!

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 23:03:00  更:2022-03-10 23:03:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:30:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码