【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      在光标**上方新开一行**插入

开发最常用:iAo。编辑完成务必按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>

相关推荐
雪的季节1 小时前
Python 线程同步与异步编程 全解析
java·开发语言
skywalk81631 小时前
在FreeBSD的Uubntu兼容环境下安装Reasonix
linux·运维·freebsd
●VON1 小时前
鸿蒙 PC Markdown 编辑器自由窗口:覆盖侧栏与响应式预算
安全·华为·编辑器·harmonyos·鸿蒙
^yi1 小时前
【Linux系统编程】对操作系统的理解
linux·运维·服务器·操作系统·系统调用·os
520拼好饭被践踏1 小时前
JAVA+Agent学习day22
java·开发语言·后端·学习
笨蛋不要掉眼泪2 小时前
Java虚拟机:堆的参数配置
java·开发语言·jvm
Kina_C2 小时前
LVS-NAT 负载均衡实验从环境搭建到规则持久化
linux·运维·服务器·负载均衡·lvs
冰暮流星2 小时前
javascript之date对象
开发语言·javascript·ecmascript
小肝一下2 小时前
7. 库制作与原理
linux·c语言·操作系统·bash·shell·动静态库