【Linux】-- 工具介绍 vim_gcc/g++_gdb

news2025/8/2 19:11:06

目录

Linux中的软件管理工具 – yum

在Linux下安装软件的方式

认识yum

查找软件包

安装

卸载

lrzsz.x86_64

rz

sz

Linux中的编辑器 – vim

vim的基本概念

vim各模式切换

vim命令模式命令

vim底行模式命令

gcc / g++

gcc / g++的作用

gcc / g++语法

预处理

编译

汇编

链接

动态库和静态库

gdb

debug和release

gdb指令


Linux中的软件管理工具 – yum

在Linux下安装软件的方式

在Linux系统下安装软件的方式有以下三种

  • 下载程序的源代码 自己进行编译 得到可执行程序
  • 通过rpm获取安装包 通过rpm命令进行安装 (未解决依赖问题)
  • 通过yum进行安装 本身会考虑依赖关系

通过yum进行安装是我们最常用的一种方式

认识yum

yum是一个在Fedora、RedHat以及CentOS中的前端软件包管理器 能够从指定的服务器自动下载RPM包并且安装 可以自动处理依赖性关系 并且一次安装所有依赖的软件包 无须繁琐地一次次下载、安装

它就可以类比我们的windows上的软件商店

一个服务器同一时刻只允许一个yum运行

yum要工作,必须要联网

查找软件包

我们可以通过下面的命令来查找软件包

yum list

[wzy@VM-24-2-centos lesson2]$ grep list

安装

yum install

[wzy@VM-24-2-centos lesson2]$ sudo yum install sl.x86_64

-y 直接安装 不询问

[wzy@VM-24-2-centos lesson2]$ sudo yum -y install sl.x86_64

卸载

yum remove

[wzy@VM-24-2-centos lesson2]$ sudo yum remove sl.x86_64

-y 直接删 不询问

[wzy@VM-24-2-centos lesson2]$ sudo yum -y remove sl.x86_64

lrzsz.x86_64

和Windows进行文件交互

rz

sz

Linux中的编辑器 – vim

vim的基本概念

vim的本质上是一个多模式的文本编辑器

它主要有三种模式 我们这里会逐一介绍

1. 命令模式 (Normal mode)

在命令模式下 我们可以控制光标的移动以及字符 字或行的删除 复制粘贴 剪贴等操作

2. 插入模式(Insert mode)

只有在插入模式下才能进行文字输入 该模式是我们使用最频繁的编辑模式

3. 底行模式(Command mode)

我们的保存 退出等指令都要在底行模式中进行

vim各模式切换

首先我们使用一张图来理解vim中三种模式之间的联系
 

vim                   默认
                    命令模式  ---->  i a o  插入模式
                             <----   ESC 
                      | ^ 
                    : | | ESC
                      | |
                      | |
                      V
                    底行模式
  • 普通模式通过 按一次 i键 切换到插入模式
  • 普通模式通过 按 :键切换到底行模式
  • 其他两种模式通过 ESC 切换到普通模式
  • 底行模式和插入模式不能互通

下面的字符 n 表示一个具体的数字 比如说 8 12 123等

vim命令模式命令

移动光标相关

  • 「k」:光标上移
  • 「j」:光标下移
  • 「h」:光标左移
  • 「l」:光标右移
  • 「$」:移动到光标所在行的行尾
  • 「^」:移动到光标所在行的行首
  • 「gg」:移动到文本开始
  • 「Shift+g」/「G」:移动到文本末尾
  • 「n+Shift+g」/「n+G」:移动到第n行行首
  • 「n+Enter」:当前光标向下移动n行
  • 「w」:光标从左到右,从上到下的跳到下一个字的开头
  • 「e」:光标从左到右,从上到下的跳到下一个字的结尾
  • 「b」:光标从右到左,从下到上的跳到上一个字的开头

删除相关

  • 「x」:删除光标所在位置的字符
  • 「nx」:删除光标所在位置开始往后的n个字符
  • 「X」:删除光标所在位置的前一个字符
  • 「nX」:删除光标所在位置的前n个字符
  • 「dd」:删除光标所在行    
  • 「ndd」:删除光标所在行开始往下的n行

复制粘贴相关

  • 「yy」:复制光标所在行到缓冲区
  • 「nyy」:复制光标所在行开始往下的n行到缓冲区
  • 「yw」:将光标所在位置开始到字尾的字符复制到缓冲区
  • 「nyw」:将光标所在位置开始往后的n个字复制到缓冲区
  • 「p」:将已复制的内容在光标的下一行粘贴上
  • 「np」:将已复制的内容在光标的下一行粘贴n次

