

前引:Linux 开发工具的强大之处在于其生态的协同性:yum和apt解决 “软件从哪里来” 的问题,Vim 和 VS Code 解决 “代码怎么写” 的问题,GCC 和 Make 解决 “代码怎么跑” 的问题,而 Git 则解决 “代码怎么协作” 的问题。本文将从实际开发场景出发,带你掌握包管理器配置、编辑器快捷键、编译器优化等核心技巧,让每个工具都成为你开发流程中的 “助推器”,而非障碍!

目录
【一】软件包管理器
(1)什么是软件包管理器
(2)Linux软件生态
(3)yum 具体操作
(1)查看软件包
(2)安装软件包
(3)卸载软件包
(4)趣味软件包
【二】编辑器Vim
(1)vim介绍
(1)命令模式
(1)gg命令
(2)shift+g命令
(3)n+shift+g命令
(4)(n)yy命令
(5)(n)p命令
(6)u命令
(7)(n)dd命令
(8)w,b命令
(9)h j k l命令
(10)shift + ~命令
(2)插入模式
(3)底行模式
(4)编辑器自由化
【三】编译器gcc/g++
(1)补充sudo权限
(2)代码文件执行过程
(1)预处理
(2)编译
(3)汇编
(4)链接
(3)动态库和静态链接
【一】软件包管理器
(1)什么是软件包管理器
在Linux下安装软件,有以下几种方法:
(1)下载到程序的源代码,并进⾏编译,得到可执⾏程序
(2)将常用的软件提前编译好,做成软件包,然后放到服务器,通过包管理器⽅便获取这 个编译好的软件包。用户直接进⾏安装
那么我们作为大众用户,肯定是“APP与应用商店”的形式更加的方便快捷人性化!
yum:(Yellow dog Updater Modified)是Linux下⾮常常⽤的⼀种包管理器,主要应⽤在Fedora、RedHat、Centos等发⾏版上
(2)Linux软件生态
对于 centos 等发行版本和 包管理器 的关系如下理解:
CentOS 是 “操作系统”,而包管理器是 CentOS 内置的 “软件管理工具”
对于Linux的软件生态,我们可以这么理解:
- 软件包服务器 是 “仓库 + 货架”:存储着所有待售商品属于供货商(软件包)
- CentOS 等发行版 是 “超市品牌方”:决定货架上放哪些商品属于市场(筛选兼容的软件)
- yum 等包管理器 是 “智能导购 + 配送员”:根据用户需求(比如 “我要装 Nginx”)

为什么有人免费提供软件、发布软件等?比如Linux开源?
单个开发者的能力有限,但 “免费发布 + 开放下载” 能吸引大量社区成员参与,形成 “人人贡献、人人受益” 的循环 —— 这是免费软件能长期维护、不断迭代的关键!
越来越多人参与了免费产品的实现更新,变得有成就感和影响力,又解决了各种Bug
就会有各种企业去使用它,当造成依赖,会不断为它投资等,形成循环,产品更好,市场更大

(3)yum 具体操作
(1)查看软件包
查看软件包类似打开应用商店,查看可以使用的软件!使用指令:查看软件名称、版本等各种信息
yum list

装软件时由于需要向系统⽬录中写⼊内容,⼀般需要sudo或者切到root账⼾下才能完成
(2)安装软件包
sudo yum install 软件包名
或者
sudo yum install -y nginx # 直接安装,不询问确认
(3)卸载软件包
sudo yum remove 软件包名
或者
sudo yum remove -y nginx #加 -y 选项跳过确认
(4)趣味软件包
可以查看当前centos下支持哪些趣味软件包:
| game | 小游戏(如终端游戏、复古游戏) | yum search game |
| fun | 趣味工具(如文字特效、动画彩蛋) | yum search fun |
| toys | 轻量级娱乐工具(如字符动画、互动程序) | yum search toys |
| utils | 创意实用工具(如系统美化、交互增强) | yum search utils |
| 具体工具名(如cowsay) | 已知的趣味工具(直接搜名称) | yum search cowsay |
例如:

