当前位置: 首页 > news >正文

Linux:开发工具

开发工具

  • 一.软件包管理器
    • 1.软件包概念
    • 2.Linuxd的软件生态
      • 2.1 软件下载过程
      • 2.2 操作系统的生态
      • 2.3 免费(社区)软件
      • 2.4 软件依赖
      • 2.5 镜像问题
    • 3.软件包管理器的安装(Ubuntu)
  • 二.vim
    • 1.概念
    • 2.vim的几个基础模式介绍
    • 3.vim正常模式的命令集
      • 3.1 插入模式切换(从命令模式进入)
      • 3.2 光标移动(命令模式下)
      • 3.3 删除操作(命令模式下)
      • 3.4 复制与粘贴(命令模式下)
      • 3.5 替换操作(命令模式下)
      • 3.6 撤销与恢复(命令模式下)
      • 3.7 更改操作(命令模式下)
      • 3.8 跳至指定行(命令模式下)
    • 4.vim末行模式命令集
      • 4.1 末行模式进入方式
      • 4.2 末行模式常用操作
    • 5.总结
  • 三.编译器 gcc和g++
    • 1.gcc和g++的区别
    • 2.编译代码过程(以gcc为例)
    • 3.动静态库
      • 3.1 动态库
      • 3.2 静态库
      • 3.3 动静态库对比

一.软件包管理器

1.软件包概念

  1. Linux下安装软件的常规方式之一:下载程序源代码,编译后得到可执行程序,但该方式较繁琐。
  2. 简化安装的方式:有人将常用软件提前编译好,做成软件包(类似Windows的安装程序)存放在服务器上,通过包管理器可方便获取并直接安装。
  3. 软件包与包管理器的关系:类似“App”和“应用商店”。
  4. yum包管理器:是Linux中常用的包管理器,主要应用于Fedora、RedHat、Centos等发行版。
  5. Ubuntu的包管理器:主要使用apt(Advanced Package Tool),它具备自动解决依赖关系、下载和安装软件包的功能。

2.Linuxd的软件生态

2.1 软件下载过程

在这里插入图片描述

  1. 用户通过包管理器(如yum/apt)发起软件下载安装指令。
  2. 包管理器向软件仓库请求目标软件包,同时自动分析并解决依赖(获取所需关联组件)。
  3. 下载软件包及依赖,自动完成安装(解压、配置到系统对应位置)。
  4. 卸载时,包管理器删除文件并清理配置。

2.2 操作系统的生态

在这里插入图片描述
为什么评估操作系统好坏时考虑生态问题?

原因如下:

  • 社区论坛:活跃的社区论坛能提供丰富的用户交流空间。用户遇到问题时,可在论坛提问、获取解决方案,还能分享使用经验和技巧,这能极大提升用户的使用体验。 例如Linux的Ubuntu社区,用户间互助频繁,让新手快速上手。
  • 官网文档:详细、易懂的官网文档,是用户学习和使用操作系统的重要指引。无论是普通用户配置系统,还是开发者进行应用开发,都能从中获取准确信息,保障操作系统的高效使用。像Windows官网就提供了丰富的操作指南。
  • 软件体系:丰富且高质量的软件体系,决定了操作系统的功能拓展性。更多软件意味着用户能满足多样化需求,比如办公、娱乐、开发等。以macOS为例,其有大量专业的创意设计类软件,吸引了众多设计工作者。
  • 维护更新速度:快速且稳定的维护更新,能及时修复安全漏洞、优化系统性能,提升操作系统的安全性和稳定性。像Android系统,更新及时的版本能更好地抵御安全威胁。
  • 操作系统自身:操作系统自身的特性,如易用性、稳定性、兼容性等是基础。良好的系统自身素质,是吸引用户和开发者的关键。例如iOS系统,以流畅稳定和易用性著称。
  • 富有针对性的客户群体:明确的客户群体,能让操作系统在特定领域深入优化,满足用户特定需求。 例如麒麟操作系统,针对政务办公场景进行优化,提供适配的办公软件和安全方案。

2.3 免费(社区)软件

