十,软件包管理

一,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 介绍

YUMYellowdog 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.rpmC.rpm)。
    • 精细控制:适合需要直接操作包文件的场景(如调试、强制覆盖安装)。
  • YUM
    • 高层工具 :基于 RPM 构建,专注于自动化依赖解决远程仓库管理
    • 依赖自动化 :从仓库中自动下载并安装所需依赖(例如:yum install A 会自动拉取 BC)。
    • 事务性操作:确保安装/升级过程的完整性(失败时自动回滚)。
    • 依赖 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 包时,需使用 rpmbuildrpm 命令。

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
 ```
  1. 清理缓存并生成新缓存
go 复制代码
 ```bash
 sudo yum clean all     # 清理旧缓存
 sudo yum makecache     # 生成新缓存
 ```
  1. 更新系统
go 复制代码
 ```bash
 sudo yum update -y     # 执行系统更新
 ```

三,apt

3.1 介绍

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

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

APT 的核心功能

  1. 依赖自动处理
    • 安装软件时自动解析并下载所有依赖项,无需手动干预。
    • 例如:安装 nginx 时会自动安装 libsslzlib 等依赖包。
  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-getapt 是新一代工具,整合了 apt-getapt-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                         # 查看完整手册
相关推荐
FoldWinCard3 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计5 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud1235 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质5 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX5 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.5 小时前
Linux系统管理
linux·运维
阿龙的工作记录6 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手6 小时前
Linux的基本指令
linux·运维·服务器
hkj88087 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动8 小时前
Linux编程笔记3【个人用】
linux·笔记