Linux——开发工具

1.yum

        yum是centos中的一个软件下载安装管理客户端,可以下载需要的软件或者解决依赖关系问题(如动态库)。程序都是来源于一段源代码,为了方便下载,源代码被提前在不同的环境下编译好生成对应的yum软件包,存储在服务器中。当需要进行下载时,可以通过yum找到对应的包并且同时处理好依赖关系。

        yum和rpm都是包管理工具,rpm是一种基础的包管理工具,需要自己动手解决依赖关系,而yum则是基于rpm拓展的高级包管理工具,可以自动解决依赖关系。

搜索:yum list | grep xxx   将yum所有的包列出来,由管道交给grep过滤出需要的包

安装:[sudo/root身份] yum install [-y] xxx

卸载:[sudo/root身份] yum remove [-y] xxx

        yum下载实际是找到对应的目标服务器的地址链接,然后将服务器的内容下载到本地。所以我们可以发现:①要使用yum下载,需要和服务器进行文件传输,因此需要网络通常(可以通过ping指令验证);②为了可以找到目标服务器的地址链接,个人的机器内实际存储了对应的地址链接,可以在/etc/yum.repos.d/目录下找到对应的下载地址,其中base表示基本软件源,epel表示扩展软件源。可以使用sudo yum -y install -y epel-release来安装扩展软件源。

2.vim

        vim有三种最常用的模式:命令模式、插入模式和低行模式。

2.1 命令模式

        命令模式也是默认模式,是我们使用vim打开一个文本文件的初识模式。在命令模式下,我们可以通过键入命令来对文本进行编辑等控制

        命令模式可以在任何模式下通过按ESC来切换。

        命令模式下的编辑方式:

复制当前行:yy

复制当前的n行:n+yy

粘贴到光标下一行1次:p

粘贴到光标下一行n次:n+p

撤销:u

恢复:ctrl+r

剪切一行:dd

剪切n行:n+dd

光标移动到当前行末尾:$

光标移动到当前行开头:^

光标移动到文本开头:gg

光标移动到文本末尾:G

光标移动到第n行:n+G

向左、下、上、右移动一次:h / j / k / l

向左、下、上、右移动n次:n + h / j / k / l

以单词为单位光标后移:w

以单词为单位光标前移:b

大小写切换:~

删除光标后n个字符:n+x

删除光标前n个字符:n+X

对光标后n个字符统一替换为某一个字符:n+r+替换的字符

进入替换模式,对内容进行覆盖写:R

保存并退出:ZZ

2.2 插入模式

        插入模式可以在命令模式下通过按a、o、i等键来切换。在插入模式下,我们就可以进入常规的文本编辑模式了。

        通过a键进入插入模式:光标向后一个字符位置开始插入;

        通过i键进入插入模式:直接从光标位置开始插入;

        通过o键进入插入模式:光标另起一行开始插入。

2.3 底行模式

        底行模式在命令模式下输入:来切换,底行模式下vim可以和包括但不限于shell进行交互

显示行号:set nu

取消显示行号:set nonu

保存:w

退出:q

强制退出(不保存):q!

查找关键字,被检索到的关键字会高亮显示:/ + 关键字

在不退出vim的情况下,使用shell命令:! + shell的命令

分屏多文件操作:vs 文件名

分屏情况下切换主要活动窗口:ctrl + ww

2.4 其他模式

        vim中还有许多其他的模式,以上三种是使用频率最高的。除此之外补充一个块模式,块模式通过在命令模式下ctrl+v切换。

        在ctrl+v唤出块模式后,首先首先通过h、j、k、l来选择块区域,选定后可以使用x、yy、c等来进行整体的删除、复制、替换等。也可以输入I来插入,如多行注释即可在块模式I下输入//来实现。

        为了更好的使用vim,可能需要一些配置来实现语法高亮等功能,读者可以自行搜索并在家目录下的.vimrc文件中配置vim(或者在/etc目录下)。

3.gcc和g++

        对于c和c++的源文件进行编译操作需要用到gcc和g++。

一般的编译:

c文件:gcc XXX.c -o XXX