在这里插入图片描述
为什么会有⼈免费特定社区提供软件,还发布?还提供云服务器让你下载?
一是技术共享与开源精神,推动技术进步、方便开发者学习交流;
二是积累声誉,利于个人职业发展或获得社区认同;
三是商业考量,可构建生态、通过增值服务盈利;
四是兴趣与成就感,享受创造和被认可的乐趣。

2.4 软件依赖

在这里插入图片描述
在软件运行时,往往不是独立的,会依赖其他的库文件(像图里的 .so 文件,这类文件是Linux系统里的动态链接库,能被多个程序共享使用)。

比如你要运行自己的软件,它直接依赖 libc.sossl.solibhttplib.so 这些库。而 libhttplib.so 又不是完全独立的,它还依赖 libc++.solibc++.so 可能进一步依赖 XXX.so

“依赖列表”就是把这些所有需要的依赖库(包括直接依赖和间接依赖的)都整理在一起,这样才能确保软件顺利运行,缺少其中任何一个,软件都可能无法正常工作或者出现功能缺失的情况。

2.5 镜像问题

什么是镜像?
Linux里的“镜像”,简单说就两种:

  1. 软件源镜像:官方软件仓库的“复制件”,放别的服务器上。比如国外软件下载慢,国内服务器复制一份,你从国内下就快多了。

  2. 系统镜像:整个Linux系统的“打包文件”(像.iso格式),包含装系统需要的所有东西。烧到U盘或光盘里,就能用它装系统,也能用来备份或快速复制多台机器。

镜像的获取
在这里插入图片描述
上图展示了Linux系统下软件包的获取流程,涉及开发者软件包服务器(国外和国内)以及云服务器(用户端):

  • 开发者开发源代码,编译发布后,上线到国外软件包服务器(包含Ubuntu、CentOS等不同Linux环境的软件包)。
  • 国内会对国外软件包服务器做“镜像”(复制一份内容),形成国内软件包服务器。
  • 用户的云服务器通过包管理器(yum/apt),可选择从国外或国内软件包服务器发送查找、下载请求,获取软件包后,包管理器能解决依赖,完成下载、安装、卸载等操作;另外,还可通过替换配置(国内conf替换国外conf),让包管理器更便捷地从国内服务器获取资源,提升下载等操作的效率。

3.软件包管理器的安装(Ubuntu)

Ubuntu 自带**apt(Advanced Package Tool )**包管理器。

apt是Ubuntu及基于Debian的Linux发行版中用于管理软件包的工具 ,它可以帮助用户:

  • 安装软件:使用apt install 软件包名 命令,就能从配置好的软件源中下载并安装指定软件包。例如,要安装文本编辑器 nano,在终端中输入 sudo apt install nano,apt会自动解决软件的依赖关系, 并将软件包安装到系统中。
  • 更新软件:运行 sudo apt update 命令可以更新本地软件源的索引,然后使用 sudo apt upgrade 命令,就能将系统中已安装的软件更新到最新版本。
  • 卸载软件:通过 sudo apt remove 软件包名 命令,能够卸载指定的软件包,但软件的配置文件可能会保留。如果想彻底删除软件及其配置文件,可以使用 sudo apt purge 软件包名 命令。

二.vim

1.概念

Vim 是一款功能强大的文本编辑器,广泛用于 Linux、Unix 等系统,也支持 Windows 等平台。它是经典编辑器 Vi 的增强版,保留了 Vi 的高效操作逻辑,同时增加了更多功能(如语法高亮、代码补全、多级撤销等)。

核心特点是命令行驱动,操作依赖大量快捷键和命令(而非鼠标点击),熟练后能极大提升文本编辑效率,尤其适合程序员编写代码、系统管理员配置文件等场景。

简单说,Vim 就像一个“纯键盘操作的高级记事本”。

2.vim的几个基础模式介绍

  1. 核心模式(掌握这3种即可):

    • 命令模式(Normal mode):控制光标移动,执行字符/字/行的删除、移动复制区段,以及切换到插入模式或末行模式。
    • 插入模式(Insert mode):唯一可进行文字输入的模式,按「ESC」键返回命令模式,是最常用的编辑模式。
    • 末行模式(last line mode):用于文件保存、退出,还可进行文件替换、查找字符串、列出行号等操作;在命令模式下按「shift+:」进入。
  2. 其他模式:

    • vim实际有12种模式,分为6种基础模式(BASIC modes)和6种附加模式(ADDITIONAL modes)。
    • 查看方式:打开vim后,在末行模式输入「:help vim-modes」即可查看所有模式。
      在这里插入图片描述