【二】编辑器Vim
(1)vim介绍
Vim(Vi IMproved)是 Linux/Unix 系统中最经典、最强大的文本编辑器之一,由 Bram Moolenaar 基于传统编辑器 Vi 开发,核心优势是模式化编辑和高效操作,无需鼠标即可完成复杂的文本处理,是程序员、系统管理员的必备工具!
Vim具有三种模式:命令模式、插入模式、底层模式

| 命令模式 | 执行命令(移动、删除、复制、撤销等) | ||
| 插入模式 | 输入 / 编辑文本(类似记事本的 “编辑状态”) | ||
| 底行模式 | 执行全局命令(保存、退出、搜索、替换等) |
(1)命令模式
我们可以创建一个 .c 后缀的文件然后用 vim 打开进去默认命令模式:

进去之后如下图所示:下面开始讲解各种常用命令(为了方便演示我提前写入一些代码):

(1)gg命令
作用:定位光标到最开始的位置
例如:此时光标在这个位置,按下 gg 之后,光标会移到最开始的位置


(2)shift+g命令
作用:定位光标到结尾的位置
例如:光标现在在开始的位置,shift+g 之后,光标会去到结尾的位置


(3)n+shift+g命令
作用:定位光标到 n 行的位置
例如:现在在末尾,我让它去到 main 函数行


(4)(n)yy命令
作用:复制光标开始的 n 行
(5)(n)p命令
作用:从光标下一行开始,粘贴 n 行

(6)u命令
作用:撤销操作
例如:
现在已经粘贴了,我把操作撤销 
(7)(n)dd命令
作用:从光标开始,删除 n 行
例如:


(8)w,b命令
作用:按单词左右移动光标
例如:

(9)h j k l命令
作用:安装字符左下上右移动光标
(10)shift + ~命令
作用:快速大小写转换(按住shift不动,每按一次~可以转换一次)
例如:

(2)插入模式
插入模式可以理解为写代码的环境,我们最开始进入文件的时候默认命令模式
现在我们按 i 即可从命令模式进入插入模式,进入插入模式底部会显示 INSERT
如果想退回命令模式可以按 ESC

(3)底行模式
在命令模式下,我们可以按 Shift + ;或者: 进入底行模式,底部会显示:
如果我们想回到命令模式可以按ESC,也可以 wq 保存退出

(4)编辑器自由化
我们可以看到上面的编辑器格式和我们日常的写代码环境很不同,这是因为配置问题
如果我们想让自己的编辑器更加符合日常编写代码的格式,可以直接执行下面这条指令需200MB
先复制下面这条指令,然后在Linux指令界面下: Ctrl+Shift+/V(粘贴)
不需要在root权限下面,支持普通用户,且普通用户配置之后不会影响其它用户vim编辑格式
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
一键配置过程如下:
(1)先复制上面那条指令到Linux下粘贴(Ctrl+Shift+V)执行,输入root密码

(2)Linux下复制指令(Ctrl+Shift+C)执行指令,再(Ctrl+Shift+V)粘贴执行执行


现在我们创建一个 .c 后缀的文件,看看新vim编辑格式:它自动跳转到插入模式(模式跳转和上面一样)如果我们要保存退出,可以ESC跳到命令模式,然后Shift :进入底层模式,再WQ

【三】编译器gcc/g++
| 核心定位 | GNU 编译器集合,支持多语言(C、C++、Fortran 等),默认优先处理 C 语言 | gcc 的 C++ 专用前端工具,专门用于编译 C++ 代码 |
| 默认处理语言 | – 对 .c 文件默认按 C 语言 语法解析 – 对 .cpp/.cc 等文件默认按 C++ 语言 解析(但需手动链接 C++ 库) | 无论文件扩展名为 .c 还是 .cpp,默认均按 C++ 语言 语法解析 |
| 对 C++ 标准库的链接 | 编译 C++ 代码时 不会自动链接 C++ 标准库(libstdc++),需手动添加 -lstdc++ 选项 | 编译时 自动链接 C++ 标准库(libstdc++),无需手动指定 |
| 对 C++ 特性的支持 | 处理 C 代码时不支持 C++ 特性(如类、命名空间);处理 C++ 代码需显式启用相关逻辑 | 默认启用所有 C++ 特性(如函数重载、模板、类),无需额外配置 |
| 典型适用场景 | 主要用于编译 纯 C 语言程序 | 主要用于编译 C++ 程序(包括纯 C++ 代码或混合 C/C++ 代码) |
| 共享特性 | 基于相同的 GCC 编译引擎,共享编译流程(预处理→编译→汇编→链接)和大部分命令选项(如 -o、-Wall、-g、-O 等) | …………. |
(1)补充sudo权限
如果普通用户需要sudo权限,可以按如下操作进行:
(1)切换到root用户,打开Vim /etc/sudoers
(2)找到下面这样的界面:root ALL=(ALL) ALL

