【Linux】 软件包管理器(yum)+ Vim使用


基础开发工具

1-1 什么是软件包

概念

Windows 下软件大多是exe安装程序;Linux 软件包 = 将程序二进制文件、配置文件、手册、依赖信息打包成的归档文件。 程序开发完成后不能直接分发零散文件,打包后方便统一安装、卸载、依赖检测。

两大分类

  1. 源码包
    • 格式:.tar.gz/.tar.bz2
    • 特点:提供 C/C++ 等源代码,下载后需要./configure && make && make install编译
    • 优点:可自定义编译参数;缺点:编译耗时,需要编译环境,手动处理依赖
  2. 二进制软件包(预编译包) 厂商 / 社区提前编译好,无需本机编译,直接安装
    • RedHat/CentOS 系列:rpm 包(.rpm)
    • Ubuntu/Debian 系列:deb 包(.deb)

rpm 包命名示例

tree-1.7.0-11.el8.x86_64.rpm

  • tree:软件名
  • 1.7.0:主版本。次版本
  • 11:发布号
  • el8:适配 CentOS8/RHEL8
  • x86_64:64 位 CPU 架构

💡 yum 底层本质就是自动下载、安装 rpm 包,并且自动解决依赖关系。


1-2 Linux 软件生态

1. 发行版分裂带来的包体系差异

Linux 没有统一标准,不同系列使用独立包格式与工具:

发行版家族 包格式 本地包工具 网络包管理器
CentOS/RHEL/Fedora rpm rpm yum / dnf
Ubuntu/Debian deb dpkg apt / apt-get

本文重点**:CentOS7 使用 yum;CentOS8+/RockyLinux 默认使用 dnf(dnf 兼容 yum 命令)**

2. 软件仓库(Repository)

官方 / 第三方服务器集中存放大量 rpm 软件包 + 包索引,称为软件仓库(源)。

yum 工作流程:联网访问仓库索引 → 分析依赖 → 批量下载 rpm 包 → 安装。

3. 软件来源三种途径

  1. 官方源:系统自带,稳定、安全;缺点国内访问慢
  2. 第三方源(epel):官方没有的拓展软件(nginx、htop 等)
  3. 本地 rpm 包:离线下载.rpm文件,rpm -ivh安装(无法自动解决依赖)

4. 依赖地狱问题

Linux 软件普遍存在依赖:A 软件运行需要 B 库,B 库又依赖 C 库。

手动rpm安装需要人工逐层下载依赖;yum/apt 核心价值:自动递归处理依赖。


1-3 yum 具体操作

**⚠️前置条件:**服务器可以访问外网;CentOS 执行 yum 多数命令需要 root 权限(加 sudo 或切换 root)

1-3-1 查看软件包

复制代码
# 1.列出仓库所有可用软件包
yum list
2.搜索指定软件(模糊匹配)
yum search tree
3.查看软件详细信息(版本、功能、依赖)
yum info tree
4.查询:哪个软件包提供某个命令
yum provides ifconfig
5.查看本机已经安装的软件
yum list installed

1-3-2 安装软件

复制代码
# 基础安装
yum install tree
自动确认安装(脚本常用,不需要手动输入y)
yum install -y tree
同时安装多个软件
yum install -y gcc gcc-c++ make vim
安装软件组(开发工具合集!开发重点)
yum groupinstall "Development Tools"

💡Development Tools包含 gcc、g++、make、gdb 等全套 LinuxC/C++ 开发工具。

1-3-3 卸载软件

复制代码
# 卸载软件
yum remove tree
自动确认卸载
yum remove -y tree

⚠️注意:yum remove 会同时移除依赖它的包,不要随意卸载系统基础组件!

1-3-4 注意事项

  1. **权限:**普通用户执行 yum 安装会报错,必须 root/sudo

  2. **网络:**yum 依赖网络,离线环境无法直接使用 yum;需要本地 yum 源

  3. 慎用 yum update

    复制代码
    yum update

    该命令会升级本机所有已安装软件到最新版本,生产环境不建议随意执行,可能引发兼容性故障。 只想升级单个软件:yum update tree

  4. yum 与 rpm 区别

    • rpm:本地工具,操作本机 rpm 文件,不会自动下载依赖
    • yum:上层工具,联网,自动处理依赖
  5. 清理缓存

    yum clean all # 清空本地缓存的包和索引
    yum makecache # 重新生成软件源缓存