Vim的模式切换:

  • 命令模式 ↔ 插入模式:在命令模式下,按下 i 键可进入插入模式,用于文字输入;在插入模式下,按下 Esc 键可返回命令模式。
  • 命令模式 ↔ 底行模式:在命令模式下,按下 shift+: 可进入底行模式,用于执行保存、退出、查找等操作;在底行模式下,按下 Esc 键可返回命令模式。

3.vim正常模式的命令集

3.1 插入模式切换(从命令模式进入)

  • 按「i」:从光标当前位置开始输入。
  • 按「a」:从光标所在位置的下一个位置开始输入。
  • 按「o」:插入新行,从行首开始输入。
  • 退出插入模式:按「ESC」键返回命令模式。

3.2 光标移动(命令模式下)

  • 基础移动:「h」(左)、「j」(下)、「k」(上)、「l」(右),各移一格。
  • 行内移动:「$」(行尾)、「^」(行首)。
  • 单词移动:「w」(下个字开头)、「e」(下个字尾)、「b」(上个字开头)。
  • 指定位置:「#l」(移到该行第#个位置,如5l、56l)。
  • 全文移动:「gg」(文本开头)、「shift+g」(文本末端)。
  • 屏幕滚动:「ctrl+b」(后移一页)、「ctrl+f」(前移一页)、「ctrl+u」(后移半页)、「ctrl+d」(前移半页)。

3.3 删除操作(命令模式下)

  • 字符删除:「x」(删除光标处1个字符)、「#x」(删除光标处及后共#个字符,如6x);「X」(删除光标前1个字符)、「#X」(删除光标前#个字符,如20X)。
  • 行删除:「dd」(删除光标所在行)、「#dd」(从光标行开始删除#行)。

3.4 复制与粘贴(命令模式下)

  • 复制:「yw」(复制光标处到字尾的字符)、「#yw」(复制#个字);「yy」(复制光标行)、「#yy」(复制光标行及往下共#行,如6yy)。
  • 粘贴:「p」(将缓冲区内容粘贴到光标处)。

3.5 替换操作(命令模式下)

  • 「r」:替换光标所在处1个字符。
  • 「R」:持续替换光标所到字符,直到按「ESC」退出。

3.6 撤销与恢复(命令模式下)

  • 撤销:「u」(撤销上一次操作,可多次按)。
  • 恢复撤销:「ctrl+r」(恢复被撤销的操作)。

3.7 更改操作(命令模式下)

  • 「cw」:更改光标处到字尾的内容。
  • 「c#w」:更改#个字(如c3w更改3个字)。

3.8 跳至指定行(命令模式下)

  • 查看行号:「ctrl+g」(显示光标所在行行号)。
  • 跳转:「#G」(移至第#行首,如15G跳至第15行)。

4.vim末行模式命令集

4.1 末行模式进入方式

  • 先按「ESC」确认处于命令模式,再按「:」(冒号)进入末行模式。

4.2 末行模式常用操作

  1. 列出行号

    • 输入「set nu」,文件每一行前会显示行号。
  2. 跳至指定行

    • 输入数字「#」(如15)并回车,直接跳至第#行。
  3. 查找字符

    • 「/关键字」:从当前位置向后查找,按「n」继续向后找下一个。
    • 「?关键字」:从当前位置向前查找,按「n」继续向前找下一个。
    • 区别:「/」是向后搜索,「?」是向前搜索(可通过实际操作验证方向差异)。
  4. 保存文件

    • 输入「w」,保存当前文件内容。
  5. 离开vim

    • 「q」:正常退出(需文件已保存或未修改)。
    • 「q!」:强制退出,不保存未修改内容。
    • 「wq」:保存文件并退出(推荐常用)。

    5.总结

    在这里插入图片描述

