首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

十,软件包管理

  • 25-04-18 05:01
  • 4789
  • 5772
juejin.cn

一,rpm

1.1 介绍

RPM(RPM Package Manager,原名 Red Hat Package Manager)是一种用于 Linux 操作系统的软件包管理系统,广泛用于 Red Hat、Fedora、CentOS、openSUSE 等发行版。它提供了一种标准化的方式来打包、安装、升级、查询和卸载软件。

注意:RPM包管理器主要是用来安装提前下载的 RPM 包的。

1.2 查询指令

  • 查询所安装的所有rpm软件包

    bash
    代码解读
    复制代码
    rpm -aq

    举例:当前系统是否安装了firefox

    bash
    代码解读
    复制代码
    rpm -aq | grep firefox

    返回的一个rpm包名:firefox-60.2.2-1.el7.centos.x86_64

    • 名称:firefox

    • 版本号:60.2.2-1

    • 使用操作系统:el7.centos.x86_64

      表示centos7.x的64位操作系统,如果是i686、i386表示32位操作系统,noarch表示通用

  • 其他相关查询指令

    bash
    代码解读
    复制代码
    rpm -qa 想查询的软件名
  • 查询软件包的具体信息

    bash
    代码解读
    复制代码
    rpm -qi 软件包名
  • 查询软件包包含了哪些文件

    bash
    代码解读
    复制代码
    rpm -ql 软件包名
  • 查询文件所属的软件包

    bash
    代码解读
    复制代码
    rpm -qf 文件绝对路径

1.3 卸载rpm包

bash
代码解读
复制代码
rpm -e 软件包名

firefox-60.2.2-1.el7.centos.x86_64这个是rpm包名的完整部分,但是卸载只需要写名称firefox即可

如果其他软件包和你要删除的软件包有依赖关系,卸载时会产生出错信息。

卸载的时候会出现警告,忽略即可,实际上已经删除。

强行卸载rpm包

bash
代码解读
复制代码
rpm -e --nodeps 软件包名

1.3 安装rpm包

bash
代码解读
复制代码
rpm -ivh rpm包的绝对路径(安装包的绝对路径)

参数说明:

  • i:install 安装

  • v:verbose提示

  • h:hash进度条。

    在centos的光盘中packages文件下含大量的rpm包

二,yum

2.1 介绍

YUM(Yellowdog Updater Modified)是一个基于 RPM 的高级包管理工具,主要用于 Red Hat 系列的 Linux 发行版(如 RHEL、CentOS、Fedora 早期版本)。它的核心目标是解决 RPM 包管理中的依赖问题,同时提供便捷的软件仓库管理功能。

2.2 YUM 的基本用法

2.2.1 安装/升级/卸载

bash
代码解读
复制代码
# 安装软件包(从仓库) yum install package_name # 安装本地 RPM 包(自动解决依赖) yum localinstall path/to/package.rpm # 升级单个软件包 yum update package_name # 升级所有软件包 yum update # 卸载软件包 yum remove package_name

2.2.2 查询与搜索

bash
代码解读
复制代码
# 列出所有已安装的包 yum list installed # 搜索关键字(如查找包含 "nginx" 的包) yum search nginx # 查看包详细信息 yum info package_name # 列出仓库中所有可用包 yum list available

2.2.3 仓库管理

bash
代码解读
复制代码
# 列出已启用的仓库 yum repolist # 启用/禁用仓库 yum-config-manager --enable repository_name yum-config-manager --disable repository_name # 添加新仓库(例如 EPEL) yum install epel-release

2.2.4 清理与维护

bash
代码解读
复制代码
# 清理缓存(过期元数据和软件包) yum clean all # 重建元数据缓存 yum makecache

