十,软件包管理

一,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                         # 查看完整手册
相关推荐
Johny_Zhao1 小时前
Burp Suite 企业级深度实战教程
linux·网络·网络安全·信息安全·云计算·shell·burp suite·系统运维·itsm
良辰美景好时光2 小时前
keepalived定制日志bug
linux·运维·bug
s_little_monster2 小时前
【Linux】网络--网络层--IP协议
linux·运维·网络·经验分享·笔记·学习·tcp/ip
forward_huan2 小时前
wsl安装linux
linux·wsl
西阳未落2 小时前
Linux(10)——第二个小程序(自制shell)
linux·运维·服务器
chiou7223 小时前
为 Ubuntu 安装的软件创建桌面图标
linux·ubuntu·lua
binary思维3 小时前
Ubuntu挂起和休眠
linux·运维·ubuntu
初叶 crmeb3 小时前
JAVA单商户易联云小票打印替换模板
java·linux·python
qq_447429413 小时前
数据结构与算法:图论——拓扑排序
linux·c语言·学习·图论
緈福的街口3 小时前
【leetcode】459.重复的子字符串
linux·算法·leetcode