1-4 安装源(yum 源)

1. yum 源配置文件位置

CentOS7:/etc/yum.repos.d/ 目录内以.repo结尾的文件就是源配置。

2. 为什么要换源?

系统默认官方源服务器在海外,下载速度极慢;更换国内镜像源(阿里云、网易、清华源)大幅提升下载速度。

3. CentOS7 更换阿里云 yum 源演示

复制代码
# 1.备份原有官方源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2.下载阿里云repo配置文件
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
3.安装epel拓展源(大量额外软件)
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
4.重建缓存
yum clean all && yum makecache

4. 源分类

  • Base 源:系统基础软件
  • Epel 源:拓展第三方软件(必备开发源)
  • 本地源:无外网服务器,挂载系统光盘制作离线 yum 源

常见问题

  • Could not retrieve mirrorlist:网络不通 / 源地址失效
  • 找不到某个软件:没有安装 epel 源
  • CentOS7 停止维护后,官方源失效,需要切换阿里云 vault 归档源

Vim 完整详解

1. Vim 三大核心模式(重中之重)

Vim 是模态编辑器,不同模式按键作用完全不同,新手最大难点就是区分模式。

模式 作用 进入方式 退出方式
普通模式 (Normal) 默认模式,用于移动光标、复制删除、执行操作 打开文件默认进入;任意模式按 Esc i/a/o → 插入模式; : → 底行模式; v/V/Ctrl-v → 可视模式
插入模式 (Insert) 输入文本、编写代码 普通模式按下 i/a/o 按下 Esc 返回普通模式
底行模式 (Command) 保存、退出、查找、替换、设置参数 普通模式输入 : 执行命令完成 或 Esc

**补充:**可视模式(Visual),属于衍生模式,用来选中一段文本批量操作。

**⚠️新手常见错误:**打开 Vim 直接打字乱码!因为默认处于普通模式,按键不是输入字符,而是命令。

2. Vim 启动、保存与退出

启动命令

复制代码
vim               # 启动vim,不打开文件
vim test.c        # 打开/新建test.c
vim test.c +15    # 打开文件,直接跳转到第15行

底行模式基础保存退出(普通模式输入 :)

复制代码
:w        保存文件(write)
:w  new.c 另存为新文件
:q        正常退出(文件未修改才可退出)
:wq       保存并退出
:x        等价于:wq(文件无修改则不写入,更推荐)
:q!       强制退出,放弃所有修改
:wq!      强制保存退出(只读文件需要权限时使用)

3. 普通模式(Normal)高频指令

所有命令必须先按 Esc 确保处于普通模式。

3.1 光标移动

基础移动
复制代码
h    向左
j    向下
k    向上
l    向右
单词跳转(写代码高频)
复制代码
w    跳到下一个单词开头
b    跳到上一个单词开头
e    跳到当前单词末尾
行内快速跳转
复制代码
0        跳转到当前行最开头
$=4        跳转到当前行末尾
^=6        跳转到当前行第一个非空白字符
文件全局跳转
复制代码
gg       跳转到文件第一行
G        跳转到文件最后一行
nG / :n  跳转到第n行,例如 10G 直接到第10行

3.2 删除操作

复制代码
x        删除光标当前单个字符
X        删除光标左边字符
dd       删除**整行**
ndd      删除n行,例如5dd 删除光标往下5行
dw       删除光标到当前单词结尾
d0       删除光标到行首
d$       删除光标到行尾

3.3 复制、粘贴、撤销

复制代码
yy       复制当前一整行
nyy      复制n行,3yy复制3行
yw       复制一个单词
p        粘贴到光标**下一行/后方**
P        粘贴到光标**上一行/前方**
u        撤销上一次操作
Ctrl+r   反撤销(恢复被撤销内容)

3.4 修改、跳转辅助

复制代码
cw    删除当前单词并直接进入插入模式(改单词神器)
cc    清空当前行,进入插入模式
r     替换光标处单个字符(无需进入插入模式)
R     连续覆盖替换模式,Esc退出