2.3 YUM 的配置文件

  • 主配置文件:/etc/yum.conf 定义全局设置,如缓存目录、日志文件等。
  • 仓库配置文件:/etc/yum.repos.d/*.repo 每个仓库对应一个 .repo 文件,定义仓库名称、URL、是否启用等。

示例仓库配置(/etc/yum.repos.d/epel.repo):

ini
代码解读
复制代码
[epel] name=Extra Packages for Enterprise Linux baseurl=https://download.example.com/epel/$releasever/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL

2.4 YUM与RPM的关系

YUM 并不是为了替代 RPM,而是为了增强 RPM 的功能。它们的关系更像是“互补”而非“替代”。

  • RPM
    • 底层工具:直接操作 .rpm 文件,负责包的基本操作(安装、查询、卸载)。
    • 不解决依赖:安装时需要手动处理依赖关系(例如:安装 A.rpm 时,需先手动安装它依赖的 B.rpm 和 C.rpm)。
    • 精细控制:适合需要直接操作包文件的场景(如调试、强制覆盖安装)。
  • YUM
    • 高层工具:基于 RPM 构建,专注于自动化依赖解决和远程仓库管理。
    • 依赖自动化:从仓库中自动下载并安装所需依赖(例如:yum install A 会自动拉取 B 和 C)。
    • 事务性操作:确保安装/升级过程的完整性(失败时自动回滚)。
    • 依赖 RPM:YUM 的底层操作(如最终安装包)仍需调用 rpm 命令。

虽然 YUM 简化了日常操作,但某些场景仍需直接使用 rpm 命令:

场景 1:直接操作本地 RPM 文件

  • 安装一个手动下载的 .rpm 文件(尤其是离线环境):

    bash
    代码解读
    复制代码
    rpm -ivh package.rpm # 直接安装(但需自行处理依赖) yum localinstall package.rpm # 更推荐:YUM 会尝试解决依赖

场景 2:查询或验证已安装的包

  • 查看某个文件属于哪个包:

    bash
    代码解读
    复制代码
    rpm -qf /usr/bin/curl # 直接通过 RPM 查询
  • 验证包的完整性:

    bash
    代码解读
    复制代码
    rpm -V httpd # 检查 Apache 是否被篡改

场景 3:强制操作

  • 强制覆盖安装(忽略冲突或依赖警告):

    bash
    代码解读
    复制代码
    rpm -ivh --force package.rpm

    (YUM 不支持此类高风险操作,需直接使用 RPM。)

场景 4:构建或调试 RPM 包

  • 开发者构建 RPM 包时,需使用 rpmbuild 和 rpm 命令。

2.5 YUM更新源

  1. 备份原有的仓库

    bash
    代码解读
    复制代码
    # 进入仓库目录 cd /etc/yum.repos.d/ # 创建备份文件夹 sudo mkdir bak # 备份所有 .repo 文件 sudo mv *.repo bak/
  2. 下载国内源的仓库文件并替换

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

    如果不是CentOs7可以直接去网站找对应的文件https://mirrors.aliyun.com/repo

  3. 更新 EPEL 源(可选)

代码解读
复制代码
EPEL 提供额外软件包,建议一并替换:
bash
代码解读
复制代码
```bash # 备份旧 EPEL 源 sudo mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup # 下载阿里云 EPEL 源(以 CentOS 7 为例) sudo wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo ```

4. 清理缓存并生成新缓存

go
代码解读
复制代码
```bash sudo yum clean all # 清理旧缓存 sudo yum makecache # 生成新缓存 ```

5. 更新系统

go
代码解读
复制代码
```bash sudo yum update -y # 执行系统更新 ```

三,apt

3.1 介绍

APT(Advanced Package Tool)是 Debian 及其衍生发行版(如 Ubuntu、Linux Mint 等)的高级包管理工具,专注于自动化解决依赖关系和简化软件管理流程。它与 RPM/YUM 的定位类似,但面向不同的 Linux 生态。

简而言之apt就是Ubuntu系统用来对标CentOs的yum

APT 的核心功能

  1. 依赖自动处理
    • 安装软件时自动解析并下载所有依赖项,无需手动干预。
    • 例如:安装 nginx 时会自动安装 libssl、zlib 等依赖包。
  2. 软件仓库管理
    • 从配置的远程仓库(如官方源、PPA)获取软件包。
    • 支持 HTTP、FTP、CD-ROM 等多种来源。
  3. 本地包操作
    • 安装本地 .deb 文件时自动解决依赖(类似 yum localinstall)。
    • 例如:apt install ./package.deb。
  4. 版本控制和升级
    • 支持选择性升级(如仅安装安全更新)。
    • 可以固定(pin)特定软件的版本,防止意外升级。
  5. 清理与优化
    • 自动删除无用的依赖包(autoremove)。
    • 清理下载的缓存包(clean)。

3.2 更换源

  1. 查看Ubuntu的版本中Codename信息

    bash
    代码解读
    复制代码
    lsb_release -a
  2. 修改源文件

    bash
    代码解读
    复制代码
    sudo gedit /etc/apt/sources.list
  3. 将内容替换

    ini
    代码解读
    复制代码
    deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse # 注意须将xenial改成自己系统的Codename # 阿里云源 deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##proposed表示測試版源,不建议启用 #deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse # 源碼 deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##測試版源 #deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse # 清华大学源 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse ##測試版源 #deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse # 源碼 deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse ##proposed表示測試版源,不建议启用 #deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
  4. 更新源

    bash
    代码解读
    复制代码
    apt-get update

    这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。 我们在软件包管理器里看到的新的软件列表,都是通过update命令更新的。

  5. 更新软件(如果不需要更新就不用)

    bash
    代码解读
    复制代码
    apt-get upgrade

3.3 常用命令

APT(Advanced Package Tool)是Debian及其衍生系统(如Ubuntu)中用于管理软件包的核心工具。它简化了软件的安装、更新和删除流程,适合日常系统维护。以下是常用命令及用法详解:


3.3.1 基本用法

  1. 更新软件包列表
    从配置的软件源同步最新包信息(不安装更新):

    bash
    代码解读
    复制代码
    sudo apt update
  2. 升级已安装的软件包
    安装所有可用的更新(需先执行 apt update):

    bash
    代码解读
    复制代码
    sudo apt upgrade
    • 仅升级特定包:sudo apt upgrade package_name
  3. 完整系统升级(含内核)
    更彻底的升级,可能删除旧包或添加依赖:

    bash
    代码解读
    复制代码
    sudo apt full-upgrade
  4. 安装软件包

    bash
    代码解读
    复制代码
    sudo apt install package_name
    • 安装指定版本:sudo apt install package_name=version
  5. 删除软件包

    • 删除软件但保留配置文件:
      bash
      代码解读
      复制代码
      sudo apt remove package_name
    • 彻底删除软件及配置:
      bash
      代码解读
      复制代码
      sudo apt purge package_name
  6. 自动清理无用依赖
    删除因安装其他软件而自动引入、现不再需要的包:

    bash
    代码解读
    复制代码
    sudo apt autoremove

3.3.2 查询与搜索

  1. 搜索软件包
    按名称或描述关键词搜索:

    bash
    代码解读
    复制代码
    apt search keyword
  2. 查看包详细信息
    显示版本、依赖、描述等:

    bash
    代码解读
    复制代码
    apt show package_name
  3. 列出已安装的包

    bash
    代码解读
    复制代码
    apt list --installed
    • 检查某个包是否安装:
      bash
      代码解读
      复制代码
      apt list package_name
  4. 查看可升级的包

    bash
    代码解读
    复制代码
    apt list --upgradable

3.3.3 维护与清理

  1. 删除旧版本的缓存包
    (保留最新版本缓存,释放空间):

    bash
    代码解读
    复制代码
    sudo apt autoclean
  2. 删除所有缓存包
    (彻底清理下载的 .deb 文件):

    bash
    代码解读
    复制代码
    sudo apt clean
  3. 修复依赖问题
    自动修复损坏的依赖关系:

    bash
    代码解读
    复制代码
    sudo apt --fix-broken install

3.3.4 高级操作

  1. 添加PPA仓库
    安装 software-properties-common 后添加第三方源:

    bash
    代码解读
    复制代码
    sudo add-apt-repository ppa:user/repo sudo apt update
  2. 降级软件包
    恢复到旧版本(需确保版本在仓库中存在):

    bash
    代码解读
    复制代码
    sudo apt install package_name=old_version
  3. 下载包但不安装
    下载 .deb 文件到当前目录:

    bash
    代码解读
    复制代码
    apt download package_name

3.3.5 注意事项

  • 权限要求:APT 命令通常需要 sudo 权限(除查询类命令如 apt search)。
  • 更新优先:执行升级前务必先运行 apt update,否则无法获取最新包信息。
  • apt vs apt-get:apt 是新一代工具,整合了 apt-get 和 apt-cache 的功能,提供更友好的输出(如进度条)。传统脚本中仍建议使用 apt-get。

四,dpkg

4.1 介绍

dpkg 是 Debian 及其衍生系统(如 Ubuntu)中用于管理 .deb 软件包的基础工具。它是 APT(高级包管理工具) 的底层实现,直接操作软件包文件,但不处理依赖关系。dpkg就相当于rpm

4.2 基本功能

  1. 安装本地 .deb 包

    bash
    代码解读
    复制代码
    sudo dpkg -i package.deb
    • 问题:如果缺少依赖,安装会失败,但可以用 apt 修复:

      bash
      代码解读
      复制代码
      sudo apt --fix-broken install
  2. 卸载软件包

    bash
    代码解读
    复制代码
    sudo dpkg -r package_name # 卸载包(保留配置文件) sudo dpkg -P package_name # 完全卸载包(删除配置文件)
  3. 查询已安装的包

    bash
    代码解读
    复制代码
    dpkg -l # 列出所有已安装的包 dpkg -l | grep keyword # 按关键词过滤 dpkg -s package_name # 查看包的详细信息(版本、依赖等)
  4. 列出包内文件

    bash
    代码解读
    复制代码
    dpkg -L package_name # 列出包安装的所有文件路径 dpkg -S /path/to/file # 查询文件属于哪个包

4.3 高级操作

  1. 解包但不安装 将 .deb 文件解压到指定目录(用于手动提取文件):

    bash
    代码解读
    复制代码
    dpkg -x package.deb /target/directory
  2. 查看 .deb 包内容 查看包内文件列表和元信息(无需安装):

    bash
    代码解读
    复制代码
    dpkg -c package.deb # 列出包内文件 dpkg -I package.deb # 显示包的元信息(版本、依赖等)
  3. 重新配置已安装的包 重新运行包的配置脚本(如重置设置):

    bash
    代码解读
    复制代码
    sudo dpkg-reconfigure package_name
  4. 修复包状态 如果包状态异常(如安装中断),可重置状态标记:

    bash
    代码解读
    复制代码
    sudo dpkg --configure -a # 配置所有未完成的安装 sudo dpkg --force-all -i package.deb # 强制安装(慎用)

4.4 常见场景示例

场景 1:手动安装本地 .deb 包

bash
代码解读
复制代码
sudo dpkg -i google-chrome.deb # 若提示依赖缺失,修复依赖 sudo apt --fix-broken install

场景 2:查询软件包是否安装

bash
代码解读
复制代码
dpkg -s nginx # 输出中若包含 "Status: install ok installed" 表示已安装

场景 3:彻底删除包及其配置

bash
代码解读
复制代码
sudo dpkg -P firefox

场景 4:查找文件所属的包

bash
代码解读
复制代码
dpkg -S /usr/bin/curl # 输出示例:curl: /usr/bin/curl

4.5 注意事项

  • 依赖问题:dpkg 不解决依赖,建议优先使用 apt 安装软件。
  • 强制操作:--force-* 参数可能破坏系统稳定性,仅在明确后果时使用。
  • 结合 apt:日常维护推荐使用 apt,仅在需要直接操作 .deb 文件时使用 dpkg。

五,dnf

5.1 介绍

以下是 DNF(Dandified YUM)的详细介绍,它是新一代 RPM 发行版(如 Fedora、RHEL 8+、CentOS 8+)的默认包管理工具,旨在替代传统的 YUM,提供更快的速度和更健壮的依赖管理。

DNF 的核心功能

  1. 软件包管理
    • 安装、更新、卸载软件包。
    • 自动解决依赖关系。
  2. 仓库管理
    • 支持从官方/第三方仓库(Repo)获取软件。
  3. 系统维护
    • 清理缓存、检查更新、回滚操作。
  4. 高级功能
    • 软件包组管理、模块化支持、事务历史查询。

5.2 DNF 的安装

注意:

  • Fedora/CentOS 8+/RHEL 8+:默认已预装 DNF,无需手动安装。

  • 旧版系统(如 CentOS 7):需手动安装:

    bash
    代码解读
    复制代码
    sudo yum install epel-release # 启用 EPEL 仓库 sudo yum install dnf

5.3 常用命令

好的!以下是 DNF 命令的分类整理,按功能划分,方便快速查找:


5.1 软件包安装与卸载

安装单个包

bash
代码解读
复制代码
sudo dnf install <包名> # 例如:sudo dnf install nginx

批量安装

bash
代码解读
复制代码
sudo dnf install <包1> <包2> # 例如:sudo dnf install git vim

卸载软件包

bash
代码解读
复制代码
sudo dnf remove <包名> # 例如:sudo dnf remove httpd

卸载并清理无用依赖

bash
代码解读
复制代码
sudo dnf autoremove <包名> # 例如:sudo dnf autoremove docker-ce

5.2 更新与升级

更新所有软件包

bash
代码解读
复制代码
sudo dnf update

仅更新指定包

bash
代码解读
复制代码
sudo dnf update <包名> # 例如:sudo dnf update kernel

检查可用的更新(不执行)

bash
代码解读
复制代码
dnf check-update

5.3 搜索与查询

搜索软件包

bash
代码解读
复制代码
dnf search <关键词> # 例如:dnf search "python3"

查看包详细信息

bash
代码解读
复制代码
dnf info <包名> # 例如:dnf info firefox

列出已安装的包

bash
代码解读
复制代码
dnf list installed

查找文件所属的包

bash
代码解读
复制代码
dnf provides <文件路径> # 例如:dnf provides /usr/bin/pip3

5.4 仓库管理

列出启用的仓库

bash
代码解读
复制代码
dnf repolist

添加新仓库

bash
代码解读
复制代码
sudo dnf config-manager --add-repo <仓库URL> # 例如:添加 EPEL 仓库

启用/禁用仓库

bash
代码解读
复制代码
sudo dnf config-manager --enable <仓库名> # 启用 sudo dnf config-manager --disable <仓库名> # 禁用

清理仓库缓存

bash
代码解读
复制代码
sudo dnf clean all

5.5 系统维护

清理无用依赖

bash
代码解读
复制代码
sudo dnf autoremove

删除旧内核版本

bash
代码解读
复制代码
sudo dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q)

修复损坏的依赖

bash
代码解读
复制代码
sudo dnf check && sudo dnf distro-sync # 检查并修复依赖问题

5.6 软件包组管理

安装软件包组(如开发工具、桌面环境)

bash
代码解读
复制代码
sudo dnf group install "<组名>" # 例如:sudo dnf group install "Development Tools"

列出所有可用包组

bash
代码解读
复制代码
dnf group list

更新包组

bash
代码解读
复制代码
sudo dnf group update "<组名>"

5.7 事务与历史记录

查看操作历史

bash
代码解读
复制代码
sudo dnf history

回滚到指定事务

bash
代码解读
复制代码
sudo dnf history undo <事务ID> # 撤销某个事务 sudo dnf history rollback <事务ID> # 回滚到某个事务前的状态

5.8. 高级操作

仅下载软件包(不安装)

bash
代码解读
复制代码
dnf download <包名> # 例如:dnf download nginx

安装特定版本的包

bash
代码解读
复制代码
sudo dnf install <包名>-<版本> # 例如:sudo dnf install python3-3.9.10

模块化管理(适用于 CentOS/RHEL 8+)

bash
代码解读
复制代码
dnf module list # 列出可用模块 sudo dnf module enable <模块名> # 启用模块(如:postgresql:12)

5.9 其他实用命令

查看 DNF 版本

bash
代码解读
复制代码
dnf --version

显示帮助文档

bash
代码解读
复制代码
dnf --help # 查看所有命令选项 man dnf # 查看完整手册
注:本文转载自juejin.cn的normaling的文章"https://juejin.cn/post/7492371892385529910"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

133
开发工具
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top