上图展示了Vim编辑器的模式切换关系:

  • 默认进入命令模式:启动Vim(如执行vim XXXX.c)时,默认进入命令模式。
  • 命令模式与其他模式的切换
    • 与插入模式:在命令模式下按a/i/o进入插入模式,按Esc返回命令模式。
    • 与底行模式:在命令模式下按shift+:进入底行模式,按Esc返回命令模式。
    • 与替换模式:在命令模式下按shift+r进入替换模式,按Esc返回命令模式。
    • 与视图模式:在命令模式下按ctrl+v进入视图模式,按Esc返回命令模式。

三.编译器 gcc和g++

1.gcc和g++的区别

对比项gccg++
全称GNU Compiler Collection(GNU 编译器集合)GNU C++ Compiler(GNU C++ 编译器)
主要用途主要用于编译 C 语言程序主要用于编译 C++ 语言程序
默认编译方式按 C 语言语法规则编译代码按 C++ 语言语法规则编译代码
对文件的处理.c 文件按 C 编译,对 .cpp 等文件可能按 C++ 编译(需手动指定标准库)无论文件后缀(.c、.cpp 等),均按 C++ 语法编译
标准库链接编译 C++ 程序时,不会自动链接 C++ 标准库(需手动加 -lstdc++自动链接 C++ 标准库(无需手动指定)
语言特性支持支持 C 语言的所有标准(C89、C99、C11 等)支持 C++ 语言的所有标准(C++98、C++11、C++17 等)
预处理差异预处理时定义 __STDC__ 宏(标识 C 环境)预处理时定义 __cplusplus 宏(标识 C++ 环境)
常见使用场景编译纯 C 项目(如 Linux 内核模块、C 库等)编译 C++ 项目(如 C++ 应用程序、带类/模板的代码等)

补充说明
在 Linux的Ubuntu版本 中,gcc 实际是一个编译器驱动程序,可通过参数(如 -x c++)指定编译语言;而 g++ 本质上是 gcc 的一个封装,默认启用 C++ 模式并链接 C++ 标准库。因此,用 gcc 编译 C++ 代码时需显式指定 -lstdc++,而 g++ 无需额外操作。

2.编译代码过程(以gcc为例)

gcc编译格式:gcc [选项] 要编译的文件 [选项] [目标文件]

  1. 预处理(宏替换等操作)

    • 核心功能:完成宏定义替换、处理文件包含(如#include)、条件编译(如#ifdef)、去除代码注释等。
    • 关键特征:针对以#号开头的预处理指令进行处理。
    • 编译选项:使用“-E”选项,使gcc在预处理结束后停止后续编译步骤。
    • 实例命令:gcc –E hello.c –o hello.i,其中“-o”指定输出目标文件,“.i”为预处理后的C程序文件。
  2. 编译(生成汇编代码)

    • 核心功能:检查代码规范性和语法错误,确认代码逻辑后,将预处理后的代码翻译成汇编语言。
    • 编译选项:使用“-S”选项,仅执行编译过程,不进行后续汇编操作,直接生成汇编代码。
    • 实例命令:gcc –S hello.i –o hello.s ,生成的“.s”文件为汇编代码文件。
  3. 汇编(生成二进制目标代码)

    • 核心功能:将编译阶段生成的“.s”汇编文件转换为机器可识别的二进制目标代码。
    • 编译选项:使用“-c”选项,实现汇编过程,生成二进制目标文件。
    • 实例命令:gcc –c hello.s –o hello.o ,“.o”为二进制目标代码文件。
  4. 链接(生成可执行文件或库文件)

    • 核心功能:将多个目标文件及所需的库文件进行连接,整合为可执行文件或库文件。
    • 实例命令:gcc hello.o –o hello ,生成的“hello”为可执行文件。

3.动静态库

3.1 动态库

在这里插入图片描述
我们可以结合以上场景来感性理解动态库:

动态库想象成学校外的“小蚂蚁网吧”,它是一个提供特定功能的公共场所。

  • 张三(你的程序)需要用网吧的功能时,不会把网吧搬到自己家,而是由学长李四告诉他“去网吧的路线:东门直走100,左拐50”。
  • 当张三在“内存宇宙一中”运行时,才会根据这个路线去动态库(网吧)那里“调用功能(库函数跳转)”,用完后再回到自己的代码继续执行(库函数返回)。
  • 要是“小蚂蚁网吧”(动态库)突然没了(库文件缺失),张三、李四这些依赖它的程序,就都没法使用对应的功能了,也就是“一旦库缺失,所有相关程序无法运行”。

这种模式的好处是节省空间(多个程序共享同一个库,不用重复存),但缺点是得依赖这个外部库一直存在,库出问题所有依赖它的程序都会受影响。

3.2 静态库

在这里插入图片描述

感性认识静态库,我们可以结合上图中的类比来理解:

** 1. 静态库的“运作逻辑”**
把静态库想象成直接把“网吧的电脑”搬到你家。当你的程序(张三)需要用到库中的方法时,编译器和链接器会把这些方法直接拷贝到你的程序里(就像“给你一个电脑”,把功能内置到自己的程序中)。

** 2. 静态库的“独立特性”**
一旦链接成功,生成的可执行程序就不再需要静态库了。就好比你把电脑搬回家后,不管外面的网吧(静态库的源文件)是否存在,你都能在自己家里使用这台电脑的功能。

这种方式的好处是程序独立运行,不依赖外部库的存在;但缺点是会让程序体积变大(因为把库的代码复制了一份到自己程序里)。

3.3 动静态库对比

以下是动态库与静态库的优缺点对比表格:

对比维度动态库(共享库)静态库
文件体积可执行文件体积小(仅包含调用接口)可执行文件体积大(包含库的完整代码)
内存占用多个程序共享同一份库,节省内存每个程序都包含独立副本,内存占用高
更新维护只需更新动态库文件,所有依赖程序受益需重新编译链接程序才能更新库功能
依赖性运行时依赖动态库文件,缺失则无法运行不依赖外部文件,可独立运行
编译速度编译链接速度快(无需复制库代码)编译链接速度慢(需复制整合库代码)
兼容性库版本变化可能导致程序兼容性问题编译后与库版本绑定,兼容性更稳定
http://www.dtcms.com/a/517223.html

相关文章:

  • 深浅复制
  • 为什么做的网站要续费深圳seo网络公司
  • 淄博网站建设公司羊肉片机互联网营销
  • 书店商城网站设计小说网站推荐
  • 辽宁建设厅查询网站首页客源通app下载
  • 具身智能 Note 1 ——仿真软件简介篇
  • Redis主从、哨兵、集群
  • JavaScript 核心知识学习笔记:给Java开发者的实战指南
  • 成都网站建设科资阳公司网站建设
  • 网站建设伍金手指下拉2wordpress在文章里面加歌曲
  • 网站设计 书籍网站改备案信息吗
  • 自己做网站系统首选平台无锡网站制作工具
  • 南昌市建设网站建网站建网站的公司
  • 合合信息亮相PRCV:多模态文本智能与内容安全双擎驱动的技术突破与实践解析
  • 哪家网站做的比较好建设银行河北分行网站
  • 吉林省建设集团有限公司网站网上做广告宣传
  • 区间dp|单调deque
  • 【MySQL 数据库】使用C语言操作MySQL
  • 宜黄住房和城乡建设部网站wordpress可以做门户网站
  • 怎样破解网站后台密码网页优化seo公司
  • Goroutine 和 Channel
  • [Dify 实战] 插件认证与安全策略:API Key、Token 等配置全解析
  • vs做的网站如何温州网牌电线
  • 知名网站制作服务租服务器
  • 中国银行建设网站首页上海自贸区注册公司在哪里
  • 开源隐私计算框架SecretFlow | 基于隐语的金融全链路场景介绍和应用实践
  • 【20】MFC入门到精通——MFC 运行或调试状态在 VS输出框,打印字符串信息 OutputDebugString(str);
  • 唐山cms模板建站南昌网站优化
  • 年化454.23%,最大回撤6.97%,加上了每笔订单的交易细节,系统及策略代码已发布
  • 企业招聘新趋势:「AI面试」如何破解在线作弊难题?