☰
Linux yum-vim
2026/10/14 3:26:48 网站建设 项目流程

一、Linux 三种软件安装方式

  1. 源代码安装

    把软件的原始 C/C++ 代码下载到本机,自己编译成可执行程序。

    优点:可以自定义编译参数;缺点:麻烦,需要手动解决依赖。

  2. rpm 安装

    rpm 是 CentOS 系列的软件包格式(类似 Windows 的 exe 安装包)。

    rpm -ivh xxx.rpm直接安装本地下载好的包。

    缺点:不会自动帮你装依赖,缺库就要自己一个个去找包。

  3. yum 安装(重点)

    yum 是 rpm 包的包管理器。

    ✅ 自动解决依赖、自动下载、自动安装对应版本。

类比:手机应用商店,点一下安装,自动下载 + 自动补齐需要的组件。
依赖 = 这个软件运行必须要的其他程序 / 库文件。

一个软件不是孤立的,它要靠别的小工具、底层库才能跑起来,这些必须的东西,就叫依赖。

  • rpm:只装你指定的那一个包,缺东西不会主动补。
  • yum:装软件前先查全部依赖,自动把所有需要的配套库一起安装。

二、Linux 软件生态(这张思维导图核心)

1. yum 源是什么

yum 不是凭空下载软件,需要去yum 源服务器拿包。

  • 官方 yum 源:操作系统厂商(如 CentOS、华为)维护的服务器,存放官方软件包。
  • 扩展 yum 源:第三方、公司、个人搭建的服务器,提供官方没有的软件。

流程:

Linux 本机(客户端) → 通过网络 → 访问 yum 源服务器 → 下载 rpm 包 + 自动安装依赖

类比:

Windows:软件管家;Ubuntu:apt-get;CentOS:yum。

不同系统有各自的 “应用商店客户端”。

2. 两个角色

  • 使用者:我们程序员、服务器运维人员,下载软件来用。
  • 提供者:操作系统厂商、开源社区、公司,维护 yum 源、打包软件,给大家提供下载服务。

思考问题:客户端怎么知道去哪里下载?

答:系统里保存了 yum 源的地址配置文件,yum 命令读取这个地址,找到对应的服务器。

3. 开源的两层理解

  1. 开源是一种商业战略:开放源代码,吸引大量开发者使用、贡献代码,壮大软件生态。
  2. 开源 ≠ 免费:源代码公开,但商业服务、技术支持可以收费,所以开源有时候也很贵。

4. 操作系统选型逻辑

新人 / 企业选操作系统,优先看生态好不好:软件多不多、好不好安装、资料多不多。

操作系统设计者要做的事:搭建包管理体系(yum/apt)、维护软件源,打造完善生态,吸引用户。


yum install -y epel-release

逐段解释这条命令

  • yum install:yum 安装软件

  • -y:自动回答 yes,安装过程不再弹出确认提问

  • epel-release:EPEL 扩展源

    CentOS 官方自带的 yum 源里软件数量有限。EPEL 是额外的第三方软件仓库,装上它之后,yum 就能搜到很多官方源没有的软件。

vim 是多模式编辑器

不同模式下,键盘按键作用完全不一样,这是它和记事本最大区别。

三个模式

  1. 命令模式(默认模式)

    打开 vim 直接进入这个模式。

笔记原话:所有输入都会被当成命令,不会当成文字。

你按字母i不是输入字母 i,而是触发 “进入插入模式” 这个指令。

  1. 插入模式(写文字 / 写代码)
  • 切换:命令模式按i,进入插入模式,此时键盘打字才是输入文本。
  • 退出:按ESC回到命令模式。
  1. 底行模式(保存、退出、查找)
  • 切换:必须先在命令模式,输入shift + ;也就是冒号:,屏幕最下面出现冒号,就是底行模式。

  • 常用指令:

    • :wq保存并退出(w=write 写入保存,q=quit 退出)

❗重点坑:插入模式不能直接进底行模式!必须先按 ESC 回到命令模式,才能打:。图里红叉就是这个意思。

模式切换流程图记忆

plaintext

命令模式(默认) ├─按 i → 插入模式(打字),ESC返回命令模式 └─按 : → 底行模式(保存退出),执行完命令自动回命令模式

常考小考点

  • i:命令模式 → 插入模式
  • ESC:任何模式回到命令模式
  • :wq:底行模式,保存并退出
  • :q!:底行模式,不保存强制退出

vim【命令模式】快捷键