cpp文件:g++ XXX.cpp -o XXX

        我们知道,源代码被编译生成可执行目标文件的过程可以细分为多步,为gcc提供各种选项可以实现不同步骤的处理。

预处理:gcc -E test.c -o test.i  包括头文件展开、宏替换、删去注释、条件编译

编译:gcc -S test.i -o test.s  生成汇编代码

汇编:gcc -c test.s -o test.o  生成二进制可重定位目标文件

链接:gcc test1.o test2.o -o my.exe  生成二进制可执行文件

gcc支持编译时定义常量:

gcc -Da=10 test.c ——相当于在test.c增加#define a 10

        链接的过程实际上是.o目标文件和库结合的过程。在linux中,动态库后缀为.so静态库的后缀为.a;在windows中,动态库的后缀为.dll静态库的后缀为.lib。头文件中包含着各个函数的声明,而库中则是函数的定义,当链接时会自动链接c标准库。链接又分为动态链接和静态链接,动态链接一般是将库载入内存中,为各个程序共用,当程序执行到对应位置时就会跳转到对应的函数位置;而静态链接会将库的内容为每个程序都拷贝一份,更加占用内存。

查看动态库依赖关系:ldd 文件名

查看文件类型:file 文件名

 4.make和makefile

4.1 make/makefile的基本使用

        首先明确make是一个命令,而makefile是一个文件。make的主要作用就是根据makefile的内容实现项目的自动化构建,比如完成编译、清理等工作。

        上图中的例子给出了一种makefile的样式,一般格式可以认为就是:

目标文件:依赖文件

        依赖方法

        逻辑就是在依赖关系中明确需要什么文件,要生成什么文件,然后再依赖方法中给出具体的操作。那么.PHONY是什么意思呢,我们先来看如下的测试:

        我们发现当执行过了make只后,再次执行就会以“文件是最新的”拒绝执行make。这是因为makefile为了保证编译效率,对最新的可执行程序默认不再生成。换言之,就是会检查makefile中依赖关系的目标文件和依赖文件的最近修改时间,如果发现目标文件晚于依赖文件,那么就说明目标文件是最新的,就不再更新了,make也就拒绝再次实现依赖关系。

        与之对应的,如果需要反复执行的依赖方法就可以使用.PHONY进行修饰。如clean,其作用就是删除生成的文件,所以先使用.PHONY进行说明,然后给出依赖关系和依赖方法,由于clean只需要删除,所以允许依赖文件为空

        因为make指令只会默认生成第一个目标文件,所以想要执行clean,就需要输入make clean指令。

        我们发现因为有了.PHONY修饰,所以make clean可以被多次执行。

4.2 make/makefile的其他要点

        给出如上makefile,发现仍然可以执行成功:

        这就说明,make会自动根据makefile中的依赖关系,进行自动推导,执行所有相关的依赖方法

 

        对于如上makefile,我们发现其中存在符号替代和变量定义。1~2行定义了bin变量赋值为mytest,定义了src变量赋值为test.c,于是之后就可以使用$(变量名)的方法进行替换。

        替换还存在于$@和$^,$@表示替换了目标文件$^表示替换了依赖文件列表

        在依赖方法中,还有@进行修饰,其含义是执行时不打印命令。

5.git

        如gitee和GitHub等都是版本控制的,即对源代码的历史修改进行维护,保留历史的所有修改痕迹。git命令正是为了适配对应的版本管理而生,这里不过多介绍,未来肯定会详细学习git的。

git add 将文件变化同步到本地git仓库暂存区

git commit -m “日志” 将暂存区的内容同步至本地仓库

git push 将本地仓库的内容同步到云端

6.gdb

        gdb就是我们的调试工具,因为gcc和g++默认采用的是release模式进行编译,如果想要使用gdb调试,就需要在编译时使用-g选项进行debug模式编译,这样编译出的程序增加了调试信息,可以被调试。

        以下是一些gdb常用的指令,因为是工具,还是需要多用才能熟练。

quit/q:退出gdb

list/l <行号、函数名>:打印指定行的代码(默认10行)

