Linux-yumdownloader命令详解

本次介绍的是红帽系列的操作系统下载软件包用于离线暗转的方法,Debian系列的方式请自行搜索,这里不做介绍。

软件包的下载使用yum或dnf的downloadonly插件。这个插件是大多数现代 Linux 发行版(如 CentOS 7+, Fedora, RHEL 7+)默认包含的,所以你一般不需要额外安装。这个插件也是目前最直接、最推荐的方式。使用的时候需要添加--downloadonly 和 --downloaddir 这两个选项。

选项说明

  • --downloadonly: 核心选项,告诉 yum 或 dnf 只下载软件包,不要进行安装或其他操作。
  • --downloaddir=<目录路径>: 指定一个目录来存放下载好的 RPM 包。如果省略此选项,RPM 包会默认下载到 /var/cache/yum/ 目录下,推荐你指定一个有写权限的目录,比如你自己的家目录下的一个文件夹,这样方便查找。
  • -y (可选): 表示 "yes",在需要确认时自动回答"是",避免交互式提示。在下载-only 模式下通常不需要,但加上也无妨。

另外还有一个命令也是推荐使用的,yumdownloader命令,下面分别介绍这几个命令的用法。

假设我们要下载一个名为 httpd 的软件包,并存放到我们创建的 my_downloads 文件夹中。

bash 复制代码
# 在你的家目录下创建一个文件夹
mkdir -p ~/my_downloads
#使用 dnf (适用于 Fedora, CentOS 8+, RHEL 8+ 等):
# dnf 下载 httpd 包到 ~/my_downloads 目录
dnf install httpd --downloadonly --downloaddir=~/my_downloads
# 如果你的系统较老,使用 yum (适用于 CentOS 7, RHEL 7 等):
# yum 下载 httpd 包到 ~/my_downloads 目录
yum install httpd --downloadonly --downloaddir=~/my_downloads

如果想要下载已经安装的软件包的更新的离线安装包和依赖,可以使用如下命令:

bash 复制代码
# 下载系统中 httpd 包的更新
dnf update httpd --downloadonly --downloaddir=~/my_downloads
# 或者
yum update httpd --downloadonly --downloaddir=~/my_downloads

命令的对应关系总结如下:

目的 命令 (使用 dnf) 命令 (使用 yum)
下载单个软件包 sudo dnf install <包名> --downloadonly --downloaddir=<目录> sudo yum install <包名> --downloadonly --downloaddir=<目录>
下载软件包及其依赖 sudo dnf groupinstall "<环境组名>" --downloadonly --downloaddir=<目录> sudo yum groupinstall "<环境组名>" --downloadonly --downloaddir=<目录>
下载软件包的更新 sudo dnf update <包名> --downloadonly --downloaddir=<目录> sudo yum update <包名> --downloadonly --downloaddir=<目录>
下载所有可用更新 sudo dnf update --downloadonly --downloaddir=<目录> sudo yum update --downloadonly --downloaddir=<目录>

接下来介绍一下yumdownloader命令的用法。

首先要明确一个核心概念:yumdownloader 不是一个 yum 的子命令,它是一个独立的命令行工具。它专门被设计用来解决"下载软件包及其依赖项"这一个核心问题,并且非常高效。

  1. yumdownloader 的核心作用与优势

yumdownloader 的主要目标是:从软件仓库(repository)中精确地下载一个或多个 RPM 软件包,并自动解决其所有依赖关系,将依赖包一并下载下来。

相比于 yum install --downloadonly 方式,yumdownloader 有几个显著的优势:

  • 轻量级:它本身没有 yum 那么多的配置管理和解析逻辑,启动更快,专注于下载任务。
  • 灵活性:提供了丰富的命令行选项,允许更精细地控制下载行为,例如不下载依赖、下载源码包等。
  • 明确的结果:yumdownloader 只下载,不缓存。如果你指定了目录,所有 .rpm 文件都会明明白白地放在那里,不像 yum 会放到系统深层的缓存目录中。

接下来介绍一下yumdownloader的常用选项的详解

bash 复制代码
# 创建一个下载目录
mkdir -p ~/downloaded_rpms

# 下载 httpd 包及其依赖到 ~/downloaded_rpms 目录
yumdownloader --destdir=~/downloaded_rpms httpd

--destdir=<目录路径>: 指定 RPM 包的下载目录。这是最重要的选项,强烈推荐始终使用它,否则包会下载到当前目录。注意--resolve是默认的,也可以显式的写在命令中,增加可读性。

bash 复制代码
# 显式的写上选项--resolve,下载服务以及依赖包
yumdownloader --destdir=~/downloaded_rpms --resolve httpd

如果你明确知道只需要一个特定的包,不需要它的任何依赖(例如,你已经有了依赖包,或者只是为了分析包内容),可以使用 --resolve 的反向选项 --noresolve。

如果你的系统是 64 位的,但需要某个软件的 32 位版本,可以通过 --arch 选项指定。

bash 复制代码
# 下载 32 位的 libwebkitgtk 包及其依赖
yumdownloader --destdir=~/downloaded_rpms --arch=i686  --resolve libwebkitgtk

如果你想为系统上已经安装的某个软件包重新下载其原始的 .rpm 安装文件。yumdownloader 提供了一个非常方便的 --url 选项来实现这个功能。

bash 复制代码
# 假设系统中已安装了 docker-ce
# 查看其安装后的包名,通常是 docker-ce 和 docker-ce-cli 等
# 这里以确保下载的是备份了 .repo 文件中的源的路径准确的包
yumdownloader --destdir=~/downloaded_rpms --resolve --url docker-ce

--url: 这个选项告诉 yumdownloader 不仅要下载包,还要去找到原始仓库服务器上该包的 URL。这对于后续的离线安装或问题排查非常有帮助。不加 --url 时,它可能会从缓存下载,路径可能不指向官方源。

相关推荐
海里的鱼20228 小时前
Ubuntu 服务器部署 Gitea + Ollama 及 VSCode 连接
服务器·ubuntu·gitea
Alphapeople8 小时前
isaac sim和isaac lab的安装
linux·运维·服务器
爱学习的程序媛8 小时前
Docker 完全指南:从入门到生产级实践
运维·docker·容器
炘爚8 小时前
Linux 时间函数、格式化及 printf 相关总结
linux
平常心cyk8 小时前
Linux快速复习——常用命令
linux
w6100104668 小时前
CKAD-2026-金丝雀部署
linux·运维·服务器·k8s
.小小陈.8 小时前
深度拆解 Linux Ext 系列文件系统:从硬件底层到软硬链接全流程
linux·运维·服务器
Geoking.8 小时前
GitHub 多账号生存指南:从 SSH 连接到 GPG 签名全流程
运维·ssh·github
Frank_refuel9 小时前
Linux操作系统 - > 进程信号(中)
linux·运维·服务器