剪切

  • 「dd」:剪切光标所在行
  • 「ndd」:剪切光标所在行开始往下的n行
  • 「p」:将已剪切的内容在光标的下一行粘贴上
  • 「np」:将已剪切的内容在光标的下一行粘贴n次

撤销

  • 「u」:撤销
  • 「Ctrl+r」:撤销刚刚的撤销

大小写切换

  • 「~」:完成光标所在位置字符的大小写切换
  • 「n~」:完成光标所在位置开始往后的n个字符的大小写切换

替换

  • 「r」:替换光标所在位置的字符
  • 「R」:替换光标所到位置的字符,直到按下「Esc」键为止

更改

  • 「cw」:将光标所在位置开始到字尾的字符删除,并进入插入模式
  • 「cnw」:将光标所在位置开始往后的n个字删除,并进入插入模式

翻页

  • 「Ctrl+b」:上翻一页
  • 「Ctrl+f」:下翻一页
  • 「Ctrl+u」:上翻半页
  • 「Ctrl+d」:下翻半页

vim底行模式命令

行号设置

  • 「set nu」:显示行号
  • 「set nonu」:取消显示行号

保存退出

  • 「w」:保存文件
  • 「q」:退出vim,「q!」强制退出
  • 「wq」:保存退出

分屏指令

  • 「vs 文件名」:实现多文件的编辑
  • 「Ctrl+w+w」:光标在多屏幕下进行切换

执行指令

  • 「!+指令」:在不退出vim的情况下 可以在指令前面加上「!」就可以执行Linux的指令 例如查看目录 编译当前代码等

gcc / g++

gcc / g++的作用

gcc和g++分别是GNU的C和C++的编译器

语言从源文件到可执行指令要分为以下四个步骤

  1. 预处理 (去除注释 头文件展开 宏替换 条件编译)
  2. 编译 (将c/c++ 代码翻译成汇编代码)
  3. 汇编 (将汇编代码转化为二进制语言)
  4. 链接 (将汇编过程产生的二进制语言进行连接)
     

gcc / g++语法

gcc/g++ 选项 文件
  • -E 只进行预处理 不生成文件 你需要把他重定向到一个输出文件里面(否则将把预处理后的结果打印到屏幕上)
  • -S 编译到汇编语言
  • -c 编译到目标代码(二进制文件)
  • -o 将处理结果输出到指定文件 该选项后需紧跟输出文件名
  • -static 此选项对生成的文件采用静态链接
  • -shared 此选项将尽量使用动态库,生成文件较小
  • -g 生成调试信息(若不携带该选项则默认生成release版本)
  • -w 不生成任何警告信息
  • Wall 生成所有警告信息
  • -O0/-O1/-O2/-O3 编译器优化选项的四个级别 -O0表示没有优化 -O1为缺省值 -O3优化级别最高
gcc -E xxx.c -o xxx.i       
gcc -S             .s
gcc -c             .o  

预处理

预处理的作用包括下面四个

  • 去除注释
  • 头文件展开
  • 宏替换
  • 条件编译
 gcc -E test.c -o test.i

编译

编译的作用包括下面两个

  • 检查代码语法是否有错误
  • 将代码翻译成汇编语言

代码如下

 gcc -S test.i -o test.s

汇编

汇编的作用主要有一个

  • 将汇编语言翻译成二进制语言

代码如下

 gcc -c test.s -o test.o

 

链接

链接的作用主要有一个

  • 将生成的 .o文件(二进制文件) 进行链接

代码如下

 gcc test.o -o testhv

 

动态库和静态库

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

  1. 静态库是指编译链接时 把库文件的代码全部加入到可执行文件当中 因此生成的文件比较大 但在运行时也就不再需要库文件了 静态库一般以.a为后缀
  2. 动态库与之相反 在编译链接时并没有把库文件的代码加入到可执行文件当中 而是在程序运行时由链接文件加载库 这样可以节省系统的开销 动态库一般以.so为后缀

动态链接:

  • 优点:省空间 bin体积小 加载速度快
  • 缺点:依赖动态库 程序可移植性较差

静态链接:

  • 优点:不依赖第三方库 程序的可移植性较高
  • 缺点:浪费空间

我们的gcc/g++编译器默认使用的是动态链接

我们可以使用file指令查看

 使用ldd指令来查看可执行文件所依赖的库

 

其中的 /lib64/libc.so.6就是c语言标准库

我们可以使用 -static指令来强制进行静态链接

gdb

debug和release

我们在C语言的学习阶段就知道了程序有两种发布版本

分别是 release 和 debug

  • debug版本:程序本身会被加入更多的调试信息 以便于进行调试
  • release版本:不会添加任何调试信息 是不可调试的

我们在linux中默认生成的文件都是release版本的 是不可以使用gbd调试的

如果我们想要它可被调试则需加入debug信息