breakpoint/b <行号、函数名>:设置断点

info/i b:显示断点信息

delete/d <断点编号>:删除断点

run/r:执行程序

enable/disable <断点编号>:打开/关闭断点

next/n:逐过程执行(不进入函数)

step/s:逐语句执行(进入函数)

print/p <变量/&变量>:查看变量/地址

display <变量/&变量>:常显示变量

undisplay <编号>:取消对应编号的常显示

set var <变量>=<值>:直接修改变量的值

continue/c:运行至下一个断点

finish:运行完当前所在函数并停止

until <行号>:运行跳转至指定行

info/i locals:查看当前栈帧局部变量的值

bt:查看调用栈

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

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

相关文章

运营商如何通过PCDN技术提高用户服务

随着网络技术的快速发展&#xff0c;用户对网络服务的要求也在不断提高。为了满足这些需求&#xff0c;运营商需要不断创新和优化自身的技术和服务。而 PCDN (Personal Content Delivery Network)技术作为一种新兴的内容分发网络解决方案&#xff0c;为运营商提高用户服务提供了…

Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统

文章目录 Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统TFTP服务搭建测试 NFS服务搭建测试 uboot配置TFTP服务搭建测试 NFS服务搭建测试 U-BOOT配置 Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统 TFTP服务搭建 sudo apt install tftpd-hpa su…

智能车载防窒息系统设计

摘要 随着汽车行业的快速发展&#xff0c;车辆安全问题越来越受到人们的关注。其中&#xff0c;车载防窒息系统是一项重要的安全设备。本论文基于STM32单片机&#xff0c;设计了一种智能车载防窒息系统。该系统主要包括氧气浓度检测模块、温湿度检测模块、声音检测模块、光线检…

『ComfyUI』从小白到入门全套教程,奶奶看了都会了!赶紧收藏!

本文简介 Stable Diffusion WebUI 应该是大多数人第一次接触 SD 绘画的工具&#xff0c;这款工具简单易上手&#xff0c;但操作流程相对固定。如果你想拥有更自由的工作流&#xff0c;可以试试 ComfyUI。而且很多新的模型和功能在刚出现时 ComfyUI 的支持度都比较高&#xff0…

拥抱应用创新,拒绝无谓的模型竞争

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

TikTok海外运营,云手机多种变现方法

从现阶段来看&#xff0c;TikTok 的用户基数不断增长&#xff0c;已然成为全球创业者和品牌的全新竞争舞台。其用户数量近乎 20 亿&#xff0c;年轻用户占据主导&#xff0c;市场渗透率也逐年提高。不管是大型企业、著名品牌&#xff0c;还是个体创业者&#xff0c;都绝不能小觑…

matlab 有倾斜的椭圆函数图像绘制

matlab 有倾斜的椭圆函数图像绘制 有倾斜的椭圆函数图像绘制xy交叉项引入斜线负向斜线成分正向斜线成分 x^2 y^2 xy 1 &#xff08;负向&#xff09;绘制结果 x^2 y^2 - xy 1 &#xff08;正向&#xff09;绘制结果 有倾斜的椭圆函数图像绘制 为了确定椭圆的长轴和短轴的…

最新Wireshark查看包中gzip内容

虽然是很简单的事情&#xff0c;但是网上查到的查看gzip内容的方法基本都是保存成zip文件&#xff0c;然后进行二进制处理。 其实现在最新版本的Wireshark已经支持获取gzip内容了。 选中HTTP协议&#xff0c;右键选择[追踪流]->[HTTP Stream] 在弹出窗口中&#xff0c;已…

为何Expo成为React Native官方推荐框架?

在React Conf上&#xff0c;我们更新了关于构建React Native应用的最佳工具指南&#xff1a;一个React Native框架——一个工具箱&#xff0c;包含所有必要的API&#xff0c;让你可以构建生产就绪的应用。 现在&#xff0c;使用React Native框架&#xff08;如Expo&#xff09…

