第6课:Linux开发工具(一):yum与apt

一、课前回顾与课程引入

  • 上节课核心内容
    • Linux基础指令(累计约30个)
    • 权限管理:超级用户root、普通用户、所属组、other的角色划分
    • 权限的本质:约束不同用户对文件/目录的操作
    • 权限修改、用户/组更改的方法
  • 掌握权限的意义:后续遇到"Permission denied"等权限问题时可以自行解决
  • 本节课整体目标:掌握Linux下的基础开发工具,能够快速编写代码、安装软件
  • 基础开发工具完整清单
    1. 包管理器:yum(CentOS系列)、apt(Ubuntu系列)
    2. 编辑器:Vim(前20-25节课使用)
    3. 编译器:GCC(C语言)、G++(C++语言)
    4. 自动化构建工具:make、makefile
    5. 版本控制器:Git
    6. 调试器:GDB
  • 工具切换说明:后50节课将切换到VSCode
    • 原因1:VSCode连接远程Linux服务器配置较复杂
    • 原因2:Vim是Linux下经典的命令行编辑器,必须掌握以应对面试和极端环境(如只能通过纯命令行修改服务器配置文件)
    • 最低要求:至少掌握Vim的打开、关闭和常见模式切换

二、Linux下安装软件的三种常见方式

核心结论:包管理器安装是Linux下安装软件的最佳实践

1. 源代码安装
  • 原理:直接获取软件的源代码,在本地通过编译器生成可执行文件,然后手动拷贝到系统指定目录(如/usr/bin),必要时修改环境变量
  • 优点:可以根据自己的需求定制软件功能和编译选项
  • 缺点
    • 过程极其复杂,需要手动解决所有编译错误
    • 必须手动处理所有依赖关系,一个依赖缺失就会导致安装失败
    • 耗时耗力,对新手极不友好
  • 适用场景:工作中极少数特殊情况(如某些商业软件只提供源代码、需要修改软件源码)
2. rpm包安装
  • 原理:将编译好的可执行文件、配置文件、库文件等打包成rpm格式的安装包,使用rpm命令进行安装
  • 基础命令rpm -ivh 包名.rpm
    • -i:install,安装
    • -v:verbose,显示详细安装信息
    • -h:hash,显示安装进度条
  • 缺点
    • 需要手动查找并下载对应系统版本的rpm包
    • 无法自动解决依赖关系,缺少依赖时软件无法运行
  • 适用场景:早期Linux系统,现在已基本被包管理器取代
3. 包管理器安装(最佳实践)
  • 原理:包管理器自动从指定的软件包服务器下载软件包,并自动分析和解决所有依赖关系,一键完成安装
  • 核心优势
    • 自动解决复杂的依赖问题
    • 支持软件的一键搜索、安装、卸载、更新
    • 无需手动查找软件包和处理版本问题
  • 适用场景:绝大多数日常开发和运维场景

三、包管理器的本质与分类

1. 包管理器的本质

核心类比:Linux下的包管理器(yum/apt)就相当于手机上的应用商店(华为应用商店、苹果App Store)

  • 软件包 ≈ 手机上的APP
  • 包管理器 ≈ 应用商店,负责软件的全生命周期管理(搜索、下载、安装、卸载、更新)
2. 主流包管理器分类
包管理器 适用操作系统 全称
yum CentOS 7/8、RedHat、Fedora Yellow dog Updater, Modified
apt Ubuntu、Debian Advanced Package Tool

重要提醒:CentOS已于2024年6月正式停更,官方不再提供安全更新和软件维护。但很多企业由于历史原因仍在使用,因此两种包管理器都需要掌握。两者内核层面差异很小,学会一种后另一种很容易上手。

四、操作系统生态的底层逻辑

老师强调:学习包管理器不能只学命令,必须理解其背后的生态逻辑,否则只是鹦鹉学舌。

1. 评估操作系统好坏的核心标准
  • 不是技术本身的先进性,而是是否被更多的人使用
  • 操作系统被设计出来的最终目的:让更多人使用,否则前期投入的所有人力、物力成本都会付诸东流
2. 操作系统生态的形成过程
  1. 操作系统内核诞生(如1991年Linux内核诞生)
  2. 由于开源特性,在不同场景被使用,形成不同的用户圈子:
    • Ubuntu:适合桌面用户和开发者
    • CentOS:适合企业服务器部署
    • Kali:适合网络安全和渗透测试
  3. 为了吸引更多人使用,社区会完善配套设施:
    • 建立官方社区和论坛
    • 编写详细的官方文档和教程
    • 开发适配该操作系统的各类软件
  4. 生态越完善,用户越多;用户越多,生态越完善,形成正向循环
3. 经典案例分析
  • 小张的故事:推荐操作系统不能只说"我熟悉Windows",而要从生态角度说明:
    1. CentOS社区由大量企业工程师维护,暴露了很多大企业踩过的坑,遇到问题容易解决
    2. 有丰富的企业级开源软件,可以直接使用,大幅减少开发成本
    3. 有完善的文档和全球论坛支持
  • 华为鸿蒙的成功逻辑
    • 先通过手机硬件获得了上亿用户基础
    • 初期基于Linux内核快速开发出鸿蒙系统,大幅降低试错成本
    • 有了用户基础后,逐步完善应用生态,最终实现自主可控

补充说明:开源本质上是一种商业模式。通过免费提供软件吸引用户,形成庞大的生态后,再通过技术服务、硬件销售、云服务等方式实现盈利。

五、包管理器的工作原理

1. 整体架构
你的云服务器                远端软件包服务器
+-----------------+        +-----------------+
| 包管理器(yum/apt)| <----> |  编译好的软件包  |
| - 自动解决依赖   |         |  (按分类存放)  |
| - 下载/安装/卸载 |         +-----------------+
+-----------------+
  • 软件包服务器:由社区或企业维护,存放所有编译好的软件包
  • 包管理器:运行在用户本地,根据用户需求与远端服务器交互
2. 为什么有人免费提供软件和服务器?
  • 开发者的核心动力:让自己的软件被更多人使用
    1. 操作系统核心开发者:为了让自己的操作系统被更多人使用,会主动开发配套的基础软件
    2. 普通开发者:自己需要某个功能,开发后开源分享,希望获得社区认可和反馈
    3. 企业:使用开源软件节省了大量开发成本,会通过捐助服务器、资金、贡献代码等方式回馈社区
  • 服务器成本来源:由全球的企业、组织和个人共同承担
    • 阿里云、腾讯云、华为云等云厂商提供免费的镜像服务器
    • 清华大学、中国科学技术大学等高校提供开源镜像站
    • 历史案例:锤子科技曾给SSL/TLS加密协议捐款数百万元
3. 包管理器如何找到软件包服务器?
  • 包管理器内置了配置文件,里面记录了所有可用的软件包服务器的URL地址
  • 当用户执行安装命令时,包管理器会读取配置文件,从对应的服务器下载软件

六、国内镜像源

1. 为什么需要国内镜像源?
  • 原版配置文件默认指向国外服务器,存在两个严重问题:
    1. 访问速度极慢,下载一个小软件可能需要几十分钟
    2. 部分服务器可能因网络限制无法访问
2. 什么是镜像源?

核心概念:镜像就是批量拷贝。国内的组织和企业会定期把国外软件包服务器上的所有软件完整拷贝到国内的服务器上,供国内用户高速访问。

3. 常见的国内镜像源
  • 高校:清华大学开源软件镜像站、中国科学技术大学开源软件镜像站
  • 企业:阿里云镜像站、腾讯云镜像站、网易163镜像站
4. 镜像源的配置情况
  • 云服务器(阿里云、腾讯云、华为云等):厂商已经帮我们配置好了国内镜像源,无需手动修改
  • 本地虚拟机:默认使用国外镜像源,需要手动更换为国内镜像源才能获得良好的下载速度

重要提醒:CentOS停更后,官方源已经完全失效,必须更换为国内的镜像源才能正常安装软件。

七、软件依赖关系

1. 什么是软件依赖?
  • 软件依赖:一个软件的运行需要依赖其他软件或库文件才能正常工作
  • 真实例子:
    • ls命令(列出目录内容)依赖C语言标准库libc.so.6
    • 你自己写的最简单的hello world程序也依赖libc.so.6
    • 一个网络爬虫程序可能依赖libcurl.so(网络请求库)、libssl.so(加密库)等
2. 依赖链
  • 一个软件依赖的库可能又依赖其他库,形成一条长长的依赖链
  • 手动解决依赖链极其复杂,一个库安装失败或版本不兼容,整个软件就无法运行
3. 包管理器的核心优势:自动解决依赖
  • 包管理器会自动扫描软件的依赖关系
  • 自动下载并安装所有需要的依赖库,且保证版本兼容
  • 整个过程无需用户手动干预
4. Windows与Linux依赖处理的区别
  • Windows:把所有依赖库和软件本身打包在一起,安装包大,但用户不用关心依赖问题
  • Linux:依赖库单独存放在系统目录中,多个软件可以共享同一个依赖库,节省磁盘空间,但需要包管理器统一管理依赖

八、yum与apt常用命令

重要提醒:所有安装、卸载、更新软件的命令都需要超级用户权限,必须加上sudo前缀。因为软件需要安装到系统目录(如/usr/bin/usr/lib),普通用户没有写入权限。