具体指令如下

 gcc test.c -o test -g

gdb指令

【进入gdb】

  • gdb 文件名

【调试】

  • 「run/r」:运行代码(启动调试)
  • 「next/n」:逐过程调试
  • 「step/s」:逐语句调试
  • 「until 行号」:跳转至指定行
  • 「finish」:执行完当前正在调用的函数后停下来
  • 「continue/c」:运行到下一个断点处
  • 「set var 变量=x」:修改变量的值为x (不常用)

【显示】

  • 「list/l n」:显示从第n行开始的源代码 每次显示10行 若n未给出则默认从上次的位置往下显示
  • 「list/l 函数名」:显示该函数的源代码
  • 「print/p 变量」:打印变量的值
  • 「print/p &变量」:打印变量的地址
  • 「print/p 表达式」:打印表达式的值 通过表达式可以修改变量的值
  • 「display 变量」:将变量加入常显示(每次停下来都显示它的值
  • 「display &变量」:将变量的地址加入常显示
  • 「undisplay 编号」:取消指定编号变量的常显示
  • 「bt」:查看各级函数调用及参数
  • 「info/i locals」:查看当前栈帧当中局部变量的值

【断点】

  • 「break/b n」:在第n行设置断点
  • 「break/b 函数名」:在某函数体内第一行设置断点
  • 「info breakpoint/b」:查看已打断点信息
  • 「delete/d 编号」:删除指定编号的断点
  • 「disable 编号」:禁用指定编号的断点
  • 「enable 编号」:启用指定编号的断点

【退出gdb】

  • 「quit/q」:退出gdb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ 攻防演练演示篇 ] 利用 shiro 反序列化漏洞获取主机权限

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

厦大纪老师chatgpt相关讲座3.7

在线更新数据&#xff0c;迭代学习训练&#xff0c;进而提高模型性能。 比较明显的是API部分&#xff0c;这一步学习的就是intruction,实现人机写作的复杂系统工程 数据充足&#xff0c;维基类似于百度百科 transformer结构更有优势&#xff0c;预测下一个字&#xff0c;模型越…

RK3399平台开发系列讲解(应用开发篇)断言的使用

🚀返回专栏总目录 文章目录 一、什么是断言二、静态断言三、运行时断言沉淀、分享、成长,让自己和他人都能有所收获!😄 📢断言为我们提供了一种可以静态或动态地检查程序在目标平台上整体状态的能力,与它相关的接口由头文件 assert.h 提供。 一、什么是断言 在编程中…

复位和时钟控制(RCC)

目录 复位 系统复位 电源复位 备份区复位 时钟控制 什么是时钟&#xff1f; 时钟来源 二级时钟源: 如何使用CubeMX配置时钟 复位 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a;1. NRST引脚上的低电平(外部复位) 2. 窗口看门狗计数终止(WWD…

51单片机数字电子钟开题报告

目录 选题背景 初步设计方案 芯片的选型 编译环境 关键问题 策略 方案 参考文献 选题背景 数字电子钟是一种受到越来越多人喜爱的钟表&#xff0c;其准确性和稳定性成为设计和研发的重要考虑因素。在现代社会&#xff0c;时间的准确性对于各行各业都非常重要&#xff0…

Http中post/get请求参数接收

1、 Http请求报文 Http请求报文示例图如下&#xff1a; ①是请求方法&#xff0c;GET和POST是最常见的HTTP方法&#xff0c;除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过&#xff0c;当前的大多数浏览器只支持GET和POST&#xff0c;Spring 3.0提供了一个HiddenHttp…

[oeasy]python0100_wintel联盟_intel_微软_microsoft_msDOS_基尔代尔

wintel联盟 回忆上次内容 上次 了解了IBM的 背水一战 IBM 已经不在乎 软硬一体全自主的设计 了而采用了 开放的架构任何 硬件厂商和软件厂商 都可以来合作 以丧失 自主控制力的方式 获得了 对于 PC架构定义的荣誉 最终 后其身而身先外其身而身存 ibm兼容机的开放架构里 有两…

导出GIS | 将EXCEL表格中坐标导出成GIS格式文件

一 前言 EXCEL是我们日常工作学习数据处理的办公软件&#xff0c;操作易上手&#xff0c;几乎人人都会用。EXCEL表格能够处理各种数据&#xff0c;包括经纬度坐标数据&#xff0c;地址数据等等。 有时因工作需要需将表格中地址数据处理为GIS格式的文件&#xff0c;以便能够将数…

Java之内部类

目录 一.内部类 1.什么是内部类 2.内部类存在的原因 3. 内部类的分类 4.内部类的作用 二.成员内部类 1.基本概念 2.成员内部类的注意点 1.成员内部类可以用private方法进行修饰 2.成员内部类可以直接访问外部类的私有属性 3.外部类可以通过对象访问内部类的私有属性 …

