Linux操作系统从入门到实战(六)Linux开发工具(上)详细介绍什么是软件包管理器,Linux下如何进行软件和软件包的安装、升级与卸载

Linux操作系统从入门到实战(六)Linux开发工具(上)详细介绍什么是软件包管理器,Linux下如何进行软件和软件包的安装、升级与卸载

  • 前言
  • [一、 软件包管理器](#一、 软件包管理器)
    • [1.1 传统安装方式的麻烦:从源代码说起](#1.1 传统安装方式的麻烦:从源代码说起)
    • [1.2 软件包:把"乐高"提前拼好的成品](#1.2 软件包:把“乐高”提前拼好的成品)
    • [1.3 包管理器:你的"软件应用商店"](#1.3 包管理器:你的“软件应用商店”)
    • [1.4 常见的"商店":不同Linux系统的选择](#1.4 常见的“商店”:不同Linux系统的选择)
  • 二、Linux下如何进行软件安装、升级、卸载
    • [1. 主流Linux发行版软件安装、升级、卸载](#1. 主流Linux发行版软件安装、升级、卸载)
      • [1.1 Ubuntu/Debian系:APT](#1.1 Ubuntu/Debian系:APT)
      • [1.2 CentOS/RHEL系:YUM与DNF](#1.2 CentOS/RHEL系:YUM与DNF)
      • [1.3 其他发行版:](#1.3 其他发行版:)
    • 2.软件包依赖:
      • [2.1 依赖管理的重要性](#2.1 依赖管理的重要性)
      • [2.2 常见依赖问题与解决方案](#2.2 常见依赖问题与解决方案)
    • [3. 国内镜像源:](#3. 国内镜像源:)

前言

  • 在前序博客中,我们系统讲解了 Linux 权限体系、基础操作指令,分步演示了 VMware 17 Pro 与 CentOS 9 Stream 的安装流程,并完成了 Vim 编辑器配置及 C++ 开发环境搭建。
  • 本节博客将聚焦软件包管理体系,深入解析 Linux 环境下软件包的安装、升级及卸载机制,帮助读者掌握主流包管理工具的核心操作逻辑

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

我的Linux知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12879535.html?spm=1001.2014.3001.5482


一、 软件包管理器

对于刚接触Linux的我们来说,理解软件包和包管理器可以从我们熟悉的手机或电脑使用经验入手

  • 比如大家在手机上装App,很少会自己编写代码,而是直接去应用商店搜索下载,Linux里的"软件包"就相当于手机里的App安装包,"包管理器"则像应用商店,帮我们快速找到并安装这些"App"。

1.1 传统安装方式的麻烦:从源代码说起

假设你想在Linux里装一个聊天软件,如果按照最原始的方法,需要先找到这个软件的"源代码"(就像一堆工程图纸),然后自己用编译工具把它"组装"成可以直接运行的程序。这个过程就像自己动手拼乐高:

  1. 先要安装一堆编译工具(比如gcc、make),相当于准备好螺丝刀、胶水等工具;
  2. 编译过程中可能会遇到各种"依赖问题",比如软件需要某个版本的插件,但你的电脑里没有,就得先手动找插件、安装,否则就拼不起来;
  3. 万一源代码有小错误,还得自己排查修改,对新手非常不友好
    这种方式就像"手动拼乐高",虽然能学会原理,但太费时间,尤其对普通用户来说,只想快速用上软件,不想当"工程师"。

1.2 软件包:把"乐高"提前拼好的成品

于是有人想了个办法:把常用软件提前编译好,打包成一个"安装包"(类似Windows的.exe安装程序),里面不仅包含可直接运行的程序,还提前打包了它需要的所有"依赖插件",就像工厂直接生产好的乐高成品套装。这个"安装包"就是软件包

  • 比如你想装微信Linux版,不需要自己编译,只要下载一个.deb.rpm格式的软件包(不同Linux版本格式不同),告诉包管理器"我要装这个",它就会帮你把软件放到合适的位置,连带着它需要的所有"零件"都装好,再也不用手动处理依赖问题。

1.3 包管理器:你的"软件应用商店"

有了软件包,还需要一个"商店"来管理它们------这就是包管理器。它的作用就像手机的应用商店:

  1. 集中管理软件库:包管理器连接着官方或第三方的"软件仓库",里面存着成千上万的软件包,你不需要自己去各个网站找安装包,直接在命令行输入软件名称(比如"微信"),包管理器就能从仓库里找到对应的安装包;
  2. 自动解决依赖:比如你装A软件需要B插件,装B插件需要C库,包管理器会一次性把A、B、C都装好,不用你操心"先装谁";
  3. 方便升级和卸载:就像应用商店可以一键更新所有App,包管理器也能一键升级系统里的所有软件,或者彻底卸载某个软件,不会留下残留文件。

1.4 常见的"商店":不同Linux系统的选择

不同的Linux"家族"(发行版)常用的"包管理器商店"不同:

  • yum(代表系统:CentOS、RedHat、Fedora) :比如你用的是CentOS系统,想装一个浏览器,打开终端输入sudo yum install firefox,yum就会从官方仓库下载Firefox的软件包并安装,全程自动。
  • apt(代表系统:Ubuntu、Debian) :如果你用Ubuntu,命令类似sudo apt install firefox,apt的优势是仓库更新快,对新手更友好,很多Linux服务器也常用它。

二、Linux下如何进行软件安装、升级、卸载

Linux生态的优越性,很大程度体现在软件包管理的成熟度上。一个优秀的操作系统,需具备:

  1. 标准化的包格式(如Debian的.deb、RedHat的.rpm),确保软件分发的规范性;
  2. 自动化依赖解析,避免手动处理复杂依赖关系;
  3. 完善的软件仓库,提供海量预编译软件包,降低用户编译成本;
  4. 便捷的版本控制,支持快速升级、降级或卸载,保障系统稳定性。

这些要素共同构成了操作系统的"软件生态基础设施",而国内镜像源的建设,则进一步优化了这一基础设施的访问效率。

1. 主流Linux发行版软件安装、升级、卸载

1.1 Ubuntu/Debian系:APT

核心工具apt-get/apt(命令行)、software-center(图形界面)
安装流程

  1. 更新软件源列表sudo apt update,获取最新软件包索引;
  2. 安装软件sudo apt install <软件名>,自动解析并安装依赖;
  3. 卸载软件sudo apt remove <软件名>(保留配置文件)或sudo apt purge <软件名>(彻底删除);
  4. 升级系统sudo apt upgrade(单个软件)或sudo apt dist-upgrade(系统级升级)。

特色 :支持"渐进式升级",通过/etc/apt/sources.list配置国内镜像源(如清华源、阿里源),显著提升下载速度。

1.2 CentOS/RHEL系:YUM与DNF

核心工具yum(CentOS 7及以下)、dnf(CentOS 8+)
安装流程

  1. 启用软件仓库 :通过rpm -ivh安装repo文件,或直接编辑/etc/yum.repos.d/下的配置文件;
  2. 安装软件sudo yum install <软件名>,依赖问题由YUM自动处理;
  3. 卸载软件sudo yum remove <软件名>
  4. 升级系统sudo yum update(全系统升级)或指定软件升级。

进化:CentOS 8引入的DNF(Dandified YUM)优化了依赖解析算法,支持并行下载,效率更高。

1.3 其他发行版:

  • Arch系(Arch/Manjaro) :使用pacman,强调"滚动更新",通过pacman -S <软件名>安装,支持AUR(用户仓库)扩展生态;
  • Gentoo :基于Portage,通过emerge编译安装,用户可自定义软件配置(如CPU优化、功能裁剪);
  • SUSE :使用zypper,结合官方OBS仓库,适合企业级环境的稳定部署。

2.软件包依赖:

2.1 依赖管理的重要性

软件包通常依赖其他库或工具(如libc、GCC运行时),若依赖缺失或版本冲突,会导致安装失败或运行异常。包管理工具的核心价值,在于通过"依赖图"自动解析并安装所需组件。

2.2 常见依赖问题与解决方案

  1. 依赖缺失
    • 方案:通过包管理工具自动解决(如apt -f install修复破损依赖);
    • 特例:第三方软件可能需手动安装依赖(参考官方文档或使用容器化方案)。
  2. 版本冲突
    • 方案:使用apt policy <软件名>查看版本优先级,通过apt install <软件名>=<版本号>指定安装版本;
    • 进阶:利用Docker/Kubernetes等容器技术,实现"依赖隔离"。
  3. 跨发行版依赖
    • 挑战:Debian与RedHat系包格式不兼容;
    • 解决方案:使用通用二进制(如Go语言编译的可执行文件)、容器镜像,或通过alien工具转换包格式(非推荐)。

3. 国内镜像源:

3.1 为什么选择国内镜像源?

  • 速度优势:直接从国内服务器下载,避免国际链路延迟;
  • 稳定性:国内镜像站同步频率高(多数每日更新),减少"源不可用"问题;
  • 本地化支持:部分镜像站提供中文文档(如清华源的详细配置指南)。

3.2 主流国内镜像站推荐

  1. 阿里云镜像站(https://developer.aliyun.com/mirror/)

    • 特色:覆盖几乎所有主流Linux发行版(Ubuntu/CentOS/Arch等),支持Docker镜像、编程语言包(如PyPI/NPM),企业级稳定性。
  2. 清华大学开源软件镜像站(https://mirrors.tuna.tsinghua.edu.cn/)

    • 特色:教育网用户友好,提供IPv4/IPv6双栈支持,镜像列表清晰,附带详细的配置教程(如如何替换系统默认源)。
  3. 中国科学技术大学镜像站(http://mirrors.ustc.edu.cn/)

    • 特色:同步速度极快,支持反向代理(如npm、Maven中央仓库),适合开发者使用,提供多线路解析(教育网/电信/联通)。
  4. 北京交通大学镜像站(https://mirror.bjtu.edu.cn/)

    • 特色:专注于常用发行版和开发工具,状态监控清晰(显示每个镜像的同步状态),适合高校及科研机构。
  5. 网易镜像站(http://mirrors.163.com/)

    • 特色:历史悠久,支持传统Linux发行版(如Debian老版本),提供便捷的搜索功能,快速定位所需软件包。

3.3 镜像源配置步骤(以Ubuntu、CentOS为例)

3.3.1 Ubuntu/Debian系(以清华源为例)

核心文件/etc/apt/sources.list(全局软件源配置)
适用系统:Ubuntu 16.04+、Debian 9+等

步骤1:备份原配置
bash 复制代码
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak  

作用:防止配置错误导致系统无法更新,便于恢复默认源。

步骤2:替换为国内源(清华源)

使用文本编辑器(如nano、vim)打开配置文件:

bash 复制代码
sudo nano /etc/apt/sources.list  

清空原有内容,替换为以下镜像地址(根据Ubuntu版本选择对应分支,如jammy为22.04,ubuity为23.10):

复制代码
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse  
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse  
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse  
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse  
# 如需使用测试版软件,取消注释以下行  
# deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse  

注意 :镜像地址需与系统版本匹配,可通过lsb_release -a查看Ubuntu版本代号。

步骤3:更新软件源索引
bash 复制代码
sudo apt update  

验证 :若输出中无404 Not FoundFailed to fetch错误,说明配置成功。

3.3.2 CentOS/RHEL系(以阿里云源为例)

核心文件/etc/yum.repos.d/目录下的.repo文件(每个仓库独立配置)
适用系统:CentOS 7/8、Rocky Linux、AlmaLinux等

步骤1:备份原配置(可选)
bash 复制代码
sudo mkdir -p /etc/yum.repos.d/bak && sudo cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/  

作用:备份官方仓库配置,避免误操作导致依赖问题。

步骤2:替换为国内源(阿里云源)
  1. 下载镜像站提供的repo文件(以CentOS 7为例):

    bash 复制代码
    sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  

    或手动编辑文件:

    bash 复制代码
    sudo nano /etc/yum.repos.d/CentOS-Base.repo  

    将所有baseurl字段替换为阿里云镜像地址:

    复制代码
    [base]  
    name=CentOS-$releasever - Base  
    baseurl=http://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/  
    gpgcheck=1  
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7  
    
    [updates]  
    name=CentOS-$releasever - Updates  
    baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/os/  
    # 其他仓库(如extras、centosplus)同理替换  

    关键参数$releasever自动匹配系统版本,$basearch为架构(x86_64/arm64等)。

  2. 启用EPEL仓库(可选,用于获取额外软件包)

    bash 复制代码
    sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  
步骤3:更新软件源缓存
bash 复制代码
sudo yum makecache  # CentOS 7及以下  
# 或  
sudo dnf makecache  # CentOS 8及以上(DNF工具)  

验证 :输出中显示Metadata Cache Created,表示缓存生成成功。

通过以上步骤,可显著提升Ubuntu/CentOS系统的软件下载速度和稳定性,尤其适合国内用户环境。配置时建议选择与自身网络匹配的镜像站(如教育网选清华/中科⼤,企业网选阿里云/网易),并定期执行更新命令以获取最新软件包。


以上就是这篇博客的全部内容,下一篇我们将继续探索Linux的更多精彩内容。

我的个人主页

欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

我的Linux知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12879535.html?spm=1001.2014.3001.5482

|--------------------|
| 非常感谢您的阅读,喜欢的话记得三连哦 |

相关推荐
爱学习的章鱼哥19 分钟前
计算机网络|| 常用网络命令的作用及工作原理
linux·服务器·计算机网络
zm26 分钟前
网络编程epoll和udp
服务器·网络·数据库
野犬寒鸦29 分钟前
Linux常用命令详解(下):打包压缩、文本编辑与查找命令
linux·运维·服务器·数据库·后端·github
是垚不是土1 小时前
探秘高可用负载均衡集群:企业网络架构的稳固基石
运维·服务器·网络·云原生·容器·架构·负载均衡
skywalk81631 小时前
在一个FreeBSD的控制台,当移动鼠标时,就会有字符发生,这是怎么回事:35;62;18m35;60;
服务器·计算机外设·freebsd
胖大和尚2 小时前
Termius ssh连接服务器 vim打开的文件无法复制问题
服务器·ssh·vim
进取星辰2 小时前
24、TypeScript:预言家之书——React 19 类型系统
linux·运维·ubuntu
月上柳青2 小时前
linux-驱动开发之设备树详解(RK平台为例)
linux·驱动开发·dsp开发
阳区欠2 小时前
【Linux】线程的同步与互斥
linux·服务器·c++·线程同步·线程互斥·生产者/消费者模型
WG_172 小时前
Linux:43线程封装与互斥lesson31
linux·运维·服务器