Xubuntu24.04之图形界面挂载硬盘(二百六十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Unity入门之重要组件和API(4) : Input

前言 Input类主要处理用户输入设备相关操作&#xff1b;输入设备包括鼠标、键盘、触屏、手柄、陀螺仪(重力感应)。 1.鼠标 1.1鼠标在屏幕的位置 print(Input.mousePosition); 1.2检测鼠标输入 0-左键 1-右键 2-中键 if (Input.GetMouseButtonDown(0)) {print("鼠标…

Linux操作系统上用到的磁盘分区管理工具

parted磁盘分区工具 磁盘格式&#xff1a;MBR, GPT, 这两种名称分别是硬盘里面分区表两种格式的称呼&#xff0c; 第一种MBR格式的分区表最大支持2TB的容量&#xff0c; 磁盘的三种分区主分区&#xff0c;扩展分区&#xff0c;逻辑分区&#xff0c;主分区扩展分区<4 第…

NesT : 嵌套层次Transformer

探讨了在不重叠的图像块上嵌套基本局部变换的思想,并以分层的方式对它们进行聚合。发现块聚合功能在实现跨块非局部信息通信中起着至关重要的作用。 这个观察结果引导我们设计一个简化的体系结构,它需要在原始视觉转换器上进行少量的代码更改。所提出的明智选择的设计有三个好…

雷池WAF动态防护功能初体验

一、 介绍 大名鼎鼎的雷池WAF最近新上了个名为 动态防护 的功能 所谓动态防护&#xff0c;是在用户浏览到的网页内容不变的情况下&#xff0c;将网页赋予动态特性&#xff0c;即使是静态页面&#xff0c;也会具有动态的随机性。 说白了就是给你网站的 html 和 js 代码加上加密…

短链接妙用 - 数据统计

可能很多运营工作者都不太知道短链接是什么&#xff0c;那我们先来说说运营日常工作关心的是什么&#xff0c;说完你就懂了。 首先&#xff0c;推广自己的产品是每个公司必不可少的环节&#xff0c;而且会定期分析人群、转化率等等来制定新的推广方案&#xff0c;或者调整自己…

百望云应邀参加全球数字经济大会,获评“北京市通用人工智能产业创新伙伴”

在全球数字化和信息化的浪潮中&#xff0c;数字经济成为了推动经济发展的新动力。大模型、人工智能等前沿技术&#xff0c;在经济模式转变、应用场景创新等领域展现了强大的变革能力。 近日&#xff0c;由中华人民共和国国务院批准&#xff0c;工业和信息化部、商务部、国家互联…

备考无忧,张驰课堂与刷题共筑六西格玛考试坚实后盾

刷题对考中质协&#xff08;中国质量协会&#xff09;的六西格玛绿带和黑带考试具有显著的帮助&#xff0c;主要体现在以下几个方面&#xff1a; 一、巩固知识点 加深理解&#xff1a;刷题可以帮助考生更深入地理解和记忆六西格玛管理的相关知识点。通过反复练习&#xff0c;…

宝塔面板运行Admin.net框架

准备 宝塔安装 .netcore安装 Admin.net框架发布 宝塔面板设置 完结撒花 1.准备 服务器/虚拟机一台 系统Windows server / Ubuntu20.04&#xff08;本贴使用的是Ubuntu20.04版本系统&#xff09; Admin.net开发框架 先安装好服务器系统&#xff0c;这里就不做安装过程描述了&…

替你测试过了,这些国产大模型都很强,快来试试哪款适合你

替你测试过了&#xff0c;这些国产大模型都很强&#xff0c;快来试试哪款适合你 &#x1f4a1;&#x1f525; 大家好&#xff0c;我是猫头虎&#xff0c;科技自媒体博主。今天我将为大家介绍几款顶尖的国产AI大模型&#xff0c;它们各有所长&#xff0c;看看哪一款更适合你的需…

Leetcode104.求二叉树的最大深度

题目描述 递归法 class Solution {public int maxDepth(TreeNode root) {if (root null) { //帮助下面的else语句判空return 0;} else {int leftHeight maxDepth(root.left);int rightHeight maxDepth(root.right);/*** 要注意的点* 1. 这个return是写在else语句里面的&am…