初见Linux:基础开发工具

前言:

这篇文章我们将讲述Linux的基本开发工具,以及讨论Linux的生态圈,最后再了解vim开发工具。

Yum:

       YUM(Yellowdog Updater Modified)是一个在Linux系统中用于管理软件包的工具,特别是在基于RPM(Red Hat Package Manager)格式的发行版上,如Red Hat Enterprise Linux、CentOS和Fedora等。YUM允许用户轻松安装、更新和删除软件包,并自动处理依赖关系。

        在Linux下安装软件的方法

                使用包管理器进行安装--yum

        如上图我们使用 yum install tree 命令就下载了一个tree命令,通过执行tree命令可以像树形结构一样展示目录和目录下的文件。

        

       总所周知,我们手机上想要下载一个应用程序就要去应用商店里下载,但本质上是去远端服务器上搜索,搜索到了才下载安装。在Linux的yum也是同理。

    那么这里就会有疑惑,软件包是什么,是代码吗?那这些软件包是哪里来的?

      软件包是一个包含软件程序及其相关文件和资源的集合,通常用于简化软件的安装、管理和分发。软件包可以包含可执行文件、库文件、配置文件等,也就是代码。那么软件包的由来其实是工程师上传的,那么工程师为什么要免费上传这些软件包呢?这就不得不提到生态。

        生态:

        生态是指生物体与其环境之间相互作用的系统,包括生物(如动物、植物、微生物)与非生物环境(如水、空气、土壤)的相互关系。那么在Linux操作系统中也同样存在这生态圈。

         对于不同操作系统有着不同系统的生态圈,它们拥有者不同的社区群体,软件体系、官方文档,而操作系统仅仅只是操作系统生态圈的一部分。比如centos是属于企业使用较多,所以它针对的用户与社区论坛基本都是工程师。而这其中不乏很多大佬,他们不缺物质上的需求,并且也是希望生态圈越来越好,所以会无偿贡献许多文档,出现任何问题的解决方案,以及许多软件包。

vim开发工具:

        Vim是一个高度可配置的文本编辑器,广泛用于编程和日常文本编辑。它的设计理念强调高效的键盘操作,特别适合需要频繁编辑文本的用户。

        

        进入vim后我们可以像在VS一样编写C语言的代码,并且也能运行起来。

        vim的多模式:

vim中有三种模式,第一种是命令模式(最重要),第二中为插入模式(一般用于编写代码),第三种为低行模式。默认打开的模式是命令模式。

        

        一开始进入vim模式是命令行模式,键盘输入i就进入插入模式,想要退回命令行就按esc,如果一次没退出来就多按几次。

        关于vim的快捷指令(命令行模式):

                1.gg:光标定位到最开始

                2.shift+g:光标定位到文件末尾

                3.number(数字)+shift+g:光标定位到文件指定number行

                4.shift+键盘上方的数字键4($):定位到当前行的末尾

                5.shift+键盘上方的数字键6(^):定位到当前行的开头

                6.h j k l :h(向左箭头) ,j(向下箭头),k(向上箭头),l(向右箭头)

                        这里要补充说明一下为什么明明键盘上有方向键却还是给予hjkl方向键属性。

        上图是一款老式的键盘,可以看到在当时的键盘是没有上下左右键的,所以就在hjkl键位上赋予了方向键的属性,而要知道我们操作系统这些都是需要向前兼容的,所以自然而然的也保留了下来。

        7.yy:复制当前行

        8.p:黏贴当前行到下一行

        9.number+p:重复黏贴number行

        10.dd:剪切或删除

        11.number+dd:删除当前行以及剩下的number-1行

        12.x:命令行模式下的删除

        13.number+x:命令行模式下删除numbe个数据

        14.shift+·(~):在当前光标位置进行字母大小写替换,并自动移动到下一个字母

        15.shift+r:表示在当前光标位置进行代码替换到这一行结束

        16.u:撤销之前的操作。

        17.ctrl+u:对u撤销的操作进行撤销

        18.shift+zz:保存并退出vim。

        19.w:让光标以单词为单位进行移动,w移动到单词词尾。

        20.b:让光标移动到单词词首

