Linux:工具(vim,gcc/g++,make/Makefile,yum,git,gdb)

news2024/12/29 6:57:24

目录

---工具功能

1. vim

1.1 vim的模式

1.2 vim常见指令

2. gcc/g++

2.1 预备知识

2.2 gcc的使用

3.make,Makefile

make.Makefile的使用

4.yum

--yum三板斧

5.git

--git三板斧

--Linux下提交代码到远程仓库

6.gdb

6.1 gdb的常用指令


学习目标:

1.知道这些工具的功能

2.掌握这些工具的基本使用

---工具功能

编写代码         -- vim

编译代码         -- gcc ,g++

调试代码         -- gdb

代码管理         -- git

运行/自动化构建程序 --make/Makefile

1. vim

1.1 vim的模式

1.命令行模式  2.编辑模式   3.低行模式

1.2 vim常见指令

--默认打开

1.命令模式(默认打开的模式)

--输出 i 即可写代码 (编辑/插入模式)

--回到命令模式:按Esc

--退出:在命令模式当中输出shift + :

-w 保存 -q 退出 -wq 保存并退出 -!强制

--命令行模式指令

--编辑

  • yy:将当前光标所在的行,复制                  nyy(n表示具体的数字)
  • p:将复制行进行粘贴                                  np
  • dd:将当前光标所在的行,剪切(删除)   ndd(删除/剪切n行)
  • u:撤销历史操作
  • ctrl + r :撤销u操作
  • shift + ~ :大小写切换
  • shift + r:替换(进入替换模式)
  • r:替换光标所在的字符,支持nr
  • x or X(shift + x):删除光标所在的字符,包括之前或者之后 支持nx

--光标移动

  • gg:光标定位到文件的最开始
  • shift + g :光标定位到文件的结尾
  • n + shift + g :光标定位到文件的任意行
  • shift + 6(^):光标定位到当前行的最开始(上)
  • shift + 4 ($):光标定位到当前行的最结尾(下)
  • w,b:以单词为单位进行光标的前后移动(左右)
  • h左,j下,k上,l 右

--底行模式

  • set nu/nonu :调出行号,或者取消行号
  • vs 文件名 :分批操作
  • w:写入,w!(强制)
  • q:退出, q!(强制)
  • ctrl + ww :光标跳转
  • !  +  cmd:不退出vim执行对应的指令(执行命令,编译,运行,查看man手册)

示例:

--set nu/nonu :调出行号,或者取消行号

set nu/nonu   显示/取消行号

--vs 文件名 :分批操作

vs  +  文件名     分批操作

--ctrl + ww :光标跳转

ctrl + ww    //光标跳转

-- !  +  cmd:不退出vim执行对应的指令

! man 3 printf

2. gcc/g++

2.1 预备知识

gcc是一个专门编译链接C语言的编译器 g++(C++)

一、程序翻译过程:

文本的C -->计算机二进制

  • 1.预处理:(a.去注释 b.宏替换 c.头文件展开 d.条件编译)
  • 2.编译(C ->汇编)
  • 3.汇编(汇编 -> 可重定向二进制目标文件)
  • 4.链接(链接 -> 多个.o ,.. ,.obj ->合并成一个可执行).exe

(gcc/g++ 也要遵守)


二、动静态库 --- (感性的认识)

  • 动态链接:将库中我要的方法地址,填入到我们的可执行程序中,建立关联(节省资源)
  • 静态链接:将库中方法的实现,拷贝到我们的可执行程序中

一般链接的过程,两种方式:

a.动态链接         -         需要动态库

b.静态链接         -         需要静态库

Linux: .so(动态库) .a(静态库)

windows: .dll(动态库) .lib(静态库)

注:gcc和g++默认形成的可执行程序是动态链接的

2.2 gcc的使用

gcc 文件名 -o 新生成的文件名

其它选项:

  • gcc -E mytest.c -o mytest.i (预处理)开始翻译直到预处理完成
  • gcc -S mytest.i -o mytest.s (编译)开始翻译直到编译完成
  • gcc -c mytest.s -o mytest.o (汇编)开始翻译直到汇编完成
  • gcc mytest.o -o mytest.o (链接)  (mytest.o 可重定向目标文件)

示例:

gcc test2.c -o test2

3.make,Makefile

make.Makefile的使用

1.make && makefile

make是一个命令

makefile是一个文件

--使用

touch Makefile         建立Makefile文件

vim Makefile             编写Makefile(a.依赖关系 b.依赖方法)

mytest:test.c (依赖关系)
    gcc test.c -o mytest (依赖方法)

.PHONY:clean(伪目标)
clean:
    rm -f mytest       

调用:

make (构建)
make clean (清理)

makefile指令是从上到下扫描的

注:clean 总是被执行的:总是会根据依赖放关系,执行依赖方法

--在上面的例子里,可以重复执行clean,但不能重复执行mytest(没被.PHONY修饰)

        --你在Makefile中定义一个目标,与当前目录中存在同名的文件时,Make会默认认为这个目标是一个文件,并尝试根据文件的时间戳来判断是否需要重新构建。

