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 时,它可能会从缓存下载,路径可能不指向官方源。

相关推荐
Methy6 分钟前
IoTHub半个月崩了五次?都是裸rethrow惹的祸
服务器·c++·后端
Wang's Blog11 分钟前
Java 项目实战: 外卖平台-后台系统登录功能开发
java·服务器·redis
天天喝旺仔40 分钟前
Linux 性能排查实战:用 perf、strace 与火焰图定位 CPU、内存与 IO 瓶颈
linux·性能优化·运维开发
LuminousCPP1 小时前
Linux系统编程(二):从目录树到命令执行|路径、环境变量、alias 与文件操作入门
linux·经验分享·笔记
第十人i1 小时前
Linux 系统初始化配置清单:新服务器快速部署
linux·服务器
LongRunning1 小时前
【Linux】RK3568-OpenCV+YOLO(七)
linux
j7~1 小时前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程
傲世仙尊2 小时前
设计者的取舍-路径fork的诞生与全局文件队列
linux
蓝速科技2 小时前
会议室门牌签到功能选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
逐流人2 小时前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd