1 yum 软件包管理器
1.1 软件包与包管理器概念
在 Linux 中安装软件有两种主流方式:
- 源码编译安装:下载完整源代码,本地机器编译生成可执行程序。 缺点:需要手动处理编译环境、库依赖,步骤繁琐,新手不推荐。
- 预编译软件包安装:开发者提前把源代码编译完成,打包成软件包,存放在网络软件服务器上。
类比理解: 软件包 ≈ Windows 的 exe 安装包 / 手机 APP 安装包 包管理器 ≈ 手机上的应用商店,负责查找、下载、安装、卸载软件,自动处理依赖。
不同发行版包管理器不一样:
- CentOS / RedHat / Fedora:
yum,软件包后缀.rpm - Ubuntu / Debian:
apt,软件包后缀.deb

1.2 软件依赖关系
Linux 软件大多不是完全独立。一个软件运行,需要依赖其他库文件。
举例:安装 A 软件,A 运行需要 B 库;B 库又依赖 C 库,这就是依赖链条。
如果手动安装,需要人工一层层去找所有依赖包,非常麻烦。 yum/apt 核心价值:自动分析依赖关系,一次性把所有需要的软件全部下载安装完成。
1.3 国内镜像源
官方软件仓库服务器部署在国外,国内服务器直接访问下载速度很慢。 国内高校、阿里云等机构,完整拷贝国外软件包,搭建国内镜像服务器。 修改系统源配置指向国内镜像,可以大幅提升下载速度。
常用国内镜像站点:
1.阿里云镜像站

提示:云服务器出厂一般已经配置国内镜像源;本地虚拟机学习环境经常需要手动替换镜像源。
1.4 CentOS yum 常用命令实操
重要提醒:安装卸载软件会修改系统目录,绝大多数 yum 命令需要加
sudo提升权限。 使用 yum 前先确认网络正常:ping www.baidu.com。 yum 同一时刻只能执行一个任务,不要打开多个终端同时执行 yum,会出现锁冲突报错。
① 查找软件包 yum list + grep
yum list 会输出海量软件包,配合管道grep过滤我们关心的包。
# 查询 lrzsz 软件包
yum list | grep lrzsz
输出样例解读: lrzsz.x86_64 0.12.20-36.el7 @base
lrzsz.x86_64:软件包名称;x86_64代表 64 位系统;el7代表适配 CentOS7- 第二列:软件版本号
@base:该软件来自 base 基础软件源
② 安装软件
sudo yum install -y lrzsz
-y参数:全部交互确认选 yes,不需要手动输入 y。
③ 卸载软件
sudo yum remove -y lrzsz
1.5 Ubuntu apt 简单了解
如果使用 Ubuntu 系统,包管理器为 apt,命令有差异:
#搜索软件
apt search lrzsz
#安装软件
sudo apt install -y lrzsz
#卸载软件
sudo apt remove -y lrzsz
1.6 yum 源配置文件、epel 扩展源
yum 源配置文件存放路径:
ll /etc/yum.repos.d/
目录下以.repo结尾的文件,就是各个软件源配置文件。
epel 扩展源
系统自带 base 源内置软件数量有限,epel 源提供大量额外开源工具。 安装 epel 扩展源:
sudo yum install -y epel-release
安装之后就可以使用 epel 仓库里面的软件包。
离线环境无法使用 yum,入门学习阶段不需要重点关注。
2 Vim 编辑器
2.1 vi 与 vim 区别

vi:古老原始的文本编辑器。vim:vi 的增强升级版本,完全兼容 vi 的所有指令;新增语法高亮、可视化操作等大量实用功能。
学习统一使用 vim。
打开文件语法:
vim test.c
⚠新手大坑:vim 打开文件,默认是命令模式,不能直接打字输入内容,需要切换到插入模式才可以编辑。
2.2 vim 三大核心模式
vim 内部一共有十多种模式,入门只掌握最重要 3 种:
- 正常 / 命令模式(Normal):vim 打开文件默认进入该模式。不能输入文字;用来移动光标、删除、复制粘贴、撤销。
- 插入模式(Insert):真正输入、编辑代码文字的模式。
- 底行模式(Last line):执行保存、退出、文本查找、设置参数,
shift + :进入。
2.3 模式之间互相切换
- 命令模式 → 插入模式:
i/a/o - 插入模式 → 命令模式:按
Esc - 命令模式 → 底行模式:
shift + ;输入冒号: - 底行模式回到命令模式:按
Esc
🆘新手万能救命按键:分不清当前是什么模式,多按几次
Esc,强制回到命令模式。
表格
| 按键(命令模式下执行) | 作用 |
|---|---|
i | 在当前光标位置开始输入 |
a | 光标向后挪一格,下一个字符位置输入 |
o | 在当前行下方新开一行,行首输入 |
2.4 正常(命令)模式全套操作
光标移动