底行命令(在命令模式下输入shift+:进入):

        w(保存)/q(退出vim)/set nu(显示行号)/wq(保存并退出)/!+外部命令:如ls date Vim 会暂时离开编辑状态,执行该命令,然后将结果显示在 Vim 窗口中。

        

                        

        补充命令:

               1.批量化注释:ctrl+v进入视图模式+hjkl(对光标进行任意的上下左右移动)->shitf+i+//+esc

                2.批量化去注释:ctrl+v进入视图模式+hjkl+d

                        

        

在Linux中展开说说文件编译

        在以前的学习我们知道,一个c语言程序从编写代码到执行需要一个过程。1.得先预处理(进行宏替换/去掉注释/展开头文件/检查语法错误),2.编译(产生汇编指令),3.汇编(形成二进制指令),4链接(生成可执行文件,在win下后缀为.exe,linux下为a.out)。而vs是一款集成开发环境,很难观察到文件编译链接的过程。但在Linux中可以一步一步很清楚的观察到。

        1.预处理

        2.编译:        

        3.汇编

        

        4.链接

        

动静态库:

        动态库:

                动态库也称为共享库(Shared Library),在Linux 系统中通常以 libxxx.so 的文件名形式出现,在 Windows 系统中为 xxx.dll。接下来我将以通俗易懂的图画来解释动态库的概念。

假设我是一段C语言代码,今天是周末,我有一系列任务需要完成。

        首先,我的主程序(即我)开始执行。我需要列出今天的任务,并将它们按顺序执行。每个任务就是代码中的一段指令或功能,而我将它们按计划逐一完成。我们可以把这个过程看作是“函数调用”,每个任务代表一个独立的功能模块。

        其中,最关键的一步是“上网”,这也是我唯一需要外部支持的部分。由于在学校里没有电脑,无法直接访问网络资源,因此我需要去附近的网吧(可以看作是动态库)来执行这一任务。这里的网吧是我调用的一个“外部库函数”,它是动态加载的。在没有网吧的情况下,我无法完成“上网”这一任务,就像C语言中的函数调用依赖外部库一样。

上网过程:

        在网吧中,我通过“调用”外部资源,完成需要的工作(例如,查找信息、玩游戏等)。这个过程类似于动态库函数被调用并执行,期间可能会有一些中断、资源管理或异常处理等步骤。玩完电脑后,我返回学校,继续执行后续任务。

返回主程序:

        上网结束后,我回到主程序中,继续执行剩余的任务。这时,我已经完成了一个“外部库函数”的调用,返回到主程序,继续按预定计划进行后续工作。就像C语言中的库函数调用返回主程序后,控制权回到原先的代码执行流中一样。

        通过这个比喻,我可以清楚地理解如何将日常任务与编程结构结合起来。每一个任务都有它自己的依赖条件,而有些任务则需要外部环境的支持,正如程序在运行中需要调用外部的库函数一样。而我在执行这些任务时,始终保持着“主程序”的地位,不断根据计划继续执行。

        如上图我们创建了创建了一个c语言的可执行程序,通过ldd命令可以查看显示一个可执行文件或共享库依赖的共享库(动态库)列表。我们将查看到的 libc-2.17.so 这个文件。我们去掉前缀lib与后缀so,那么就变成了c-2.17这就是一个c的标准动态库。

        通过file命令我们还可以很明确的看到 dynamically linked 就是动态链接。 

        

        静态库:

                静态库在程序编译时就被链接到可执行文件中。当程序执行时,库的代码已经嵌入到最终的可执行文件里,不需要在运行时去加载库文件。

        很显然,静态库的特点就是直接把电脑搬到学校里,也就不再需要直接去网吧里才能上网,但将电脑搬入学校里这势必会占用内存空间。

        

        gcc默认形成的可执行程序是动态链接,如果需要静态链接则需要在链接后面加上 -static。

可以看到静态链接的程序会比动态链接内存大很多。

        动静态库的优缺点:

                动态库优点:共享,占用内存小,可以多个程序共用一个库,

                动态库缺点:如果库文件丢失,那么只要是使用了该库文件的程序全部会崩溃。

                静态库优点:不依赖外部文件,如果库丢失照样能运行。

                静态库缺点:生成的可执行文件较大,浪费空间。