4. 插入模式(Insert)进入方式

普通模式下执行下列按键进入编辑:

复制代码
i      在**光标前方**插入
a      在**光标后方**插入
I      当前行**行首**开始插入
A      当前行**行尾**开始插入
o      在光标**下方新开一行**插入
O      在光标**上方新开一行**插入

开发最常用:i、A、o。编辑完成务必按Esc回到普通模式。

5. 底行命令模式(:触发)拓展指令

复制代码
:set nu        显示行号
:set nonu      关闭行号
:set ts=4      设置Tab占4个空格(C/C++开发常用)
:set expandtab 将Tab自动转换成空格
字符串查找
:/keyword      向下搜索关键词keyword
?keyword       向上搜索关键词
n              跳到下一个匹配结果
N              跳到上一个匹配结果
全局字符串替换
:%s/oldstr/newstr/g      全文替换oldstr为newstr
:%s/oldstr/newstr/gc     全文替换,每次确认(c=confirm)
:! ls          在vim内临时执行shell命令

6. 可视模式 Visual(选区操作)

普通模式按下按键进入选区模式,选中文本后配合 d 删除、y 复制:

复制代码
v        字符可视模式:自由选中字符
V        行可视模式:直接选中整行
Ctrl+v   块可视模式:矩形选区(批量注释神器!)

👉 批量注释示例:

  1. Ctrl+v 进入块选择
  2. 上下移动光标选中多行代码开头
  3. 按下 I 输入 //
  4. 按下 Esc,所有选中行统一添加注释

7. 进阶实用功能

7.1 多文件与分屏

复制代码
# 启动时分屏打开两个文件
vim -O test1.c test2.c   # 垂直分屏
vim -o test1.c test2.c   # 水平分屏

vim 内部底行命令

复制代码
:vsplit   垂直拆分窗口
:split    水平拆分窗口
Ctrl+w w  在多个窗口之间切换光标
Ctrl+w q  关闭当前窗口

7.2 代码跳转(大型项目必备 ctags/cscope)

安装:yum install ctags 项目根目录执行:ctags -R 生成 tags 索引文件,vim 内:

复制代码
Ctrl+]    跳转到函数/变量定义处
Ctrl+o    跳回原来位置

8. Vim 配置文件~/.vimrc

用户目录下 .vimrc 文件,每次启动 vim 自动加载配置,不需要每次手动输入 set 命令。 示例开发常用配置,直接写入 ~/.vimrc

复制代码
" 开启语法高亮
syntax on
" 显示行号
set nu
" Tab宽度4
set tabstop=4
set shiftwidth=4
" Tab转为空格
set expandtab
" 开启自动缩进
set autoindent
" 搜索忽略大小写
set ignorecase
" 光标所在行高亮
set cursorline

配置生效方式:保存文件后重新打开 vim,或者 vim 内执行 :source ~/.vimrc


e>

相关推荐
虎鲸不是鱼3 小时前
【虎鲸进化论 13】CI/CD:它在服务器上铺了条流水线
服务器·人工智能·ci/cd·大模型·自进化agent
gopher95113 小时前
RUST:错误处理 thiserror 详解
开发语言·后端·rust
破茧蝴蝶11 小时前
Python分布式爬虫完整教程
开发语言·python
大哥您好11 小时前
QEMU 11.1.2 多架构编译指南(x86_64 / aarch64 / riscv64)
linux·服务器
狗凯之家源码网11 小时前
全新 PHP 轻量客服聊天室源码深度评测
开发语言·php·聊天室系统
远离UE412 小时前
UE5 Substrate Thin Film 源码拆析
开发语言·javascript·ue5
keyipatience12 小时前
JavaScript学习(1)书写位置,变量、数据类型、运算符
开发语言·前端·javascript·css·学习
道满科技12 小时前
Function Calling 参数总出错?只修参数就行
linux·windows·python
Gauss松鼠会13 小时前
高斯数据库(openGauss)的物理存储结构
运维·服务器·数据库·sql·opengauss·经验总结
Android系统攻城狮13 小时前
Linux Gstreamer深度解析之gst_audio_ring_buffer_prepare_read调用流程与实战(七十四)
linux·运维·服务器·gstreamer音视频·音视频进阶