量化择时——均线策略及改进方法(第1部分—因子测算)

文章目录道氏理论个股股价走势阶段板块、行业股价走势均线策略交易逻辑均线策略效果测算改进一&#xff1a;设置策略信号偏移量改进二&#xff1a;生成止盈止损信号道氏理论 使用盘面数据&#xff0c;根据计算出的一条或多条均线&#xff0c;判断入场与离场的时机&#xff0c;…

Redis学习(五):事务、持久化及使用Java操作Redis

事务 Redis事务本质&#xff1a;一组命令的集合。一个事务中的所有命令都会被序列化&#xff0c;在事务执行过程中&#xff0c;会按顺序执行。 一次性、顺序性、排他性&#xff01;执行一系列的命令。 Redis单条命令保证原子性&#xff0c;但是事务不保证原子性&#xff01; R…

MySQL面试题-日志

目录 1.MySQL 中常见的日志有哪些&#xff1f; 2.慢查询日志有什么用&#xff1f; 3.binlog 主要记录了什么&#xff1f; 4.Mysql的binlog有几种录入格式&#xff1f;分别有什么区别&#xff1f; 5.redo log 如何保证事务的持久性&#xff1f; 6.页修改之后为什么不直接刷…

Linux系统安装Docker

目录 Linux系统安装Docker 1、如果之前安装过旧版本的Docker&#xff0c;可以使用下面命令卸载 2、安装docker 3、启动docker 4、配置镜像加速 Linux系统安装Docker 前提&#xff1a;Docker CE 支持 64 位版本 CentOS 7&#xff0c;并且要求内核版本不低于 3.10&#xff0…

LearnDash Groups学习群组:您需要了解的一切

大约131k 网站使用 LearnDash。因此&#xff0c;毫无疑问&#xff0c;LearnDash是 WordPress 领域中最受欢迎的 LMS。而且&#xff0c;这是因为它具有强大的功能。但让它更受欢迎的是它与大多数第 3 方扩展很好地集成&#xff0c;并且比现有的任何其他 LMS 都更灵活。群组和群组…

扬帆优配|淡定的周期股走出慢牛,这些超跌大象股低估值

多只大市值股走势良好&#xff0c;超跌的绩优大盘股会否后发先至&#xff1f; 三一集团定下万亿市值方针 三一重工董事长许诺向金牌职工派发500万元巨额奖金刷屏网络&#xff0c;不过奖赏兑现的前提是三一集团的总市值要超越万亿元。 3月4日&#xff0c;在央视《对话》节目中…

同城外卖跑腿系统源码分析

外卖订餐已经成为很多“社畜”日常不可分割的一部分&#xff0c;足不出户&#xff0c;只需要一部电子设备即可在线订餐&#xff0c;并且可提供的选择非常多样化&#xff0c;与传统的电话订餐外卖模式相比也更便捷的多。 因此&#xff0c;同城外卖跑腿系统源码得以爆火&#xff…

微服务里的小问题

1.微服务为什么设置不同的namespace 为了实现三种服务三种情况下的隔离。 2.为什么要用nginx为naocos集群结点做负载均衡&#xff1f; 2.1 正向代理 就像我们访问外网需要一个代理。 2.2 反向代理 我们不需要访问真实的ip&#xff0c;只需要访问 这个服务的代理服务器即可&a…

【极致简洁】Python tkinter 实现下载工具,你想要的一键获取

嗨害大家好鸭&#xff01;我是小熊猫~开发环境本次项目案例步骤成品效果【咱追求的就是一个简洁】界面如何开始&#xff1f;1.导入模块2.创建窗口【这步很重要】功能按键1.创建一个下拉列表2.设置下拉列表的值3.设置其在界面中出现的位置 column代表列 row 代表行4.设置下拉列表…

考研复试——计算机组成原理

文章目录计算机组成原理1. 计算机系统由哪两部分组成&#xff1f;计算机系统性能取决于什么&#xff1f;2. 冯诺依曼机的主要特点&#xff1f;3. 主存储器由什么组成&#xff0c;各部分有什么作用&#xff1f;4. 什么是存储单元、存储字、存储字长、存储体&#xff1f;5. 计算机…

【PyTorch】教程:torch.nn.Hardswish

torch.nn.Hardswish 原型 CLASS torch.nn.Hardswish(inplaceFalse) 参数 inplace (bool) – 内部运算&#xff0c;默认为 False 定义 Hardswish(x){0if x≤−3,xif x≥3,x⋅(x3)/6otherwise\text{Hardswish}(x) \begin{cases} 0 & \text{if~} x \le -3, \\ x & \te…