自动化构建-make/Makefile

        认识make与Makefile:

               make 是一个用于自动化构建和管理项目的工具,它特别适用于编译大型程序,能够通过读取Makefile文件中的规则来确定如何编译和链接程序。

    Makefile是一个描述构建规则的文本文件,包含了项目中源代码文件之间的依赖关系以及如何从源代码生成目标文件的具体命令。make 工具通过解析 Makefile 中的规则来自动化构建过程,避免了手动编译每个文件的繁琐操作。

        简单来说,make是一个指令,Makefile是一个文件。

        

        快速上手make/Makefile:                

        

        如上图,创建了一个test.c的文件,并使用vim添加了一些代码。接着我们touch了Makefile的文件,并使用vim编辑它。保存退出后我们使用make命令后可以看到,程序自动化构建了可执行文件。

        

        Makefile的具体语法:

  第一行 mytest : test.c

        我们将这一段代码成为依赖关系,就好像确认关系应该,mytest文件是依赖test.c文件的。

  第二行 gcc test.c -o mytest

        我们将这一段代码称之为依赖方法,就比如确认关系后,两个文件依赖这个关系做出的行为.

  第四行.PHONY:clean

        .PHONY是Makefile的语法,表示clean并不会真正生成一个文件,我们称之为伪目标,并且依赖方法总是被执行。

        如果我们多次调用mkae程序时,并不会每次都产生可执行程序,会说明可执行程序是最新的。这么做的原因也是防止浪费资源。除非我们再次对.c文件代码进行修改时,再次make才会更新可执行程序。

        通过ll命令我们发现clean文件并没有被创建,但我们使用make clean的时候会直接调用clean所依赖的方法也就是删除可执行程序。

更加具有通用性的Makefile文件:

        

        

   

                                                                            ------那么本片文章到这就结束了,感谢各位观看。

        

        

                

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

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

相关文章

电信基站智能计量新方案:DJSF1352双通讯直流计量电表——安科瑞 丁佳雯

随着信息技术的飞速发展和5G时代的到来,电信基站作为信息传输的重要基础设施,其能耗管理和运营效率成为各大运营商关注的焦点。为了应对日益增长的能耗需求和复杂的运维挑战,采用高效、智能的计量方案显得尤为重要。在这样的背景下&#xff0…

Pytorch cuda版本选择(高效简洁版)

简而言之 Pytorch cuda版本选择 只需要低于cuda驱动版本即可,cuda驱动版本查看命令是nvidia-smi, nvcc -V 是runtimeapi版本可以不用管 1.只要看cuda驱动版本 安装pytorch 选择cuda版本,只要看你电脑cuda驱动版本即可。 2.选择依据 pytorch中cuda版本只…

全网最详细的项目管理完整方案!破解项目管理难题,解决方案一网打尽!

在现代企业中,项目管理愈发复杂,尤其是项目规模扩大、团队多元化的情况下,项目管理的难度逐渐上升。当前,企业在项目管理中面临以下主要问题: 信息碎片化:项目数据和文件分散在不同部门和系统中&#xff0…

数据库的使用05:不规范的写法与操作记录

一、写SQL带数据库名 【严禁】sql写成 select * from databasename.dbo.tablename 【原因】生产环境的databsename不一定和开发环境的databsename一样 【正确写法】select * from tablename 二、不合理的表设计 【改善方法】C#小结:数据库中数据表的设计原则、技…

YOLO11改进 | 融合改进 | C3k2引入多尺度分支来增强特征表征【全网独家 附结构图】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO11的C3k2替…

三维测量与建模笔记 - 3.1 相机标定基本概念

