ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Linux(3) 软件包管理:yum、apt、软件源与依赖关系

Linux(3) 软件包管理:yum、apt、软件源与依赖关系 在 Linux 中安装软件看起来只是一条命令背后其实包含软件下载、版本选择、依赖解析、文件部署和后续升级等一整套流程。如果不了解软件包管理器的工作方式遇到“找不到软件包”“依赖无法满足”或“软件源下载失败”时很容易只会反复执行同一条命令。本文从软件安装方式讲起重点介绍yum、apt、软件源以及依赖关系。一、Linux 安装软件的三种方式Linux 中常见的软件安装方式主要有三种。1. 源代码编译安装开源软件通常会提供源代码。用户下载源码后在本机完成配置、编译和安装。典型流程如下tar-xfproject.tar.gzcdproject ./configuremakesudomakeinstall不同项目使用的构建工具可能不同例如 CMake、Meson 或语言自己的包管理工具因此不能把上面的流程机械地套用到所有软件。源码安装的优点是可定制性强可以选择编译选项和优化参数缺点是步骤较多依赖需要自行准备卸载和升级也不如系统包管理器方便。2. 使用独立软件包安装Linux 发行版会把编译好的程序、库文件、配置文件以及版本信息打包成标准软件包。常见格式包括Red Hat、CentOS、Fedora 等系统常用.rpmDebian、Ubuntu 等系统常用.deb。安装本地 RPM 包sudorpm-ivhpackage.rpm安装本地 DEB 包sudodpkg-ipackage.deb直接安装本地软件包时如果缺少依赖底层工具通常会报告错误需要用户继续处理。3. 使用软件包管理器软件包管理器会连接软件源自动查询软件包、下载文件并处理依赖。常见工具包括yum传统 CentOS/RHEL 系系统常用dnf较新的 Fedora/RHEL 系系统常用许多用法与 yum 相似aptDebian/Ubuntu 系系统常用。对于日常软件安装优先使用发行版自带的包管理器通常最省心。二、软件源到底是什么软件源也叫软件仓库或 Repository可以把它理解成由发行版或镜像站维护的“软件仓库服务器”。仓库中不仅保存软件包还保存用于检索的元数据例如软件包名称和版本适用的系统与 CPU 架构软件包包含哪些文件软件包依赖哪些其他软件包软件包的校验信息和签名。执行安装命令时包管理器大致会经历以下过程读取软件源配置 ↓ 刷新或读取仓库元数据 ↓ 查找目标软件包 ↓ 计算依赖关系 ↓ 下载目标包与依赖包 ↓ 校验并安装 ↓ 更新本地软件包数据库国内用户经常使用镜像站提高下载速度。镜像站是官方仓库内容的同步副本但更换镜像时必须确认它与当前发行版及版本匹配。常见的软件源配置位置如下CentOS/RHEL 系/etc/yum.repos.d/ Debian/Ubuntu 系/etc/apt/sources.list Debian/Ubuntu 扩展/etc/apt/sources.list.d/不要把不同发行版、不同大版本的软件源随意混用否则很容易产生依赖冲突。三、为什么会出现依赖关系软件通常不会把所有功能都重复实现而是复用系统中已有的库。例如一个程序可能依赖应用程序 ├─ 依赖 libA │ └─ 依赖 libC └─ 依赖 libB └─ 依赖 libC如果手动安装应用程序就必须确认libA、libB和libC是否存在而且版本是否满足要求。包管理器的核心价值之一就是根据仓库中的元数据构建依赖关系计算出需要一起安装、升级或删除的软件包。因此rpm、dpkg与yum、apt的定位并不完全相同rpm、dpkg更接近底层软件包操作工具yum、dnf、apt负责连接仓库并解析依赖最终仍会调用底层机制完成安装。四、yum 常用命令下面以传统 CentOS/RHEL 系环境为例。1. 搜索软件yum search nginx查看某个软件包的详细信息yum info nginx2. 安装软件sudoyuminstallnginx自动回答安装过程中的确认提示sudoyuminstall-ynginx-y虽然方便但在服务器上执行前仍应查看包管理器准备安装或删除的内容。3. 查看已安装软件yum list installed只查看指定软件包yum list installed nginx4. 升级软件sudoyum update只升级指定软件包sudoyum update nginx5. 卸载软件sudoyum remove nginx卸载前要认真阅读将被删除的软件包列表避免连带删除仍然需要的组件。6. 清理和重建缓存sudoyum clean allsudoyum makecache当仓库元数据过期或缓存异常时这两条命令经常用于重新生成缓存。在使用 DNF 的系统中很多命令只需将yum换成dnfsudodnfinstallnginxsudodnf remove nginxsudodnf upgrade五、apt 常用命令下面以 Debian/Ubuntu 系环境为例。1. 刷新软件包索引sudoaptupdateapt update只更新本地的软件包索引并不会直接升级已经安装的软件。2. 搜索和查看软件包aptsearch nginxaptshow nginx3. 安装软件sudoaptinstallnginx安装本地 DEB 文件时使用 apt 可以帮助处理仓库中可获得的依赖sudoaptinstall./package.deb4. 查看已安装软件aptlist--installed配合搜索过滤结果aptlist--installed2/dev/null|grepnginx5. 升级软件sudoaptupdatesudoaptupgrade通常先更新索引再执行升级。6. 卸载软件保留配置文件sudoaptremove nginx同时删除由软件包管理的配置文件sudoaptpurge nginx清理不再需要的自动安装依赖sudoaptautoremove执行autoremove前同样要检查待删除列表。六、rpm 与 dpkg 的常见操作1. rpmrpm-qa# 查看所有已安装的 RPM 包rpm-qnginx# 查询 nginx 是否安装rpm-qlnginx# 查看软件包安装了哪些文件rpm-qf/usr/bin/vim# 查询某个文件属于哪个软件包sudorpm-enginx# 删除软件包2. dpkgdpkg-l# 查看已安装的软件包dpkg-lnginx# 查询指定软件包dpkg-Lnginx# 查看软件包安装的文件dpkg-S/usr/bin/vim# 查询文件属于哪个软件包sudodpkg-rnginx# 删除软件包但保留配置在可以连接软件源的情况下优先使用 yum、dnf 或 apt通常能减少手动解决依赖的工作。七、常见问题排查1. 提示找不到软件包可能原因软件包名称写错本地索引没有更新对应仓库没有启用软件包不支持当前发行版或 CPU 架构。可以先执行搜索命令再检查软件源配置。2. 下载速度慢或连接失败先确认网络和 DNS 是否正常再检查软件源地址是否仍然有效。必要时可以切换为可靠的镜像站。3. 依赖冲突依赖冲突常见于混用了不同系统版本的软件源或者手动安装了来源不一致的软件包。不要看到冲突就立即使用强制参数。应先确认冲突包来自哪里、当前系统版本是什么以及是否存在官方推荐的升级路径。4. 包管理器被锁定另一个安装或更新进程正在运行时apt 等工具可能提示锁被占用。应先等待正在执行的任务结束并确认没有包管理进程运行而不是直接删除锁文件。5. 权限不足安装、升级或卸载系统软件通常需要管理员权限sudoaptinstall软件名sudoyuminstall软件名查询和搜索软件包通常不需要 sudo。八、软件安装的安全建议优先使用发行版官方仓库或可信镜像安装前确认软件包名称、来源和待处理的依赖不要随意混用不同发行版或不同大版本的软件源谨慎执行网络上来源不明的curl ... | sh命令生产环境升级前先备份配置并评估兼容性遇到问题先阅读完整错误信息不要盲目使用强制参数。九、yum 与 apt 命令对照目的yum/dnfapt刷新缓存或索引yum makecache/dnf makecacheapt update搜索软件yum search 关键词apt search 关键词查看信息yum info 软件名apt show 软件名安装软件yum install 软件名apt install 软件名升级软件yum updateapt upgrade删除软件yum remove 软件名apt remove 软件名查看已安装yum list installedapt list --installed总结软件包管理器并不只是“下载工具”它连接了本地系统与软件仓库负责软件查询、下载、校验、依赖解析、安装、升级和卸载。可以记住下面这组关系RPM 系yum/dnf → 仓库与依赖管理 → rpm 完成底层包操作 DEB 系apt → 仓库与依赖管理 → dpkg 完成底层包操作掌握软件源和依赖关系后遇到安装失败时就能从软件包名称、仓库配置、系统版本、网络状态和依赖冲突几个方向逐步排查而不是只会重复执行安装命令。
返回列表