提问:makefile是如何知道我的文件是最新的?

--根据最新的修改时间

示例:

1.创建Makefile

touch Makefile

2.编写Makefile

vim Makefile

3.调用:根据写好的Makefile自动生成可执行文件,并进行清理:

make     //构建

make clean  //清理

--可以重复执行make clean(其被.PHONY修饰)

通过使用.PHONY,告诉Make,这个目标是伪目标,不要期望生成一个同名文件,只需执行其中定义的命令。

4.yum

--yum三板斧

1.yum list 列出能下的软件

--yum list | grep sl (将所有包含sl文件的名称显示出来)

2.yum install

-- sudo yum install -y                 安装软件(-y表示默认认可,不需要再问用户)

3. yum. remove 你的软件         移除软件(一般要加sudo)

5.git

--说明

git用于管理代码,git的精华:多人协作开发,(学习阶段,大多数自己写代码,暂不涉及

下面说明怎么使用git提交代码到自己的远程仓库

--git三板斧

正常情况:

  • git add 你的文件 #添加我们的代码到本地仓库
  • git commit -m "这里必须写提交日志"
  • git push

其它情况:

  • 1.git log #查看提交记录
  • 2.git pull #同步仓库
  • 3.git rm 文件 #删除本地仓库的文件

删除本地仓库文件后,再git commit -m " 日志" git push

远程仓库里的文件会被删除

--.gitignore # 不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore

修改本地仓库文件后,再add,commit,push就能将远程仓库的文件修改

--若出现提交失败,可能是仓库未同步,git pull再提交

--Linux下提交代码到远程仓库

配置环境:

第一次提交需要输入下面的指令:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

这两个自行输入即可(这个是用来说明你是谁的,git支持多人协作,查看日志的时候可以看到是谁提交的代码)

在克隆仓库/提交代码的时候,应该会让你输入你gitee的账号名和密码(根据它的提升输入即可)

1.在Linux环境下输入:git clone 仓库网址

这里可以看到就把仓库克隆过来了

git仓库就是.git 文件

2.使用三板斧提交写好的文件就行:

git add test.c

git commit -m "提交测试"

git push

这里push后要求输入gitee的用户名和密码

然后就把写好的文件提交到远程仓库了

6.gdb

6.1 gdb的常用指令

gdb 文件名 (调试)

  •  l 0                                  --从第0行开始显示代码
  • r                                      --开始调试,如果没有设置断点,就直接运行结束
  • b 行数                             --打断点 (会形成断点编号,可用info查看)
  • info b                               --查看断点
  • d 断点编号                      --删断点
  • disable 断点编号            --使能(打开)
  • enable 断点编号             -- 关闭
  • p 变量名                          --打印变量内容:
  • n                                      --逐过程 (相当于vs中的F10)
  • s                                      --进入函数(相当于vs中的F11)
  • bt                                     --查看当前调用的堆栈
  • finish                                --函数跑完就停下
  • display 名称                     --设置常显示
  • undisplay 编号                 --取消常显示
  • until 行数 (不建议)      --跳到指定行数
  • c                                      --运行到下一个断点出就停下来
  • quit                                  --退出

补充:

--gdb会记录最近一条命令,如果命令无变化,可以直接回车

修改特定变量:set var 变量 = 数值(vs中监视窗口,可以给变量赋值查看)

示例:

因为gcc,g++默认形成的可执行程序式release的,所以无法直接调试

解决:使用gcc编译的时候,添加-g 选项,将其改为debug方式发布

我写了一个打印1-100的和的文件,现在对其调试

先编译,生成debug版本的运行文件

 gcc  test.c  -o   test -g   //生成Debug版
 gdb  test

-- l  0 (从第0行开始显示代码)

--打断点: b 行数

--查看断点 info b

--删断点 d 断点编号

--打印变量内容: p 变量名

--逐过程 n (相当于vs中的F10)

--进入函数 s (相当于vs中的F11)

--查看当前调用的堆栈 bt

--函数跑完就停下 finish

--设置常显示 display 名称

--取消常显示 undisplay 编号

--运行到下一个断点出就停下来 c

这里我打了两个断点:(17,19行)

使用c后直接跳转到下一个断点19

补充:

gcc和g++默认形成的可执行程序是动态链接的

gcc,g++默认形成的可执行程序式release的,所以无法直接调试

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

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

相关文章

OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理

前言:在部分大厂笔试时经常会使用OJ题目,这里对《华为机试》和《剑指offer》中的部分题目进行思路分析和讲解,希望对各位读者有所帮助。 题目来自牛客网,欢迎各位积极挑战: HJ73:计算日期到天数转换_牛客网 JZ17:打印…

17|诗中哲学:读了这些理趣诗之后,我悟了!

好诗相伴,千金不换。你好,我是天博。 今天,我们要讲的主题,仍然是“见众生”。在“见众生”的前几讲里,我们讲的都是诗人面对众生感性的一面,比如杜甫的悲悯啦、刘禹锡的耿直啦,还有女性的视角…

迅为STM32MP157开发板安装Qemu-User-Static工具

QEMU 是专门模拟不同机器架构的软件,在 ubuntu 中对其支持良好,若需要挂载 ubuntu armhf 版本的文件,必须安装 qemu-user-static 工具。 首先 Ubuntu 下使用命令“sudo apt-get install qemu-user-static”安装,安装过程中按 y 继…

基于Java+SpringBoot+Vue前后端分离个人博客系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

浅分析安防视频监控平台EasyCVR视频融合平台接入大量设备后如何维持负载均衡

安防视频监控平台EasyCVR视频融合平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备…

Pycharm配置及使用Git教程

文章目录 1. 安装PyCharm2. 安装Git3. 在PyCharm中配置Git插件4. 连接远程Gtilab仓库5. Clone项目代码6. 将本地文件提交到远程仓库6.1 git add6.2 git commit6.3 git push6.4 git pull 平时习惯在windows下开发,但是我们又需要实时将远方仓库的代码clone到本地&…

OJ练习第163题——反转字符串中的单词

反转字符串中的单词 力扣链接:151. 反转字符串中的单词 题目描述 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空…

南方科技大学博士研究生奖助学金,深圳大学

目录 南方科技大学 中南大学 南京大学 厦门大学 苏州大学 中南财经政法大学 深圳大学 南方科技大学 https://ocean.sustech.edu.cn/ocean/public/upload/download/3/2.pdf 南方科技大学的在读研究生,每人每年都会得到40000元的补助,这40000块钱分…

Redis集群服务器

集群简介 试想有一家餐厅,如果顾客人数较少,那么餐厅只需要一个服务员即可,如图1。但是,当顾客人数非常多时,一个服务员是绝对不够的,如图2。此时,餐厅需要雇用更多的服务员来解决大量访问&…

运算符重载(个人学习笔记黑马学习)

1、加号运算符重载 #include <iostream> using namespace std; #include <string>//加号运算符重载 class Person { public://1、成员函数重载号//Person operator(Person& p) {// Person temp;// temp.m_A this->m_A p.m_A;// temp.m_B this->m_B p…

算法:移除数组中的val的所有元素---双指针[2]

1、题目&#xff1a; 给你一个数组 nums和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组…

外包干了2个月,技术退步明显了...

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年8月份&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

AFG EDI 解决方案

AFG一直是汽车行业出境物流的专家&#xff0c;不仅运输汽车&#xff0c;同时也提供模块化IT解决方案&#xff0c;用于接收、控制、互联以及整个车辆调度过程的可视化和监控。 对于物流行业而言&#xff0c;如果已经确定了供应链整合的目标&#xff0c;但却没有明确的计划及足够…

渗透测试:Linux提权精讲(四)之sudo方法第四期

目录 写在开头 sudo screen sudo script sudo sed sudo service sudo socat sudo ssh sudo ssh-keygen sudo strace sudo systemctl sudo tcpdump sudo tee sudo timedatectl sudo tmux sudo vi sudo wall sudo watch sudo wget sudo xxd sudo zip 总结…

软件测试/测试开发丨Web自动化测试 cookie复用

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27165 一、cookie简介 cookie是一些数据&#xff0c;存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时&#xff0c;在链接关闭后&#xff0c…

RK3588平台产测之ArmSoM-W3 DDR压力测试

1. 简介 RK3588从入门到精通 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试&#xff0c;以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境&#xff1a; …

java八股文面试[多线程]——FutureTask

FutureTask介绍 FutureTask是一个可以取消异步任务的类。FutureTask对Future做的一个基本实现。可以调用方法去开始和取消一个任务。 一般是配合Callable去使用。 异步任务启动之后&#xff0c;可以获取一个绑定当前异步任务的FutureTask。 可以基于FutureTask的方法去取消…

APP运营的核心是什么?

APP的运营的核心就是用户运营&#xff0c;主要分为四个指标&#xff1a;用户拉新、留存、促活、转化&#xff08;营收&#xff09;下面进行一一分析。 一、APP用户拉新&#xff1a;提高用户精准度 用户拉新&#xff0c;无非是把APP推广出去进行品牌曝光&#xff0c;提高下载量…

将 ordinals 与 比特币智能合约集成 : 第 1 部分

将序数与比特币智能合约集成&#xff1a;第 1 部分 最近&#xff0c;比特币序数在区块链领域引起了广泛关注。 据称&#xff0c;与以太坊 ERC-721 等其他代币标准相比&#xff0c;Ordinals 的一个主要缺点是缺乏对智能合约的支持。 我们展示了如何向 Ordinals 添加智能合约功…

CPU与GPU渲染的差异有哪些?最佳3D渲染 GPU推荐

什么是 GPU 渲染&#xff1f; GPU 渲染使您可以使用显卡而不是 CPU 进行渲染。从广义上讲&#xff0c;GPU渲染允许许多并行操作同时运行。这提高了执行速度&#xff0c;因为现代 GPU 旨在计算大量数据。快速渲染使 GPU 能够实时处理图形。但是&#xff0c;在这种情况下&#x…