成像领域有多个标定概念 笔记所说的相机标定主要是指几何标定。 相机几何模型基于小孔成像原理,相关文章很多,上图中R t矩阵是外参矩阵(和相机在世界空间中的位姿相关),K矩阵是内参矩阵(和相机本身参数相关…

安卓/华为手机恢复出厂设置后如何恢复照片

绝大多数安卓用户都会经历过手机恢复出厂设置,部分用户可能没有意识到手机恢复出厂设置可能会导致数据丢失。但是,当您在 云盘上进行备份或在设备上进行本地备份时,情况就会有所不同,并且当您将 安卓手机恢复出厂设置时&#xff0…

丹摩征文活动 |【AI落地应用实战】文本生成语音Parler-TTS + DAMODEL复现指南

目录 一、Parler-TTS简介1.1、TTS 模型1.2、Parler-TTS 二、Parler-TTS复现流程2.1、创建实例2.2、配置代码与环境2.3、配置预训练模型2.4、Parles-TTS使用 Parler-TTS 是一个由 Hugging Face 开源的文本生成语音 (Text-to-Speech, TTS) 模型。它的设计目的是生成高质量的语音输…

【QT项目】QT6项目之基于C++的通讯录管理系统(联系人/学生管理系统)

目录 一.项目背景 二.创建工程 工程创建 添加文件 联系人类 功能类 三.功能实现 联系人类 person.cpp person.h 查 查询按钮槽函数 返回按钮槽函数 findperson.cpp: 增 addperson.cpp: 删 deleteperson.cpp: 改 changeperson.cpp&#xff1a…

一文详谈领域驱动设计实践

作者:泊静 阿里云开发者 导读 本文作者结合在团队的实践过程,分享了自己对领域驱动设计的一些思考。 了解过领域驱动设计的同学都知道,人们常常把领域驱动设计分为两部分:战术设计和战略设计。这两个概念本身都是抽象的&#xff…

单链表OJ思路

目录 前言 一、移除链表元素 二、反转链表 三、链表的中间结点 四、返回倒数第k个结点 五、合并两个有序链表 六、链表分割 七、链表的回文结构 八、相交链表 九、环形链表 十、环形链表|| 十一、随机链表的赋值 前言 11道单链表OJ题的解题思路。 一、移除链表元素 链接&#…

数据结构与算法——Java实现 54.力扣1008题——前序遍历构造二叉搜索树

不要谩骂以前的自己 他当时一个人站在雾里也很迷茫 ​​​​​​​ ​​​​​​​ ​​​​​​​—— 24.11.6 1008. 前序遍历构造二叉搜索树 给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。 保证 对于给定…

【Qt聊天室客户端】单聊与群聊

1. 区分单聊和群聊 逻辑分析 具体实现逻辑 主窗口完善判断单聊还是群聊的逻辑 单聊会话详情入口中,设置头像和昵称 2. 删除好友 直接找到删除好友的按钮,然后实现其删除逻辑即可 具体实现 无法删除好友BUG处理 问题复现,点击好友删除后&…

1.集合体系补充(1)

1.接口式引用 集合的构造,我们需要采用接口类型引用的的方式,这样做的好处就是方便根据业务或者设计上的变化,快速更换具体的实现。 事实上,Java集合设计体系者也是支持我们这样做的,并且集合体系的设计也是如此的。 创…

枚举及优化(一)

第1题 百钱买百鸡 查看测评数据信息 百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用 100 文钱买 100只鸡,公鸡、母鸡、小鸡各买多少只?本程序要求解的问题是:给定一个正整…

自注意力机制

当输入一系列向量,想要考虑其中一个向量与其他向量之间的关系,决定这个向量最后的输出 任意两个向量之间的关系计算 计算其他向量对a1的关联性 多头注意力机制 图像也可以看成一系列的向量,交给自注意力机制处理,CNN是特殊的自注意…

RabbitMQ的死信队列

1.死信的概念 死信简单理解就是因为种种原因,无法被消费的消息. 有死信自然就有死信队列,消息再一个队列中编程死信之后,它能被重新发送到另一个交换器中,这个交换器就是DLX,绑定DLX的队列,就被称为死信队…

十六 MyBatis使用PageHelper

十六、MyBatis使用PageHelper 16.1 limit分页 mysql的limit后面两个数字: 第一个数字:startIndex(起始下标。下标从0开始。)第二个数字:pageSize(每页显示的记录条数) 假设已知页码pageNum&…

SpringBoot框架在共享汽车管理中的应用

3系统分析 3.1可行性分析 通过对本共享汽车管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本共享汽车管理系统采用SSM框架,JAVA作为开发语…

数字化转型助手 快鲸SCRM系统为企业营销赋能

内容概要 在当今这个快速变化的商业环境中,数字化转型已经成为企业生存与发展的关键要素。无论是零售、制造还是服务行业,企业都深刻意识到传统工作模式的局限性,必须借助先进的技术来优化运营和提升客户体验。快鲸SCRM系统就是这样一款数字…