(3)yy 复制这一行,然后进行 p 粘贴,修改用户名为要添加的账号,进底行模式 wq! 保存退出

(2)代码文件执行过程
每一个被编写的代码文件都要经历以下几个阶段:
1.预处理(进⾏宏替换/去注释/条件编译/头⽂件展开等)
2.编译(⽣成汇编)
3.汇编(⽣成机器可识别代码)
4.链接(⽣成可执⾏⽂件或库⽂件)
如果我们直接用编译器指令编写文件,会直接从预处理到链接生成可执行文件:

下面我们开始进行分阶段执行演示!
(1)预处理
现在有一个刚被编写完成的 .c 文件,如果我们只想让它完成预处理过程,可以加上 -E 选项,例如
例如:gcc -E text.c -o text.i
作用:预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等
预处理指令是以#号开头的代码⾏
操作:选项“-E”,该选项的作⽤是让 gcc 在预处理结束后停⽌编译过程
选项“-o”是指⽬标⽂件,“.i”⽂件为已经过预处理的C原始程序

然后我们用vim编辑器打开文本看下结果:

(2)编译
作用:在这个阶段中,gcc ⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际 要做的⼯作, 在检查⽆误后,gcc 把代码翻译成汇编语⾔!
操作:⽤⼾可以使⽤“-S”选项来进⾏查看,该选项只进⾏编译⽽不进⾏汇编,⽣成汇编代码
例如: gcc –S hello.i –o hello.s
现在我们将刚预处理的文件text.i 经过编译处理:
注:for(int i …, 将定义写在fro循环中是C99的标志,所以需要额外添加 -std = c99

(3)汇编
作用:汇编阶段是把编译阶段⽣成的“.s”⽂件转成⽬标⽂件
读者在此可使⽤选项“-c”就可看到汇编代码已转化为“.o”的⼆进制⽬标代码了
例如: gcc –c hello.s –o hello.o


(4)链接
作用:在成功编译之后,就进⼊了链接阶段,和库进行链接形成可执行程序(文件)
操作: gcc hello.o –o hello


(3)动态库和静态链接
在上面我们说到:在代码进行链接的时候会和库产生连接,怎么连接?
库(静态库 / 动态库) 是链接过程中提供可复用代码的核心载体
链接过程通过处理库中的代码,解决程序中的符号依赖
头文件提供声明,库提供实现(就好比stdio.h)
最终生成可独立运行(或依赖动态库运行)的可执行文件
这里的库本质就是一个文件,分为动态库和静态库,在Linux下分别是 .so .a
那么何为动态库和静态库?
动态库:就好比只存一个地址,你需要就根据地址寻找然后使用
静态库:将自己的方法拷贝到目标文件中,因此该程序以后不再依赖静态库
动静态库的安装:
静态库:sudo yum install -y glibc-static
动态库:sudo yum install -y libstdc++-static
例如:

在安装动静态库之后,我们可以选择链接的方式:
注意:还有的链接是动态、静态链接混合的,这个我们了解就行!
动态链接:默认就是动态链接
![]()
静态链接:gcc text.o -o hello_static -static
![]()
动态和静态链接的对比:
动态链接:属于共享库,有效节省资源(比如网络资源、磁盘资源、内存空间),但是动态 库一旦删除或者出问题,很多程序都无法正常运行
静态链接:不依赖库,程序可以独立运行,但是空间很大,消耗资源