【必背,天天要用,优先记住】(这几个一定要熟练)

  1. 光标移动:gg跳到文件开头、G(shift+g)跳到末尾、hjkl方向
  2. 复制剪切粘贴:yy复制一行,dd删除一行,p粘贴
  3. 撤销:u撤销,ctrl+r反撤销
  4. 分窗口::vs分垂直窗口,ctrl ww切换窗口

理由:写代码、改文件几乎每次 vim 都要用到,敲多了自然记住,不用死背。

【熟悉就行,不用硬背,知道有这个功能,需要再查笔记】

  • nG跳指定行、shift+$行尾、shift+^行首
  • w/b单词跳转、3yy/5dd多行复制删除、x删字符
  • r替换字符、shift+~大小写切换

理由:偶尔用,考试会出选择题,认识看得懂就行,不用默写。

【了解概念,记住有这个东西即可,不用背按键】

  • shift+R替换模式、vim 用户独立配置、一键配置脚本那条 curl 命令

只需要知道:存在这个功能,知道是干嘛的,实操很少用。

专门给新手做的一键 vim 配置包,目标:把服务器上的 vim 一键改成适合 C++ 写代码的简易 IDE,自动装好代码高亮、自动缩进、代码补全插件。

bash

运行

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

Makefile

一、基础概念

  • make:Linux 命令(程序)

  • Makefile:当前目录下名字固定的文本文件,里面写编译规则、依赖关系。

    执行make,程序自动读取Makefile,按照里面规则编译代码。

二、make 的核心工作原理(最重要考点)

make不会无脑每次全部重编译。

判断逻辑:对比目标文件(可执行程序)和依赖的源码文件的最后修改时间

  1. 源码修改时间新于可执行文件 → 需要重新编译
  2. 源码没有改动,可执行文件更新(比源码文件新) → 提示is up to date,跳过编译,提升编译效率

文件 = 文件内容 + 文件属性(修改时间就存在文件属性里)

C 语言完整 4 步编译流程(图里四条 gcc)

bash

运行

gcc -E mycode.c -o mycode.i #预处理 .c → .i gcc -S mycode.i -o mycode.s #编译 .i → .s汇编 gcc -c mycode.s -o mycode.o #汇编 .s → .o目标文件 gcc -o mycode mycode.o #链接 .o → 最终可执行程序mycode

Makefile 可以描述这种链式依赖。
这种写法会把 4 步拆开,每一步都会生成对应的中间文件 (.i .s .o)

make 会顺着链条检查时间:

  • 如果只改了mycode.c:全部环节重新跑一遍
  • 如果只改了mycode.s:只重新汇编 + 链接,前面预处理、编译全部跳过
    链式依赖 Makefile(课件例子):手动拆分 4 个阶段,中间文件保存在磁盘;大项目优势巨大,只重新编译改动的那一环。

预处理:拿头文件(声明,说明书)

链接:拿库文件(函数真正的二进制实现本体)
真正 printf 的代码本体,在系统库文件里(shturl.)

这个库文件是编译好的二进制机器码,不是 C 源码,头文件里面不会包含它
链接阶段的工作:把你的.o 和系统库里面 printf 的二进制代码拼在一起,

三、清理工程(make clean)

编译后会产生.i .s .o中间文件 + 可执行文件。

写一个 clean 规则,一次性删掉这些产物,叫清理工程。

普通目标的问题:

如果当前目录真的存在一个名叫 clean 的文件,make clean会认为这个目标已经是最新,不会执行删除命令。

四、.PHONY 伪目标(必考)

.PHONY: clean

含义:声明 clean 是伪目标

  • 伪目标不是磁盘上真实存在的文件
  • 不管有没有同名文件,每次执行 make clean 都会强制运行里面的命令,不对比文件时间

一句话:伪目标用来保证指令一定执行,最常用场景就是 clean 清理。

这句话告诉 make:clean 不是磁盘上的文件,只是一个命令名字,不要去检查文件时间。

举例子

写了这个 Makefile:

makefile

clean: rm -f test

这里clean是目标。

场景:如果当前目录,真的有一个文件,名字就叫 clean。

执行make clean的时候:

make 一看:目标clean这个文件已经存在。

又因为 clean 目标没有写任何依赖文件,make 判定:这个目标已经是最新的,不需要执行命令。

👉rm 命令根本不会跑!不会删除 test。

五、Makefile 自动变量(图底部特殊符号)

  • $@:代表目标名(冒号左边)
  • $^:代表所有依赖文件(冒号右边全部文件)

示例:

makefile

mycode:mycode.c @gcc -o $@ $^

$@= mycode;$^= mycode.c

等价:gcc -o mycode mycode.c
命令最前面的@的作用:执行这条命令时,不在屏幕上打印这条命令本身