传统 vim 推荐不用方向键,使用 hjkl 移动光标
h左、j下、k上、l右
表格
| 命令 | 功能说明 |
|---|---|
gg | 跳到整个文档第一行 |
G | 跳到整个文档最后一行 |
^ | 跳到当前行行首(非空格位置) |
$ | 跳到当前行行尾 |
w | 跳到下一个单词开头 |
b | 跳到上一个单词开头 |
ctrl + f | 向下翻一整页 |
ctrl + b | 向上翻一整页 |
15G | 直接跳转到第 15 行 |
删除文本
表格
| 命令 | 功能说明 |
|---|---|
x | 删除光标所在位置 1 个字符 |
6x | 从光标开始向后删除 6 个字符 |
X | 删除光标前面一个字符 |
dd | 删除光标所在完整一行 |
5dd | 从当前行向下一共删除 5 行 |
复制与粘贴
表格
| 命令 | 功能说明 |
|---|---|
yy | 复制光标当前一整行 |
4yy | 复制从当前行往下 4 行 |
yw | 复制一个单词 |
p | 粘贴内容到光标行的下方 |
替换、撤销恢复
表格
| 命令 | 功能说明 |
|---|---|
r | 替换光标处单个字符;按 r 再输入目标字符 |
R | 持续覆盖替换,按 Esc 结束替换模式 |
u | 撤销上一步操作,可以多次 u 做多步撤销 |
ctrl + r | 反撤销,恢复被撤销的操作 |
2.5 底行模式常用指令
先按
Esc回到命令模式,输入shift + :进入底行模式。
表格
| 底行指令 | 功能 |
|---|---|
w | 保存文件,不退出 |
q | 退出;文件有改动无法直接 q 退出 |
wq | 保存并且退出 vim |
q! | 强制不保存退出,丢弃全部修改 |
set nu | 显示行号 |
set nonu | 关闭行号显示 |
/hello | 向下搜索字符串 hello,n 跳转下一个匹配 |
?hello | 向上搜索字符串 hello,n 跳转上一个匹配 |
12 | 输入数字回车,跳转到 12 行 |
新手高频报错:修改完文件输入
q无法退出。解决:要么:wq保存退出,要么:q!放弃修改强制退出。
2.6 vim 简单本地配置
vim 配置分两套:
- 全局配置:
/etc/vimrc,对系统全部用户生效,需要 root 权限。 - 用户私有配置:家目录下隐藏文件
.vimrc,普通用户即可修改,只作用于当前登录账号。
#回到家目录
cd ~
#打开私有配置文件
vim .vimrc
写入简单配置示例:
syntax on "开启语法高亮
set nu "默认显示行号
set shiftwidth=4 "tab缩进占4个空格
保存退出,重新打开 vim 配置即可生效。
系统自带练习教程,终端输入:
vimtutor,跟着练习 vim 操作。插件 TagList、WinManager 入门了解即可。
3 gcc /g++ C/C++ 编译器
3.1 gcc 与 g++ 区别
gcc:主要编译 C 语言代码;也可以编译 C++,但是不会自动链接 C++ 标准库。g++:专门编译 C++ 代码,内部会调用 gcc,并且自动链接 C++ 标准库。
写
.cC 代码用 gcc;写.cppC++ 代码优先使用 g++。
示例简单代码 test.c
#include <stdio.h>
int main()
{
printf("hello gcc\n");
return 0;
}
最简编译运行:
gcc test.c -o test
./test
3.2 C/C++ 程序完整 4 个编译阶段
完整编译流程分为四步,每一步生成对应中间文件:
- 预处理(Preprocessing):展开头文件、替换宏定义、删除注释、处理条件编译。输出后缀
.i文件。 - 编译(Compilation):语法语义检查,把 C/C++ 代码翻译成汇编代码,输出后缀
.s汇编文件。 - 汇编(Assembly):汇编代码转为机器指令,生成可重定位目标文件,后缀
.o。 - 链接(Link):把多个
.o目标文件、系统库文件合并,生成最终可执行程序。
平时直接
gcc test.c -o test,gcc 会一次性走完四步,中间文件不会保留。
3.3 分步编译实操
- 预处理
-E,只做预处理,输出.i
gcc -E test.c -o test.i
- 编译
-S,生成汇编.s
gcc -S test.i -o test.s
- 汇编
-c,生成目标文件.o
gcc -c test.s -o test.o
- 链接,生成可执行程序
gcc test.o -o test
3.4 静态链接 vs 动态链接
静态链接
链接阶段,把库里面的代码完整拷贝复制到我们的可执行程序内部。
- 优点:程序运行时不再依赖外部库文件,移植方便;运行速度快。
- 缺点:可执行文件体积大;多个程序使用同一个库,内存会有多份副本;库升级需要重新编译整个程序。
- 静态库后缀:
.a
动态链接(gcc 默认方式)
链接阶段不会把库代码拷贝进程序。仅仅记录依赖信息;程序运行的时候才加载外部动态库。
- 优点:可执行文件体积小;内存多个程序可以共享同一份库;库升级替换动态库文件即可,程序不需要重新编译。
- 缺点:运行环境必须存在对应动态库,否则程序直接无法运行。
- 动态库后缀:
.so
ldd 命令:查看程序依赖哪些动态库
ldd test
输出会列出该可执行程序依赖的所有.so动态库。
补充:CentOS 默认没有安装静态库,如果需要使用静态库,执行:
sudo yum install glibc-static libstdc++-static -y
编译使用-static参数开启静态链接:
gcc test.c -o test_static -static
3.5 gcc 高频编译选项汇总
表格
| 选项 | 作用 |
|---|---|
-E | 只执行预处理,停止编译 |
-S | 预处理 + 编译,生成汇编,停止汇编阶段 |
-c | 预处理 + 编译 + 汇编,生成.o 目标文件,不链接 |
-o filename | 指定输出文件名 |
-g | 加入调试信息,给 gdb 调试器使用 |
-static | 使用静态链接 |
-O0 / -O1 / -O2 / -O3 | 编译器优化等级,O0 无优化,O3 最高优化 |
-Wall | 打开全部警告提示,开发推荐加上 |
-w | 关闭所有警告(不推荐) |
示例带警告、调试信息编译:
gcc -g -Wall test.c -o test
4 本篇小结
- yum 是 CentOS 包管理器,自动处理软件依赖;epel 扩展源增加软件数量,操作需要 sudo。
- vim 三大模式:命令模式、插入模式、底行模式;Esc 回到命令模式,
i/a/o进入编辑,shift+:进入底行模式保存退出。 - gcc 编译 C,g++ 编译 C++;程序完整 4 阶段:预处理→编译→汇编→链接。
- 静态链接把库代码拷贝进程序;动态链接运行时加载库,gcc 默认动态链接;
ldd查看动态库依赖。
5 面试 & 实操高频问题
Q1 gcc 和 g++ 区别?
gcc 主要编译 C 语言;g++ 编译 C++,会自动链接 C++ 标准库。gcc 也可以编译 cpp,但不会自动链接 C++ 库。
Q2 C 程序编译四个阶段分别做什么?生成什么后缀文件?
预处理(.i):去注释、宏替换、头文件展开;编译(.s)生成汇编;汇编(.o)机器目标文件;链接合并目标与库生成可执行程序。
Q3 静态链接与动态链接区别?
静态链接:编译时库代码拷贝进可执行文件,运行不依赖外部库,体积大,库更新需要重编译;静态库
.a。 动态链接:编译只记录依赖,运行时加载.so库,体积小,运行环境必须有库文件。
Q4 ldd 命令作用?
查看可执行程序依赖哪些动态共享库。
Q5 vim 打开文件打不出字?
默认是命令模式,i/a/o 切换插入模式才能输入。

转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/wuqingyigexiaoba/article/details/167131771