1. CentOS(yum)常用命令
  • 搜索软件:列出所有包含指定关键词的软件包
sudo yum list | grep 软件名

例子:搜索小火车软件sl

sudo yum list | grep sl
  • 安装软件:自动下载并安装软件及其所有依赖
sudo yum install -y 软件名
  • -y参数:自动确认安装,无需手动输入yes
    例子:安装小火车软件
sudo yum install -y sl
  • 卸载软件:卸载指定软件
sudo yum remove -y 软件名

例子:卸载小火车软件

sudo yum remove -y sl
2. Ubuntu(apt)常用命令
  • 搜索软件
# 方法1:列出所有包含关键词的软件包
sudo apt list | grep 软件名

# 方法2:更详细的搜索结果
sudo apt search 软件名

例子:搜索小火车软件

sudo apt search sl
  • 安装软件
sudo apt install -y 软件名

例子:安装小火车软件

sudo apt install -y sl
  • 卸载软件
sudo apt remove -y 软件名

例子:卸载小火车软件

sudo apt remove -y sl

补充说明:apt是新版的包管理器,替代了旧版的apt-get。两者功能基本一致,apt命令更简洁,推荐使用apt

3. 如何知道要装什么软件?
  • 需求驱动:学习到某个阶段需要什么功能,就安装对应的软件
  • 求助大模型:可以让AI帮你生成对应的安装命令
  • 常用开发软件:gccg++makegitgdblrzsz(文件传输)

九、软件源的配置与更换

1. 软件源配置文件位置
操作系统 配置文件路径
CentOS /etc/yum.repos.d/ 目录下的所有.repo文件
Ubuntu /etc/apt/sources.list 文件
  • CentOS的base源配置文件:/etc/yum.repos.d/CentOS-Base.repo
  • CentOS的扩展源配置文件:/etc/yum.repos.d/epel.repo(安装epel-release后自动生成)
2. base源与扩展源
  • base源(稳定源):包含官方维护的、经过长期验证的稳定软件
  • 扩展源(EPEL源):包含更多最新的、但未纳入base源的软件
    • CentOS需要单独安装EPEL源:sudo yum install -y epel-release
    • Ubuntu的扩展源和base源在同一个配置文件中
3. CentOS更换yum源的完整步骤

核心步骤:备份原配置 → 下载新配置 → 清理旧缓存 → 生成新缓存

  1. 备份原配置文件(防止出错后无法恢复)
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
  1. 下载新的国内镜像源配置文件(以阿里云CentOS 7源为例)
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  • wget:从网络下载文件的命令
  • -O:指定下载后的文件名和保存路径
  1. 清理旧的缓存数据
sudo yum clean all
  1. 生成新的缓存
sudo yum makecache
  1. (可选)安装EPEL扩展源
sudo yum install -y epel-release

易错警告:更换软件源有一定风险,操作不当可能导致系统软件包管理功能异常。云服务器已经由厂商配置好国内源,无需手动更换。只有当本地虚拟机安装软件失败时,才需要尝试更换源。

十、重要注意事项

  1. 必须联网:包管理器需要从网络下载软件包,因此主机必须联网

    • 验证网络连通性:ping www.baidu.com(按Ctrl+C停止ping)
    • 如果显示"Destination Host Unreachable",说明网络未连接
  2. 一次只能运行一个包管理器进程

    • 系统不允许同时安装多个软件
    • 如果前一个安装进程未正常结束,后一个会报错"另一个程序正在使用包管理器"
  3. CentOS停更问题

    • 2024年6月后,CentOS官方源已完全失效
    • 部分老旧软件可能无法安装,建议新服务器使用Ubuntu、Rocky Linux或AlmaLinux
  4. 软件安装后的权限

    • 所有通过包管理器安装的软件,默认所有者都是root
    • 普通用户可以通过other的执行权限运行这些软件
    • 如果手动去掉other的执行权限,普通用户将无法运行该软件
  5. 离线安装:极少数情况下需要离线安装软件(如服务器无法联网),但这种场景非常少见,本课程不做要求

十一、课程总结

本节课重点解决了"3+1"个核心问题:

  1. 目录权限的深刻理解(进入目录必须要有执行权限x)
  2. umask权限掩码的概念(文件和目录默认权限的计算方式)
  3. 粘滞位的作用(公共目录下只能删除自己创建的文件)
  4. yum/apt的生态与工作原理(本节课核心)

老师最后强调:只有真正理解了包管理器背后的生态逻辑,再去学习它的操作命令,才是真正学会了,而不是死记硬背几个命令。

需要我把本节课的常用命令整理成一张可直接复制的速查表,方便你后续查阅吗?

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