一、\r和\n区分(回车、换行)

  • \n换行:光标跳到下一行的开头(我们平时敲回车换行)
  • \r回车:光标回到当前这一行的最开头,不跳到下一行

进度条 / 倒计时就是靠\r,新内容直接覆盖本行旧文字,实现原地刷新。

二、缓冲区(本节课最核心考点)

示例代码

c

运行

printf("hello world"); sleep(2); return 0;

现象:程序先 sleep 休眠 2 秒,2 秒结束之后,才一次性打印 hello world

疑惑:明明 printf 写在 sleep 前面,为什么不是先打印,再休眠?

大白话解释

stdout(标准输出,就是屏幕)自带输出缓冲区(一块内存空间)

  1. printf("hello world");

    字符串不会直接送到屏幕,先放进缓冲区内存里存起来。

  2. sleep(2);程序休眠 2 秒,此时文字还躺在缓冲区,屏幕啥都不显示。

  3. 函数结束 return,程序退出,缓冲区自动刷新,把文字一次性输出到屏幕。

✅ 缓冲区本质:C 语言帮我们维护的一块临时内存,用来暂存要输出的数据。

什么时候缓冲区会自动刷新?

  1. 遇到\n换行符(最常见)
  2. 程序运行结束,自动刷新
  3. 缓冲区存满了,自动刷出去
  4. 手动强制刷新:fflush(stdout);

修改代码,强制立刻打印

c

运行

printf("hello world"); fflush(stdout); // 强制把缓冲区内容立刻刷到屏幕 sleep(2); return 0;

现在效果:立刻打印 hello world,然后等待 2 秒

三、三个标准流

  1. stdin:标准输入,对应键盘
  2. stdout:标准输出,对应显示器屏幕(带行缓冲,就是咱们上面讲的缓冲区)
  3. stderr:标准错误,报错信息,无缓冲,直接输出

✅stdin(标准输入,键盘)也有缓冲区,叫输入缓冲区

1. stdin 输入缓冲区是干嘛的

你在键盘敲字符,不会一个字直接交给程序,先暂时存到输入缓冲区这块内存。

等到你按下回车Enter,这一整行的内容,才一次性交给 C 程序读取

输入缓冲区经典坑(考试常考)

c

运行

int a; char ch; scanf("%d", &a); scanf("%c", &ch);

输入:10+ 回车

你输入 10,敲回车,回车\n会留在 stdin 缓冲区里面

第二个scanf("%c")直接读到这个换行符,不会等你再次输入。

这就是输入缓冲区残留带来的 bug。

四、和前面倒计时代码关联

c

运行

printf("%-2d\r", cnt); fflush(stdout);

\r只把光标移到行首,不会触发缓冲区刷新,必须手动fflush(stdout),才能立刻把数字打印到屏幕,实现动态倒计时。

倒计时程序

1、什么是版本控制(图里实验报告例子)

就像写实验报告:

你写了 v1 版本 → 修改保存成 v2 → 再改 v3。

版本控制工具,自动帮你保存每一次修改的版本记录。

可以随时:

  • 回看历史任意一版
  • 回退到旧版本
  • 多人一起修改同一个项目,合并大家的代码

新手程序员做法(不用 git):手动复制文件报告v1、报告v2、报告最终版、最终版真的不改了,容易乱、丢文件。

老手直接用 git 自动管理版本。

2、Git 和 SVN 的核心区别

  • SVN:集中式版本控制

    有一台单独的中心服务器(server),本地只是客户端 client。

    所有版本记录全部存在远端服务器,断网基本没法看历史版本。

  • Git:分布式版本控制(重点)

    client 和 server 是一体的。

    ✅每个人电脑上都有完整的仓库(全部历史版本),也就是本地仓库

    远端仓库只是一个备份 / 多人协作的中转站。断网也能提交、查看版本、回滚。

一句话:Git 本地自带完整仓库,SVN 本地没有完整版本库。

3、两个仓库概念

  1. 本地仓库:在你自己电脑 / 服务器上,.git文件夹,存放全部版本历史。
  2. 远端仓库:放在网络上的仓库(github/gitee),用来多人同步、备份代码。

Git 程序本身既可以当客户端,也可以当服务端。

王五可以把自己本地仓库,推送到远端仓库;李四再从远端拉代码到自己本地。

4、Github / Gitee

它们不是 git!

是基于 git 做的商业网站,提供远端仓库托管服务。

就像:git 是发动机,github 是装了发动机的汽车平台。

类比:

Linux 内核是底层系统,CentOS、Ubuntu 是基于内核做出来的发行版;

git 是底层版本工具,Github/Gitee 是基于 git 的代码托管网站。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询