Linux开发工具

在这里插入图片描述

Linux开发工具

我们在Linux下

  • 编写代码:vim
  • 编译代码:gcc/g++
  • 调试代码:gdb
  • 运行或者自动化构建程序:make/makefile

Linux编辑器 vim

编辑器 – 只负责写代码

打开vim时是命令模式(默认打开的模式),如果想从其他模式回到命令模式按ESC

在命令模式下输入

  • i:进入编辑/插入模式
  • ::进入底行模式
  • shift + r:进入替换模式

在底行模式下输入

  • q退出,q!强制退出
  • w保存,w!强制保存
  • wq保存退出 ,wq!强制保存退出
  • ESC回到命令模式

命令模式的常见命令

命令作用
yy将当前光标所在行复制
p将复制行进行粘贴
dd将当前光标所在行,剪切(删除)
nyy,np,nddn是具体的数字,nyy指一次复制n行,np将复制的内容粘贴n次,剪切(删除)n行
u撤销命令
ctrl + r撤销u操作
shift + g光标定位到文件结尾
n + shift + g光标定位到第n行
gg光标定位到文件开头
shift + 4($将光标定位到当前行的最结尾
shift + 6(^将光标定位到当前行的最开始
w以单词为单位进行光标的后移
b以单词为单位进行光标的前移
h,j,k,l左,下,上,右
shift + ~大小写切换
r替换光标所在的字符,支持nr
x or X删除光标所在的字符,包括之前或者之后

底行模式常见命令

命令作用
set nu/nonu打开行号/取消行号
vs 文件名分屏操作
w写入
q退出
!cmd:不退出vim执行对应的命令(执行命令行,编译,运行,查看man)

在vim的底行模式中,

  1. 😒 表示substitute,也就是替换, 格式为以下:
    • :[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
    • range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行
    • {pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
    • {string} 表示要将匹配到的字符串替换为的新的string字符串
    • [flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
    • [count] 表示在一行中匹配多少次,很少会用到…
    • 如果想要将文件中所有 nihao 替换为 hello 则命令为: %s/nihao/hello/g
  2. :p 用于打印指定区间的行
    • :[range]p[rint] [flags]
  3. :i 在指定行上方添加文本
    • :{range}i[nsert] [!]

Linux编译器 gcc/g++

程序的翻译过程

文本的C – 计算机二进制

  1. 预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译 …).i
  2. 编译(C -> 汇编).s
  3. 汇编(汇编 -> 可重定向二进制目标文件).o
  4. 链接(链接 -> 多个 .0,.obj -> 合并形成一个可执行 .exe,.out)
[hmy@VM-8-15-centos ~]$ gcc mytest.c -o hmy //-o指定生成可执行文件的名称,hmy是可执行文件的名称

gcc/g++

选项作用
-o指定生成可执行文件的名称
-E从现在开始进行程序的翻译,如果预处理完成,就停下来
-S从现在开始进行程序的编译,如果编译完成,就停下来
-c从现在开始进行程序的翻译,如果汇编完成,就停下来

动静态库

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

  • 动态链接,需要动态库 Linux:.so Windows:.dll

    将库中我要的方法的地址,填入我的可执行程序中,建立关联!!

  • 静态链接,需要静态库 Linux:.a Windows:.lib

    将库中方法的实现,真的拷贝到我们的可执行程序中!!

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

-static表明使用静态链接的方法形成可执行程序

[hmy@VM-8-15-centos ~]$ gcc mytest.c -o hmy -static

Linux项目自动化构建工具make/makefile

make是一个命令

makefile是一个文件

他们的作用是自动化构建项目

编写makefile

  • 依赖关系
  • 依赖方法
mytest:test.c  //依赖关系gcc test.c -o mytest  //依赖方法.PHONY:clean  //伪目标
clean:  //依赖关系rm -f mytest  //依赖方法

make会自顶向下执行第一个依赖关系,当mytest没有写在第一个时,可以显式执行 make mytest

.PHONY伪目标:总是会根据依赖关系,执行依赖方法。习惯给clean设置

Linux软件包管理器 yum

YUM 是 “Yellowdog Updater, Modified” 的缩写,它是一个包管理工具,用于简化在系统上安装、更新和删除软件包的过程。

YUM可以理解为Linux上的软件应用市场

yum的作用:1.搜索、下载、安装 2.解决依赖关系

yum的操作

yum源:就是一个配置文件 [hmy@VM-8-15-centos lesson7]$ ls /etc/yum.repos.d 里面配置了你的下载网址

yum三板斧:

  1. yum list(查找所有软件) yum list | grep py(查找所有软件名包含py的软件)
  2. yum install
  3. yum remove

扩展:

  1. yum makecache 命令:该命令用于将服务器上的软件包信息缓存到本地系统。
  2. yum search 命令:该命令用于在所有可用的软件包中搜索包含指定关键字的软件包。
  3. yum clean all 命令:该命令用于清除缓存中的软件包头文件和旧的软件包。
  4. yum upgrade 命令
    • yum -y update:升级所有包同时,也升级软件和系统内核;
    • yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。 所以D选项不完整严谨

版本控制器 git

git三板斧:

预备:

  1. git clone 你的git仓库链接 例如:git clone https://gitee.com/h-miyang/for_-linux.git
  2. git add 你的文件 #添加我们的代码到本地仓库 例如:git add . 或 git add test.c
  3. git commit -m “这里必须写提交日志!” #提交代码到本地仓库中
  4. git push #提交我们的代码到远端仓库

其他情况:

  1. 有时候无法提交,会出现提交冲突 无脑 git pull
  2. .gitignore #不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore
  3. git rm 删除文件

调试器 gdb

(no debugging symbols found). gcc && g++默认形成的可执行程序是release的!!故无法直接被调试!

gcc mytest.c -o mytest-debug -g # -g表示该程序是debug方式发布的

gdb操作:

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

命令作用
quit退出gdb
r(run)开始调试,如果没有设置断点,就直接结束运行!
b(breakpoint)+ 行号给特定的行号打断点
info(information) b查看断点
d(delete)+ 断点编号删除断点在这里插入图片描述
n(next)逐过程
p(print)+ 变量名打印变量内容
s(step)逐语句
bt查看当前调用堆栈
finish将当前函数跑完就停下来
display + 变量名设置长显示
undisplay + 变量名编号取消长显示
until + 行号跳转到指定行
c(continue)运行至下一个断点处停下来
disable/enable + 断点编号使能(打开和关闭)断点

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【 CSS 】基础1

“坚持就是胜利。” - 温斯顿丘吉尔 【 CSS 】基础 1 CSS 简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称.有时我们也会称之为 CSS 样式表或级联样式表。CSS 也是一种标记语言CSS 主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等&#xff…

uniapp让图片缩小

image{width: 500rpx;height:500rpx;} 在图片属性设置为image{}宽高改变但是大小不改变,解决办法是改成下面的代码 & > img {width: 50px; height: auto; } 如图:

【车载开发系列】AutoSar当中的诊断会话控制

【车载开发系列】AutoSar当中的诊断会话控制 【车载开发系列】AutoSar当中的诊断会话控制 【车载开发系列】AutoSar当中的诊断会话控制一. 什么是诊断会话控制服务二. 会话模式分类三. 会话的接口1)获取当前会话状态2)设置会话状态3)返回默认…

《GitHub Copilot 操作指南》课程介绍

第1节:GitHub Copilot 概述 一、什么是 GitHub Copilot 什么是 GitHub Copilot GitHub Copilot是GitHub与OpenAI合作开发的编程助手工具,利用机器学习模型生成代码建议。它集成在开发者的集成开发环境(IDE)中,可以根…

线性代数:矩阵运算(加减、数乘、乘法、幂、除、转置)

目录 加减 数乘 矩阵与矩阵相乘 矩阵的幂 矩阵转置 方阵的行列式 方阵的行列式,证明:|AB| |A| |B| 加减 数乘 矩阵与矩阵相乘 矩阵的幂 矩阵转置 方阵的行列式 方阵的行列式,证明:|AB| |A| |B|

Vscode 顶部Menu(菜单)栏消失如何恢复

Vscode 顶部Menu(菜单)栏消失如何恢复? 首先按一下 Alt按键,看一下是否恢复了菜单栏如果恢复了想了解更进一步的设置,或是没能恢复菜单栏,可以看后续。 1.首先点击左下角 齿轮,打开settings; 或者 直接 ctrl 逗号 …

HackTheBox - Medium - Linux - Noter

Noter Noter 是一种中型 Linux 机器,其特点是利用了 Python Flask 应用程序,该应用程序使用易受远程代码执行影响的“节点”模块。由于“MySQL”守护进程以用户“root”身份运行,因此可以通过利用“MySQL”的用户定义函数来利用它来获得RCE并…

数据结构:堆与堆排序

目录 堆的定义: 堆的实现: 堆的元素插入: 堆元素删除: 堆初始化与销毁: 堆排序: 堆的定义: 堆是一种完全二叉树,完全二叉树定义如下: 一棵深度为k的有n个结点的二…

linux性能优化-磁盘I_O优化

1.文件系统 1.1.文件系统的工作原理 文件系统是在磁盘的基础上,提供了一个用来管理文件的树状结构。 接下来我们就看看Linux 文件系统的工作原理。 1.1.1索引节点和目录项 在 Linux 中一切皆文件 ,文件系统,本身是对存储设备上的文件,进行组织管理的…

go和swoole性能比较

开发效率 Go语言是本质上是静态语言,开发效率稍差,但性能更强,更适合底层软件的开发 Swoole使用PHP语言,动态脚本语言,开发效率最佳,更适合应用软件的开发 IO模型 go语言使用单线程eventloop处理IO事件&…

阿里云优惠券领取入口、使用方法和限制条件,2024最新

阿里云优惠代金券领取入口,阿里云服务器优惠代金券、域名代金券,在领券中心可以领取当前最新可用的满减代金券,阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法: 阿里云优惠券…

sqlmap使用教程(2)-连接目标

目录 连接目标 1.1 设置认证信息 1.2 配置代理 1.3 Tor匿名网络 1.4 检测WAF/IPS 1.5 调整连接选项 1.6 处理连接错误 连接目标 场景1:通过代理网络上网,需要进行相应配置才可以成功访问目标主机 场景2:目标网站需要进行身份认证后才…